2011-04-13 111 views
3

下面這個問題:How do I retrieve a list or number of jobs from a printer queue?如何使用LocalPrintServer定位特定的打印機?

我仍然堅持如何針對特定的打印機,我目前只知道使用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; 
} 

這畢竟不是那麼難!

回答

4

嘗試指定打印機名稱的LocalPrintServer.GetPrintQueue。

+0

這實際上是我想要嘗試的。我會檢查出來的! – 2011-04-13 08:30:16

9

重要提示: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"  

到遠程服務器上檢索打印隊列,你需要做的:

new PrintServer("\\ike").GetPrintQueue("LUCY") 

是你需要解析它自己。

+4

您也可以通過將EnumeratedPrintQueueTypes數組傳遞給GetPrintQueues()來獲得網絡打印機,請參閱:http://stackoverflow.com/questions/6763374/c-batch-plot-application-printserver-printqueue-issues/6771934# 6771934 – salle55 2011-10-05 17:34:44

+0

@ salle55更容易 - 謝謝:-) – 2011-10-08 11:36:24