如何列出所有可用的打印机驱动程序,如C#中的添加打印机向导?

问题描述:

很可能是因为我必须写一些过于复杂的东西,而且没有固定的方式来做这件事,但是:如何列出所有可用的打印机驱动程序,如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

可以查询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