USB口打印机,获得多个USB端口,如何判断哪个是USB打印支持? 本帖最后由 xjkstar 于 2014-04-17 11:05:25 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己解决。先看了几个“如何识别新增USB设备”的帖子再下了一个“如何识别新增USB设备”的源代码,O了。思路:1、先找到USB 打印机。SetupDiGetClassDevs、SetupDiEnumDeviceInfo、SetupDiGetDeviceRegistryProperty,找到“USB 支持设备”;2、然后就是老路,获得该USB打印机的路径,SetupDiEnumDeviceInterfaces、SetupDiGetInterfaceDeviceDetail,获得路径。(SetupDiGetClassDevs不用了,因为1中已经获得句柄集)3、再根据路径CreateFile,后面的内容网上一搜一大堆。不知道是不是绕远路了,呵呵。参考资料:http://www.cnblogs.com/SunYu/archive/2010/04/29/1723977.html参考代码:http://www.codeproject.com/Articles/14500/Detecting-Hardware-Insertion-and-or-Removal 找到“USB 打印设备”说错,更正下 今天也试了一天,没成功求代码,谢谢。[email protected] LZ,我最近也在做USB通信,createfile,第一个参数是路径,这个路径我得到的是pDevDetailData->DevicePath=0x00527c9c"\\?\hid#vid_0483&pid_5750#7&33459201&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"。请问,你的路径最后有没有\\PIPE01之类的东西。因为我虽然createfile成功了,writefile的getlasterror总是6(句柄无效)。 没有\\PIPE01之类的东西,就是你这个路径格式。我的CreateFile参数给你参考下:this->m_hPort = CreateFile(this->m_PDdevice.Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 步骤:1、CreateFile2、SetupComm3、SetCommTimeouts4、GetCommState5、SetCommState6、PurgeComm7、WriteFile你看看是否都设置过 楼主好,最近也在做USB打印,想通过writefile写pcl命令控制打印机,但是命令发送过去了怎么启动打印机开始打印呢?希望楼主能给一些指导,谢谢 没有\\PIPE01之类的东西,就是你这个路径格式。我的CreateFile参数给你参考下:this->m_hPort = CreateFile(this->m_PDdevice.Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);楼主谢谢你啊,我前段时间弄通了,不是createfile的原因。是writefile的字节必须要下位机一致,否则无法发送,而且缓冲区的第一个字节必须是报告ID,如果不是报告ID就取0x00,所以实际发送数据的字节数要比原来多1. 在对话框中动态创建ActiveX控件 我就不信我不能发好图片 关于listCtrl的问题 进度条 平滑属性MFC 应该挂接哪些API函数 沈阳的VC高手请帮忙可付酬劳! 设置常量?怎么办呢? 怎样将磁盘上的一张24位位图读入内存并逐点操作 请大家谈一谈,在你看来,什么软件的开发难度最大? 快来看----如何读取其它程序内容 模态对话框上的静态文本控件的赋值问题 OpenGL模型间的装配
1、先找到USB 打印机。SetupDiGetClassDevs、SetupDiEnumDeviceInfo、SetupDiGetDeviceRegistryProperty,找到“USB 支持设备”;
2、然后就是老路,获得该USB打印机的路径,SetupDiEnumDeviceInterfaces、SetupDiGetInterfaceDeviceDetail,获得路径。(SetupDiGetClassDevs不用了,因为1中已经获得句柄集)
3、再根据路径CreateFile,后面的内容网上一搜一大堆。不知道是不是绕远路了,呵呵。参考资料:http://www.cnblogs.com/SunYu/archive/2010/04/29/1723977.html
参考代码:http://www.codeproject.com/Articles/14500/Detecting-Hardware-Insertion-and-or-Removal
求代码,谢谢。
[email protected]
因为我虽然createfile成功了,writefile的getlasterror总是6(句柄无效)。
没有\\PIPE01之类的东西,就是你这个路径格式。我的CreateFile参数给你参考下:
this->m_hPort = CreateFile(this->m_PDdevice.Port, GENERIC_READ | GENERIC_WRITE,
0, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
步骤:
1、CreateFile
2、SetupComm
3、SetCommTimeouts
4、GetCommState
5、SetCommState
6、PurgeComm
7、WriteFile你看看是否都设置过
希望楼主能给一些指导,谢谢
没有\\PIPE01之类的东西,就是你这个路径格式。我的CreateFile参数给你参考下:
this->m_hPort = CreateFile(this->m_PDdevice.Port, GENERIC_READ | GENERIC_WRITE,
0, NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
楼主谢谢你啊,我前段时间弄通了,不是createfile的原因。是writefile的字节必须要下位机一致,否则无法发送,而且缓冲区的第一个字节必须是报告ID,如果不是报告ID就取0x00,所以实际发送数据的字节数要比原来多1.