我在Windows8.1电脑上安装了八台不同的打印机。这些打印机是各种各样的制造商和型号,有两台惠普LaserJet打印机,一台爱普生喷墨机,一台CutePDF书写器,一台Windows打印机等。
对于我的所有打印机,这个对DeviceCapabilities的调用返回-1,这意味着“不支持该功能,或者出现了一般的功能故障”。其他fwCapability值,如DC_DUPLEX,会成功。
DeviceCapabilities(pDevice, pPort, DC_MANUFACTURER, NULL, &devMode);我的猜测是,DC_MANUFACTURER和DC_MODEL是“新的”,因此没有实现。CUPS有一个printer-make-and-model属性,必需的PPD选项Manufacturer和Model。
用Win32查询打印机制造商和型号的正确方法是什么?
发布于 2015-12-15 18:55:58
MSDN文档中没有列出DC_MANUFACTURER和DC_MODEL,它们不值得研究。
pDevice参数在DeviceCapabilities中通常是打印机名称和型号。例如,"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->pPrinterName应该与控制面板(或pDevice)中显示的打印机名称相匹配。printerInfo->pDriverName应该始终是打印机的名称和型号。
要获得制造商名称,您可以通过DRIVER_INFO_6和pszMfgName,但是这可能不是很有用。
https://stackoverflow.com/questions/34279427
复制相似问题