相关疑难解决方法(0)

确定哪个打印机名称对应于哪个设备ID

我的目标是打开一台通过USB连接的打印机CreateFile(然后发出一些WriteFiles和ReadFiles).

如果打印机是LPT打印机,我会这样做CreateFile("LPT1:", ...).但对于USB打印机,必须传递一个特殊的设备路径CreateFile才能打开该打印机.

我能够找到的这个设备路径是通过SetupDiGetClassDevs- > SetupDiEnumDeviceInterfaces- > SetupDiGetDeviceInterfaceDetail- > DevicePathmember检索的,如下所示:

\\?\usb#vid_0a5f&pid_0027#46a072900549#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}

一切都很好,但我输入的是人类可读的打印机名称,如图所示Devices and Printers.这些SetupDi*功能似乎没有使用它们,它们只对设备实例ID进行操作.所以现在的问题是如何从打印机名称获取设备实例IDOpenPrinter.

这不难观察到,上述的GUID部分是GUID_DEVINTERFACE_USBPRINT\\?\usb是固定的,所以唯一的位,我是在真正感兴趣vid_0a5f&pid_0027#46a072900549#.我可以在打印机属性对话框中手动查找此路径:

转至设备和打印机
右键单击打印机
属性
切换到硬件选项卡
选择打印设备,例如ZDesigner LP2844-Z
属性
切换到详细信息选项卡
从下拉列表中选择"父级".

但我不知道如何以编程方式执行此操作,前提是唯一给出的是打印机名称,如"设备和打印机"面板中所示.


PS 1:我对打开打印机OpenPrinter然后使用WritePrinter/ 不感兴趣ReadPrinter.已经完成,工作正常,但现在的目标是不同的.

PS 2:我可以通过一种更简单的方法将可读的打印机名称转换为可以传递给的东西CreateFile.

PS 3:这个问题,我已经发布了答案,与我最终想要做的事情非常相关.

PS 4:反过来也很好:如果可以从 …

printing winapi createfile

10
推荐指数
2
解决办法
9972
查看次数

标签 统计

createfile ×1

printing ×1

winapi ×1