【发布时间】:2015-06-16 09:05:07
【问题描述】:
我一直在尝试使用System.Drawing.Printing; 来获取网络打印机的队列状态。
我可以检索打印机的属性,但我似乎无法真正获得队列状态。
这是我迄今为止尝试过的:
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "ES5461 MFP(PCL)"; // Load the appropriate printer's setting
从那里我可以看到打印机是有效的,因为 ps.IsValid 是 true,但我不能再进一步了。
我也尝试过使用System.Management 来检索状态,但我只知道如何转储信息并且也没有队列信息。
string printerName = "ES5461";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}%'", printerName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection coll = searcher.Get();
foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
您知道使用任何 .dll 检索队列状态(文档数量)的任何方法吗?
【问题讨论】:
-
从 .NET 3.0 开始,您可以使用 PrintQueue 类。看看:msdn.microsoft.com/en-us/library/… 和 msdn.microsoft.com/en-us/library/…
-
我已经查过了,但微软不建议在任何 ASP.Net 服务中使用它:“System.Printing 命名空间中的类不支持在 Windows 服务或 ASP 中使用。 NET 应用程序或服务。尝试从这些应用程序类型之一中使用这些类可能会产生意外问题,例如服务性能下降和运行时异常。还是谢谢你。
-
根据微软的说法,System.Drawing.Printing 命名空间也将用于winforms。
-
@MiquelColl - 为什么你会关注关于
System.Printing的警告却忽略System.Drawing.Printing的类似警告? -
糟糕。我没看到那个。我的错。对不起;无论哪种方式,我都在尝试再次使用 Nissim 所说的话,看来我正在做些什么。谢谢!
标签: c# printing system.drawing system.management