ZBLOG

#include #include #include #include #include #include #pragma comment(lib, "setupapi.lib") bool IsDeviceConnected(const std::wstring& deviceID) { // 获取所有USB存储设备 HDEVINFO...

在多字节字符集(MBCS)项目中,你需要将宽字符字符串(std::wstring 和相关的宽字符函数)转换为多字节字符串(例如使用 std::string 和相应的 ANSI 函数)。下面是对你提供的代码进行修改,以便在多字节项目中使用。

  1. #include <windows.h>
  2. #include <iostream>
  3. #include <string>
  4. #include <setupapi.h>
  5. #include <devguid.h>
  6. #include <regstr.h>
  7. #pragma comment(lib, "setupapi.lib")
  8. bool IsDeviceConnected(const std::string& deviceID) {
  9. // 获取所有USB存储设备
  10. HDEVINFO deviceInfoSet = SetupDiGetClassDevsA(&GUID_DEVCLASS_DISKDRIVE, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
  11. if (deviceInfoSet == INVALID_HANDLE_VALUE) {
  12. return false;
  13. }
  14. SP_DEVINFO_DATA deviceInfoData;
  15. deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
  16. for (DWORD i = 0; SetupDiEnumDeviceInfo(deviceInfoSet, i, &deviceInfoData); ++i) {
  17. // 获取每个设备的详细信息
  18. char buffer[1024];
  19. DWORD buffersize = 0;
  20. // 获取硬件ID
  21. if (SetupDiGetDeviceRegistryPropertyA(deviceInfoSet, &deviceInfoData,
  22. SPDRP_HARDWAREID, NULL, (PBYTE)buffer, sizeof(buffer), &buffersize)) {
  23. std::string hardwareID(buffer);
  24. std::cout << "Hardware ID: " << hardwareID << std::endl;
  25. // 对比目标ID
  26. if (hardwareID.find(deviceID) != std::string::npos) {
  27. SetupDiDestroyDeviceInfoList(deviceInfoSet);
  28. return true; // 找到匹配的设备
  29. }
  30. }
  31. }
  32. SetupDiDestroyDeviceInfoList(deviceInfoSet);
  33. return false; // 未找到指定设备
  34. }
  35. int main() {
  36. std::string targetDeviceID = "USBSTOR\\CdRom&Ven_WDZJRC1&Prod_Autorun_CDROM&Rev_2.30";
  37. if (IsDeviceConnected(targetDeviceID)) {
  38. std::cout << "The device is connected." << std::endl;
  39. } else {
  40. std::cout << "The device is not connected." << std::endl;
  41. }
  42. return 0;
  43. }

修改说明:

  1. std::wstring 替换为 std::string
  2. 使用 ANSI 版本的 API,例如 SetupDiGetClassDevsASetupDiGetDeviceRegistryPropertyA
  3. 修改输出语句以使用 std::cout,而不是 std::wcout

这样修改后,程序将能够在多字节字符集项目中正常工作。确保你的开发环境配置为使用多字节字符集。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20394

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?