【问题标题】:Setting printer's "KeepPrintedDocuments" property in .NET在 .NET 中设置打印机“保留打印的文档”属性
【发布时间】: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 属性。

标签: c# .net printing wmi


【解决方案1】:

尝试在ManagementObject 上添加对Put() 的调用以显式保留更改,如下所示:

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();
}

希望对您有所帮助。

【讨论】:

  • 我们已经向我们的 XP 客户发布了版本,其中很多客户使用 XPe,因此无论如何我们都必须使用注册表方法,因为我们需要针对早期的 .NET 版本。但是,这将在不久的将来对我们有用,所以谢谢!
  • 陷入这个问题2天,这个答案对我有很大帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多