C++:有没有办法以编程方式检查我的打印机是喷墨打印机还是激光打印机?
Posted
技术标签:
【中文标题】C++:有没有办法以编程方式检查我的打印机是喷墨打印机还是激光打印机?【英文标题】:C++: Is there a way to programmatically check if my printer is an Inkjet or a Laser printer? 【发布时间】:2019-09-30 09:43:10 【问题描述】:我正在编写一个程序来显示连接到系统的打印机类型及其其他详细信息,但我似乎找不到任何函数、方法或类来提供有关打印机类型的详细信息(即:如果是喷墨或激光打印机)。任何关于如何做到这一点的建议将不胜感激。谢谢。
【问题讨论】:
您是否查看过 Windows 打印机 API? docs.microsoft.com/en-us/windows/win32/printdocs/… 这种信息是通过WMI暴露出来的,要查询Win32_Printer。 我能够在 MarkingTechnology 下的 Win32_Printer 类中找到它,但是当我运行 WMIC 命令检查它时,它显示没有任何价值。我使用的命令是 "wmic printer get MarkingTechnology, name" ***.com/a/38419905/10611792。可能是打印机安装的设备驱动不支持返回这些信息。 是否有带有支持这些返回值的驱动程序的打印机? 【参考方案1】:因此,就我的研究而言,没有明确的方法可以做到这一点。这不起作用,因为打印机驱动程序没有配备返回@Drake Wu - MSTF 所述的那些值。所以我决定建立一个我需要的信息数据库并使用它。
【讨论】:
【参考方案2】:请查看GetPrinter MS SDK API 并查看pPrinter
和https://docs.microsoft.com/en-us/windows/win32/printdocs/printing-and-print-spooler-functions#printer-functions 上的其他类似API
【讨论】:
GetPrinter 可以返回 9 种不同的数据结构。其中哪个包含打印机类型? 已经提到“pPrinter”,它需要更多调试,我过去做过,但没有方便的代码。 @mkag "pPrinter" 不是打印机假脱机 API 中的结构。你知道哪些结构包含我要从 PRINTER_INFO_1 - PRINTER_INFO_9 中寻找的信息吗? 我也是从一些PRINTER_INFO_中提取出来的?结构但无法调用代码。以上是关于C++:有没有办法以编程方式检查我的打印机是喷墨打印机还是激光打印机?的主要内容,如果未能解决你的问题,请参考以下文章