【发布时间】:2012-08-20 01:17:39
【问题描述】:
这是我们正在尝试做的事情:
我们想要一种不显眼的方式来获取客户在他们的计算机上打印的所有内容(我们所有的客户都运行 POS 系统并专门使用 Windows XP)并将其发送给我们,我们已经决定最好的方法是创建 ac# 应用程序,向我们发送他们的假脱机文件,我们已经可以轻松解析这些文件。
但是,这需要将“保留所有打印的文档”设置为 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 而不是在注册表中乱七八糟,但我不能永远花时间尝试使这项工作。关于缺少什么的任何想法?
【问题讨论】:
-
有人知道吗?我们已经着手进行小型注册表黑客攻击,但我们仍然想知道这是否可能。
-
你看过这个:msdn.microsoft.com/en-us/library/w09tfy94.aspx 吗?在我看来,您好像必须调用
Put()的重载之一才能显式提交更改。 -
拍前额 愚蠢,当然,谢谢。 Reg hacks 感觉很脏。
-
SetPrinter() winapi 函数,Level = 2,PRINTER_INFO_2.Attributes 字段,PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 属性。