【问题标题】:How to get printer manufacturer and model from Win32 API?如何从 Win32 API 获取打印机制造商和型号?
【发布时间】:2015-12-15 01:11:42
【问题描述】:

我在 Windows 8.1 计算机上安装了八台不同的打印机。这些打印机有不同的制造商和型号,有两台 HP LaserJet 打印机、一台 Epson 喷墨打印机、一台 CutePDF Writer、一台 Windows Fax 打印机等等。

对于我所有的打印机,对DeviceCapabilities 的调用返回-1,这意味着“不支持该功能或存在一般功能故障”。其他fwCapability 值,如DC_DUPLEX,成功。

DeviceCapabilities(pDevice, pPort, DC_MANUFACTURER, NULL, &devMode);

我的猜测是 DC_MANUFACTURERDC_MODEL 是“较新的”,因此未实现。 CUPS 有一个printer-make-and-model 属性,必需的PPD 选项ManufacturerModel

用Win32查询打印机的制造商和型号的正确方法是什么?

【问题讨论】:

  • 您是否特别需要品牌和型号,或者您是否可以检索打印管理器用于识别打印机的相同字符串?
  • 我将采用任何能够识别(甚至是粗略地)识别打印机类型的字符串。你有什么建议?
  • EnumPrinters() 允许您枚举打印机并检索有关它们的信息,包括它们的名称。这就是你要找的吗?
  • DC_MANUFACTURER 和 DC_MODEL 似乎没有记录。你是从哪里想到这些的?
  • DC_MANUFACTURER 和 DC_MODEL 在 WINVER >= 0x0400 的 WinGDI.h 中找到

标签: c winapi printing


【解决方案1】:

DC_MANUFACTURERDC_MODEL 没有在 MSDN 文档中列出,它们不值得研究。

DeviceCapabilities 中的pDevice 参数通常是打印机名称和型号。例如“HP LaserJet 123” 在控制面板中也是一样的。这应该就是你所需要的。

有时打印机名称会更改,在这种情况下,您可以使用驱动程序名称来识别打印机。

int wmain()
{
    DWORD flags = PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS;
    int level = 2;
    PRINTER_INFO_2* printerInfo;
    DWORD memsize, printer_count;

    EnumPrinters(flags, NULL, level, NULL, 0, &memsize, &printer_count);
    if (memsize < 1) return 0;

    BYTE* bytes = new BYTE[memsize];
    if (EnumPrinters(flags, NULL, level, bytes, memsize, &memsize, &printer_count))
    {
        printerInfo = (PRINTER_INFO_2*)bytes;
        for (UINT i = 0; i < printer_count; i++)
        {
            std::wcout << "printer: " << printerInfo->pPrinterName << "\n";
            std::wcout << "printerInfo->pDriverName: " << printerInfo->pDriverName << "\n\n";
            printerInfo++;
        }
    }
    delete[] bytes;

    return 0;
}

在上面的代码中,printerInfo-&gt;pPrinterName 应该与控制面板中显示的打印机名称匹配(或pDevice)。 printerInfo-&gt;pDriverName 应始终是打印机名称和型号。

要获取制造商名称,您可以通过DRIVER_INFO_6pszMfgName 获取,但这可能不是很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2013-03-06
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多