2011-04-08 67 views
8

我正在尋找一種方法來獲取特定打印機的作業列表或數量。在最好的情況下,我希望有一個「Job對象」代表一個打印作業及其在打印隊列中的名稱。如何從打印機隊列中檢索列表或作業數量?

這是必需的,因爲我需要監視打印機的狀態,所以我可以補充打印隊列中有一批新的文件也不會溢出打印後臺處理程序

提前感謝!

編輯:解

private int GetNumberOfPrintJobs() 
{ 
    LocalPrintServer server = new LocalPrintServer(); 
    PrintQueueCollection queueCollection = server.GetPrintQueues(); 
    PrintQueue printQueue = null; 

    foreach (PrintQueue pq in queueCollection) 
    { 
     if (pq.FullName == PrinterName) 
      printQueue = pq; 
    } 

    int numberOfJobs = 0; 
    if (printQueue != null) 
     numberOfJobs = printQueue.NumberOfJobs; 

    return numberOfJobs; 
} 

回答

7

您可以使用.NET 3.0的打印隊列類中System.Printing命名空間。它的NumberOfJobs屬性告訴你排隊的作業數量,GetPrintJobInfoCollection()返回所有作業的詳細信息。請注意,它沒有任何事件告訴您作業集合已更改,您需要使用計時器進行輪詢。一秒鐘左右應該會好起來的。

+0

我已經看過這個了。但它需要一個PrintServer對象來實例化。我正在使用本地安裝的打印機。這會造成問題嗎?但這肯定是一個理想的解決方案。我已經有一段時間()的輪詢,因爲我在一個線程中打印,我需要一個阻塞構造。此打印機也是_very_慢;) – 2011-04-08 13:30:52

+3

使用LocalPrintServer類。 – 2011-04-08 13:42:47

+0

難道這是顯而易見的?感謝您向我展示Google無法提供的內容:) – 2011-04-08 13:47:43

0

添加的代碼片段,您可以使用WMI以獲取有關設備和材料的系統信息。

see this article