【问题标题】:How can I list all available printer drivers like the Add Printer Wizard in C#?如何列出所有可用的打印机驱动程序,如 C# 中的添加打印机向导?
【发布时间】:2012-03-20 17:32:03
【问题描述】:

很可能我必须为此写一些过于复杂的东西,而且没有常规的方法来做到这一点,但是:

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

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

我还需要列表中驱动程序表示的 .inf 文件的路径

编辑:一点背景:

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

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

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

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

【问题讨论】:

  • 尝试解析%windir%\inf中的所有inf文件。祝你好运:-)
  • @rekire 我的印象是驱动程序位于 %windir%\System32\DriverStore\FileRepository?这不正确吗?
  • @DanielA.White 好吧,如果我可以在其他地方获取信息,我就不需要它,基本上我是通过 printui.dll 添加打印机,PrintUIEntry /il 显示向导,然后我需要复制登录时 - 所以我试图记录打印机正在使用的驱动程序,以便在登录时重新添加它。
  • @DanielFrear 也许也在那里。我只知道在第一个路径中始终是 inf 文件。
  • @DanielFrear 你有没有为此设计过方法?我也想做同样的事情。但是,您所提到的接受的答案只会让您获得已经安装的内容。

标签: c# printing


【解决方案1】:

您可以查询 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 主题。

有趣的是,Microsoft 已在某些版本的 PowerShell(在 Windows 10 等上)添加了一个 Get-PrinterDriver 命令行开关,其功能与上述代码非常相似。

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

【讨论】:

  • 这似乎给了我非常少量的打印机,但是 - 它可能足以实现我想要的,因为它可能是已安装打印机正在使用的驱动程序列表,并且在当我打算使用它时,它会起作用。
  • 不是问题的答案。 所有可用的驱动程序已被要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2017-08-31
  • 2013-03-25
相关资源
最近更新 更多