2011-07-20 17 views
3

我有一個問題,我需要幫助。對於我目前的項目,我需要製作批量繪圖應用程序。這個應用程序將有大約2000個AutoCAD圖紙需要打印。C#批量應用程序(PrintServer&PrintQueue問題)

應用程序需要5臺打印機,每個格式1個,從A4到A0。到目前爲止還沒有問題。

現在我們都明白,我們不能在沒有某種麻煩的情況下同時對2000張圖紙進行排隊。我在網上做了我的研究,並找到了查看當前打印機隊列的方法。使用PrintServer和PrintQueue。

以下是問題出現的地方。首先,我無法找到我需要的網絡打印機。打印機位於此網絡地址:192.168.0.14(\ vps01w2k8)。

繼從MSDN指南:

 PrintServer m_PrintServer = new PrintServer(@"\\vps01w2k8"); 
    PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues(); 

    foreach (PrintQueue queue in m_PrintQueueCollection) 
    { 
     cbPrinters.Items.Add(queue.Name.ToString()); 
    }

這不會給我任何打印機。嘗試LocalPrintServer(或只是沒有任何參數傳遞給它的PrintServer)。給我我的本地打印機(顯然),而不是我的網絡打印機。

我的下一步是找到一種方法來查找我安裝的所有打印機,這些打印機讓我進入using System.Drawing.Printing;而不是using System.Printing;

 foreach (String printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters) 
    { 
     cbPrinters.Items.Add(printer.ToString()); 
    }

這個簡單的代碼給了我所有的打印機,包括聯網的打印機。然而,現在我陷入了.NET 2.0和3.0之間(以及之後)。類PrinterSettings和PrintServer/PrintQueue沒有連接。

最後,我嘗試使用WMI approach訪問打印機隊列。查詢給我結果的Win32_PrintJob。不幸的是,這些伴隨着10秒鎖定來檢索這些結果。

我出來的想法。我正在尋找打印服務器的修復程序來正確返回我的聯網打印機或任何建議,以使用PrinterSettings類進行批量打印的類似技術。

由於提前,

的Jordy

+0

是網絡打印機還'連接'在Windows中? – aL3891

+0

是的,他們是積極的,可以使用。 – Kaiwa

+0

我也看到了,你提到msdn示例不會給你任何打印機,但是它不是你得到任何打印機隊列? (m_PrintServer.GetPrintQueues()沒有返回任何內容)編號猜測這是某種安全問題..是在不同的帳戶安全上下文下運行的程序? (也就是說它完全信任?) – aL3891

回答

12

找到它。當調用GetPrintQueues時,你必須傳入一個EnumeratedPrintQueueTypes數組。它現在返回本地和網絡打印機(所有安裝的打印機)。

PrintServer m_PrintServer = new PrintServer(); 
PrintQueueCollection m_PrintQueueCollection = m_PrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });