这就是我们正在尝试做的事情:
我们希望以一种不引人注目的方式获取客户在其计算机上打印的所有内容(我们所有的客户都运行 POS 系统并专门使用 Windows XP)并将其发送给我们,我们决定最好的方法是创建一个 c # 向我们发送假脱机文件的应用程序,我们已经可以轻松解析这些文件。
但是,这需要将“保留所有打印文档”设置为 true。我们希望在我们的应用程序中而不是手动执行此操作,原因如下:我们的一些(数百个)客户(找不到更好的词)是愚蠢的。我们不想强迫他们在控制面板上乱搞……我们的技术支持人员已经够忙了。
这是我遇到问题的地方:
string searchQuery = "SELECT * FROM Win32_Printer";
ManagementObjectSearcher searchPrinters = new ManagementObjectSearcher(searchQuery);
ManagementObjectCollection printerCollection = searchPrinters.Get();
foreach (ManagementObject printer in printerCollection)
{
PropertyDataCollection printerProperties = printer.Properties;
foreach (PropertyData property in printerProperties)
{
if (property.Name == "KeepPrintedJobs")
{
printerProperties[property.Name].Value = true;
}
}
}
据我从几个小时的 WMI 研究中得知,这应该将每台打印机的 KeepPrintedJobs 属性设置为 true...但它不起作用。一旦 foreach 循环结束,KeepPrintedJobs 就会设置回 false。我们更愿意使用 WMI,而不是在注册表中搞乱,但我不能花一辈子的时间来尝试让这项工作正常进行。关于缺少什么有什么想法吗?
尝试添加呼叫Put()
on the ManagementObject
显式地保留更改,如下所示:
foreach (ManagementObject printer in printerCollection)
{
PropertyDataCollection printerProperties = printer.Properties;
foreach (PropertyData property in printerProperties)
{
if (property.Name == "KeepPrintedJobs")
{
printerProperties[property.Name].Value = true;
}
}
printer.Put();
}
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)