设定打印机的“KeepPrintedDocuments”属性在.NET(Setting printe

2019-09-21 15:02发布

下面是我们正在努力做的事情:

我们要采取一切客户打印他们的计算机上(我们所有的客户正在运行POS系统和使用Windows XP专用),并把它发送给我们一个不显眼的方式,我们已经决定这样做,最好的办法是创造交流#应用程序,向我们发送的假脱机文件,我们可以很容易地已经解析。

然而,这需要设置“保留所有打印的文档”为真。 我们要做到这一点在我们的应用程序,而不是手动,原因如下:我们的客户的一些(数百)是,由于缺乏一个更好的词,哑。 我们不希望他们周围迫使乱在控制面板......我们的技术支持人员是够忙的,因为它是。

这里就是我碰到一个问题:

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,而不是一塌糊涂,但我不能花永远努力使这项工作。 什么任何想法缺少?

Answer 1:

尝试添加一个电话Put()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();
}

希望帮助。



文章来源: Setting printer's “KeepPrintedDocuments” property in .NET