2012-03-20 55 views
5

很可能是因爲我必須寫一些過於複雜的東西,而且沒有固定的方式來做這件事,但是:如何列出所有可用的打印機驅動程序,如C#中的添加打印機嚮導?

如何讓我自己獲得所有可用打印機驅動程序的列表,就像添加打印機一樣嚮導在製造商和打印機顯示它時會做什麼?基本上,我需要一個自定義添加打印機對話框,如果沒有這個,我有點毛絨;)

像這樣:(忽略箭頭,借用圖像)

enter image description here

我還需要路徑通過在列表中的司機表示的.inf文件

編輯:小背景:

我試圖通過在TS會話調用添加打印機嚮導(與高PRIVS)添加打印機,添加pri轉到正確的TS端口,然後嘗試保存該打印機的信息,以便在登錄時根據我保存的值自動添加用戶打印機。

到目前爲止,我還沒有找到一種方法來獲取驅動程序信息(最好是打印機驅動程序的.inf文件的實際路徑,因爲我可以使用PrintUI來安裝打印機)打印機。

因此,我訴諸自定義對話框來匹配打印機驅動程序。由於該工具僅在初始打印機安裝時使用,並且只能由管理員使用,所以我不介意在次級對話框中選擇驅動程序,以便我可以保存信息。

編輯:針對Windows Server 2008 R2的(Win32_PrinterDriver犯規似乎工作)

+0

嘗試解析'%windir%\ inf'中的所有inf文件。祝你好運:-) – rekire 2012-03-20 17:36:40

+0

@rekire我的印象是驅動程序位於%windir%\ System32 \ DriverStore \ FileRepository中?那是不正確的? – 2012-03-20 17:39:00

+0

@ DanielA.White我不需要它,如果我可以在其他地方獲得信息,基本上我通過printui.dll,PrintUIEntry/il添加了一臺打印機,它顯示了嚮導,然後我需要在登錄時複製它 - m試圖記錄打印機正在使用的驅動程序,以便在登錄時重新添加它。 – 2012-03-20 17:40:28

回答

2

可以查詢WMI提供此信息。 Win32_PrinterDriver class詳細說明可用屬性。您可以使用System.Management Namespace中的類來執行查詢。

SelectQuery selectQuery = new SelectQuery("Win32_PrinterDriver"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery); 

foreach (ManagementObject printerDriver in searcher.Get()) 
{ 
    // Your code here. 
} 

您可以通過索引來訪問屬性,即。

另請參閱WMI Queries MSDN上的主題。

+1

但是,這看起來給我的打印機數量非常少 - 可能已經足以實現我想要的效果,因爲它很可能已安裝的打印機正在使用的驅動程序列表以及當前要使用的驅動程序列表,這些都是可行的。 – 2012-03-20 22:40:28

相關問題