在多字节字符集(MBCS)项目中,你需要将宽字符字符串(std::wstring
和相关的宽字符函数)转换为多字节字符串(例如使用 std::string
和相应的 ANSI 函数)。下面是对你提供的代码进行修改,以便在多字节项目中使用。
#include <windows.h>
#include <iostream>
#include <string>
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#pragma comment(lib, "setupapi.lib")
bool IsDeviceConnected(const std::string& deviceID) {
// 获取所有USB存储设备
HDEVINFO deviceInfoSet = SetupDiGetClassDevsA(&GUID_DEVCLASS_DISKDRIVE, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (deviceInfoSet == INVALID_HANDLE_VALUE) {
return false;
}
SP_DEVINFO_DATA deviceInfoData;
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (DWORD i = 0; SetupDiEnumDeviceInfo(deviceInfoSet, i, &deviceInfoData); ++i) {
// 获取每个设备的详细信息
char buffer[1024];
DWORD buffersize = 0;
// 获取硬件ID
if (SetupDiGetDeviceRegistryPropertyA(deviceInfoSet, &deviceInfoData,
SPDRP_HARDWAREID, NULL, (PBYTE)buffer, sizeof(buffer), &buffersize)) {
std::string hardwareID(buffer);
std::cout << "Hardware ID: " << hardwareID << std::endl;
// 对比目标ID
if (hardwareID.find(deviceID) != std::string::npos) {
SetupDiDestroyDeviceInfoList(deviceInfoSet);
return true; // 找到匹配的设备
}
}
}
SetupDiDestroyDeviceInfoList(deviceInfoSet);
return false; // 未找到指定设备
}
int main() {
std::string targetDeviceID = "USBSTOR\\CdRom&Ven_WDZJRC1&Prod_Autorun_CDROM&Rev_2.30";
if (IsDeviceConnected(targetDeviceID)) {
std::cout << "The device is connected." << std::endl;
} else {
std::cout << "The device is not connected." << std::endl;
}
return 0;
}
修改说明:
- 将
std::wstring
替换为std::string
。 - 使用 ANSI 版本的 API,例如
SetupDiGetClassDevsA
和SetupDiGetDeviceRegistryPropertyA
。 - 修改输出语句以使用
std::cout
,而不是std::wcout
。
这样修改后,程序将能够在多字节字符集项目中正常工作。确保你的开发环境配置为使用多字节字符集。
内容由零声教学AI助手提供,问题来源于学员提问