如何通过 CreateFile 获取用于原始直接打印的 USB 打印机文件名? [关闭]

Posted

技术标签:

【中文标题】如何通过 CreateFile 获取用于原始直接打印的 USB 打印机文件名? [关闭]【英文标题】:How to get USB printer file name for raw direct printing via CreateFile? [closed] 【发布时间】:2016-01-22 12:20:06 【问题描述】:

简而言之:如何获取与 USB POS 打印机关联的设备路径?例如\\?\usb#vid_5986&pid_0535#200901010001#a5dcbf10-6530-11d2-901f-00c04fb951ed 如果我知道打印机的端口是 USB001 并且我知道它的名称?

全文:我有这台无名 POS 打印机,我需要在上面打印。它带有一个 SDK,一个简单的 DLL,具有 OpenPort("USB001")、SendData("hello world") 和 ClosePort() 等功能,可以用于简单的打印。如果您需要对打印机重新编程,那就不行了 - SendData 的空终止参数会阻止您向打印机发送零,这对于某些命令是绝对必要的。

我花了一些时间研究是否可以找到其他方法,但没有找到任何实质性的东西。最后我找到了this article about Setupapi.lib 并试了一下:我编写了一个简单的程序来枚举所有设备路径,在打印机打开的情况下运行它,在打印机关闭的情况下运行它,设备路径消失了我用作 CreateFile 的参数,写入数据进入打开的手柄 - 万岁! - 有效。打印机确实打印了我发送到那里的数据。 :)

现在我需要更简单优雅的方式来获取此设备路径。我仍在深入研究 Setupapi.lib 参考,但也许有人可以给我一个提示以加快进程或建议替代路线?

提前致谢。

【问题讨论】:

您已经有了工作代码,现在您正在寻求更简单的解决方案?这似乎不是一个足够具体的问题,无法成为 *** 的主题。 在打开/关闭设备时需要人工协助的代码,并且还盲目地认为没有其他任何改变......它真的有效吗?.. 最终我找到并遵循了这个解决方案:***.com/a/13533429/1525403 Figuring which printer name corresponds to which device ID的可能重复 请参阅以下文章,其中包含获取 USB 打印机设备路径名的示例代码。 Getting a handle on usbprint.sys。另请参阅 ***.com/questions/10651949/… 和 ***.com/questions/40775369/… 【参考方案1】:

我搜索了“setupapi 获取设备路径”,我得到的第一个结果是SetupDiGetDeviceInterfaceDetail api。查看该页面,您会看到它返回一个SP_DEVICE_INTERFACE_DETAIL_DATA,其中包含一个设备路径。如果你用谷歌搜索 API,你会发现一个代码示例以及几个关于其使用的 SO 问题/答案。

【讨论】:

以上是关于如何通过 CreateFile 获取用于原始直接打印的 USB 打印机文件名? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Qt 中的 Win32 API

Windows下createfile函数用GENERIC_READ访问模式打不开磁盘

detours hooked CreateFile 函数触发堆栈溢出

在html里打开一个pdf文件,如何通过Javascript获取这个PDF的书签,让PDF打开时直接跳转到指定书签位置

AWS SAM-获取错误消息:pywintypes.error:(5,'CreateFile','访问被拒绝。')

用于跟踪 CreateFile 调用的 Pin 工具