【问题标题】:How to get a printer's paper sources using WMI?如何使用 WMI 获取打印机的纸张来源?
【发布时间】:2018-12-21 19:41:55
【问题描述】:

PrinterSettings 有一个PaperSources 属性,它是可供打印机使用的纸张来源(纸盘)的集合。

但是,我需要使用 WMI 获取纸张来源,但我看到的只是“PaperSizesSupported”和“PaperTypesAvailable”等属性。

WMI 中的纸张来源属性在哪里?

【问题讨论】:

  • 为什么一定要WMI?
  • @RobertHarvey 因为我已经在使用 WMI 来获取其他属性了。
  • [耸耸肩] 这不是一个令人信服的理由,但可以。我的 Google 搜索建议您查看后台处理程序,而不是打印机。
  • @RobertHarvey 如何使用 PrinterSettings 获取它们?
  • 你不是说你已经知道怎么做了吗?

标签: c# wmi


【解决方案1】:

不幸的是,没有 WMI 类包含提供您正在寻找的信息的操作系统。在 .NET 中,PrinterSettings 类通过 pinvoke 调用 winspool.drv 中的 DeviceCapabilities() 函数收集此信息。他们没有在任何ROOT\cimv2 WMI 类中提供这些功能,包括:

  • CIM_Printer(这是 Win32_Printer 的派生源)
  • Win32_PerfFormattedData_Spooler_PrintQueue
  • Win32_PerfRawData_Spooler_PrintQueue
  • Win32_Printer
  • Win32_PrinterConfiguration
  • Win32_PrinterDriver
  • Win32_PrintJob
  • MSFT_Printer(位于 ROOT/StandardCimv2 命名空间中,还有一些其他类)

还有其他一些打印机类,但这些打印机类包含用于查询的任何数据。如果您在 .NET 中开发解决方案,我建议您只使用 System.Drawing 命名空间 (there is an answer here with a great example) 中的 PrinterSettings 类。如果您使用的是脚本语言,您可以通过使用 PowerShell 中的 .NET 程序集来完成类似的工作,如下所示:

Add-Type -AssemblyName System.Drawing
$PrinterSettings = New-Object System.Drawing.Printing.PrinterSettings

ForEach ($Printer in Get-Printer) {

    $PrinterSettings.PrinterName = $Printer.Name
    Write-Host $Printer.Name
    Write-Host $PrinterSettings.PaperSources

}

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-02-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多