首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Win32 API中获取打印机制造商和型号?

如何从Win32 API中获取打印机制造商和型号?
EN

Stack Overflow用户
提问于 2015-12-15 01:11:42
回答 1查看 1.7K关注 0票数 1

我在Windows8.1电脑上安装了八台不同的打印机。这些打印机是各种各样的制造商和型号,有两台惠普LaserJet打印机,一台爱普生喷墨机,一台CutePDF书写器,一台Windows打印机等。

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

代码语言:javascript
复制
DeviceCapabilities(pDevice, pPort, DC_MANUFACTURER, NULL, &devMode);

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 18:55:58

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

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

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

代码语言:javascript
复制
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->pPrinterName应该与控制面板(或pDevice)中显示的打印机名称相匹配。printerInfo->pDriverName应该始终是打印机的名称和型号。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34279427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档