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

时间:2012-03-20 17:32:04

标签: c# printing

很可能我必须为此写一些过于复杂的内容,并且没有常规方法可以做到这一点,但是:

如何让自己获得所有可用打印机驱动程序的列表,就像添加打印机向导在制造商然后由打印机显示它们时所做的那样?我基本上需要一个自定义添加打印机对话框,没有这个,我有点塞;)

像这样:(忽略箭头,借来的图像)

enter image description here

我还需要列表

中驱动程序表示的.inf文件的路径

编辑:一点背景:

我试图通过在TS会话中调用添加打印机向导(带有提升的私有)来添加打印机,将打印机添加到正确的TS端口,然后尝试保存该打印机的信息,以便在登录用户时根据我保存的值自动添加打印机。

到目前为止,在添加打印机后,我无法找到获取驱动程序信息的方法(最好是该打印机驱动程序的.inf文件的实际路径,因为我可以使用PrintUI安装打印机)

因此,我使用自定义对话框来匹配打印机驱动程序。由于该工具仅在初始打印机安装时使用,并且仅由管理员使用,因此我不介意在第二次选择驱动程序时使用辅助对话框,以便我可以保存信息。

编辑:定位Windows Server 2008 R2(Win32_PrinterDriver似乎不起作用)

1 个答案:

答案 0 :(得分:3)

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

您可以通过索引属性来访问属性,即printerDriver["DriverPath"]

另请参阅MSDN上的WMI Queries主题。

从一个有趣的方面来看,微软已经为某些版本的PowerShell(在Windows 10等上)添加了一个Get-PrinterDriver命令行开关,它与上面的代码非常相似。

更新:我正在查看旧问题并在GitHub上发现了DriverStoreExplorer项目。枚举所有打印机驱动程序的代码有很多,所以在这里重现它是没有意义的。