c - 如何通过CreateFile获取USB打印机文件名以进行原始直接打印?

标签 c winapi printing usb

简而言之:如何获取与 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 引用,但也许有人可以给我一个提示以加快该过程或建议替代路线?

提前致谢。

最佳答案

我在谷歌上搜索“setupapi get device path”,我得到的第一个结果是 SetupDiGetDeviceInterfaceDetail api 。查看该页面,您会发现它返回一个 SP_DEVICE_INTERFACE_DETAIL_DATA,其中包含设备路径。如果您在 google 上搜索该 API,您将找到一个代码示例以及几个有关其使用的问题/答案。

关于c - 如何通过CreateFile获取USB打印机文件名以进行原始直接打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34946586/

相关文章:

c - ReadFileEx/WriteFileEx是否不需要lpCompletionRoutine和使用GetOverlappedResult?

python - 按可变长度在python中格式化

bash - 引用 shell 变量的打印

javascript - 在 Adob​​e Reader JavaScript API 中将打印机重置为默认打印机

c - 位图被镜像和反转加载

visual-studio - FindFirstFile 导致 "There is no disc in the drive"错误

c - 写入内存? (PIC内部EEPROM)

c - 四个进程执行速度比两个进程慢

c - 可变字符串限制 "%*s"与 sscanf() ==> "data argument not used by format string"

c - 在C中初始化结构内部的数组