QT5 怎么获取设备信息

baidu_35683434 2017-02-17 02:46:13
如题,主要是获取usb小票打印机信息,然后发送指令已经绕晕了
...全文
1650 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2019-07-09
  • 打赏
  • 举报
回复
这个打印机厂商都提供开发组件的啊!包括demo,说明文档。我开发过都很简单。基本上的套路都是首先调用接口获得一个单例打印机工厂类并获得一个打印机对象,然后就是初始化打印机,然后就是打印指令。哪还需要你自己调用windows的函数去获取句柄来操作啊!
待续_1006 2019-06-25
  • 打赏
  • 举报
回复
这些买硬件的时候都是给demo的啊
三公子Tjq 2019-06-24
  • 打赏
  • 举报
回复
博主,你好,请问你在Qt是怎么成功调用函数SetupDiGetClassDevs()的啊?我在qtcreator ide开发环境相应源文件添加了#include <setupapi.h>和#include <Windows.h>,但是编译时提示错误:
D:\QtProject\test1\test1\widget.cpp:309: error: undefined reference to `_imp__SetupDiGetClassDevsW@16'
请问博主是如何解决这个错误的啊?我查了资料,没找到问题啊。
baidu_35683434 2017-02-28
  • 打赏
  • 举报
回复
引用 3 楼 adeng1919 的回复:
QString strUSBPrint = "USB 打印支持"; 看看有没有可能是编码的问题,Qt对中文直接写在代码里面是有一定的问题的
试了一下,不是这个问题,谢谢你
懒懒的吉他手 2017-02-22
  • 打赏
  • 举报
回复
QString strUSBPrint = "USB 打印支持"; 看看有没有可能是编码的问题,Qt对中文直接写在代码里面是有一定的问题的
louie_chen 2017-02-22
  • 打赏
  • 举报
回复
一般这些打印机都是有开发文档和驱动的,他们直接的指令也是有特定的标准协议的。根据特定的标准协议,发送com信息。
baidu_35683434 2017-02-22
  • 打赏
  • 举报
回复
HDEVINFO hDevInfoSet; //类似设备句柄 SP_DEVINFO_DATA spDevInfoData; //设备详细属性信息 SP_DEVICE_INTERFACE_DATA ifData; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail; int nCount; int nTotle; BOOL bResult; QString strUSBPrint = "USB 打印支持"; // 取得一个该GUID相关的设备信息集句柄 hDevInfoSet = ::SetupDiGetClassDevs(lpGuid, // class GUID NULL, // 无关键字 NULL, // 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备 //qDebug()<<hDevInfoSet<<"hDeviInfoSet"; // 失败... if (hDevInfoSet == INVALID_HANDLE_VALUE) { return 0;//没有找到设备 } // 申请设备接口数据空间 pDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, INTERFACE_DETAIL_SIZE); pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); //qDebug()<<pDetail<<"pDetail"; nTotle = -1; nCount = 0; bResult = TRUE; // 设备序号=0,1,2... 逐一测试设备接口,到失败为止 while (bResult) // for(DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfoSet, i, &spDevInfoData); i++) { nTotle++; spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA); // 枚举符合该GUID的设备接口 bResult = ::SetupDiEnumDeviceInfo( hDevInfoSet, // 设备信息集句柄 (ULONG)nTotle, // 设备信息集里的设备序号 &spDevInfoData); // 设备接口信息 if (bResult) { DWORD DataT ; TCHAR buf[MAX_PATH]; DWORD nSize = 0; // 得到友好的名称或设备描述 if ( SetupDiGetDeviceRegistryProperty(hDevInfoSet, &spDevInfoData,SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buf, sizeof(buf), &nSize) ) {} else if ( SetupDiGetDeviceRegistryProperty(hDevInfoSet, &spDevInfoData,SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize) ) {} else {//lstrcpy(buf, _T("Unknown")); } //是否是要找的设备类型 if (_tcscmp(buf,QStringToTCHAR(strUSBPrint)) != 0) { continue; } ifData.cbSize = sizeof(ifData); // 枚舉符合該GUID的設備接口 bResult = ::SetupDiEnumDeviceInterfaces(hDevInfoSet, // 設備信息集句柄 NULL, // 不需額外的設備描述 lpGuid, // GUID (ULONG)nTotle, // 設備信息集里的設備序號 &ifData); // 設備接口信息 //qDebug()<<"bResult"<<bResult; if (bResult) { // 取得该设备接口的细节(设备路径) bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, // 设备信息集句柄 &ifData, // 设备接口信息 pDetail, // 设备接口细节(设备路径) INTERFACE_DETAIL_SIZE, // 输出缓冲区大小 NULL, // 不需计算输出缓冲区大小(直接用设定值) NULL); // 不需额外的设备描述 // qDebug()<<"bResult"<<bResult; if (bResult) { wcscpy_s(pszDevicePath[nCount], 256,pDetail->DevicePath); // 复制设备路径到输出缓冲区 nCount++; } } } } // 释放设备接口数据空间 ::GlobalFree(pDetail); // 关闭设备信息集句柄 ::SetupDiDestroyDeviceInfoList(hDevInfoSet); return nCount; 求大神看一下这段代码,在执行到这里的时候,usb小票打印机已经连接上了,但是判断不对,在那里加了调试信息,

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧