关注此问题:How do I retrieve a list or number of jobs from a printer queue?
我仍然坚持如何使用LocalPrintServer类来定位我目前只知道名称的特定打印机。应用程序应该同时打印到多台机器上,并且需要单独监视所有打印机。任何人都可以向我提供一个代码片段,显示我如何仅使用打印机的名称来实例化LocalPrintServer对象吗?
提前致谢!
编辑:添加了解决方案的代码片段:
private int GetNumberOfPrintJobs()
{
LocalPrintServer server = new LocalPrintServer();
PrintQueueCollection queueCollection = server.GetPrintQueues();
PrintQueue printQueue = null;
foreach (PrintQueue pq in queueCollection)
{
if (pq.FullName == PrinterName) //PrinterName is a classmember
printQueue = pq;
}
int numberOfJobs = 0;
if (printQueue != null)
numberOfJobs = printQueue.NumberOfJobs;
return numberOfJobs;
}
毕竟这不是那么难!
答案 0 :(得分:10)
重要提示: GetPrintQueues
不会返回从用户角度安装的所有打印机 - 只是那些由本地服务器“拥有”的打印机。
更奇怪的是,LocalPrintServer.DefaultPrintQueue
并不一定包含在GetPrintQueues()
中,即使它来自LocalPrintServer
对象。
如果您使用System.Drawing.Printing.PrinterSettings.InstalledPrinters
string[]
,则会从用户的角度获取所有已安装打印机的列表。
如果您安装了远程打印机(在打印服务器上),其中一些可能在远程计算机上。如果它是可通过IP访问的联网打印机,那么它仍然是本地打印机:
"Send To OneNote 2010"
"Microsoft XPS Document Writer"
"HP LaserJet P2050 Series PCL6"
"HP LaserJet 1020"
"Fax"
"\\\\ike\\LUCY"
"\\\\shipping\\HP LaserJet 1020"
要在远程服务器上检索printqueue,您需要执行以下操作:
new PrintServer("\\ike").GetPrintQueue("LUCY")
是的,你需要自己解析一下。
答案 1 :(得分:4)
尝试使用指定打印机名称的LocalPrintServer.GetPrintQueue。