在你的代码中,你希望将调试信息输出到控制台,而不仅仅是通过 std::cout
。如果你想要使用 OutputDebugStringA
来输出调试信息,这里是如何将它们集成在你的代码中,以便同时可以看到调试信息和标准输出。
以下是更新后的代码示例,结合了 OutputDebugStringA
用于调试输出:
#include <windows.h>
#include <setupapi.h>
#include <devguid.h>
#include <iostream>
#pragma comment(lib, "setupapi.lib")
// 辅助函数,用于同时将消息输出到控制台和调试器
void DebugAndPrint(const char* message) {
OutputDebugStringA(message); // 输出到调试器
std::cout << message; // 输出到控制台
}
bool IsMassStorageDeviceConnected() {
// 获取所有大容量存储设备
HDEVINFO deviceInfoSet = SetupDiGetClassDevsA(&GUID_DEVCLASS_DISKDRIVE, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (deviceInfoSet == INVALID_HANDLE_VALUE) {
DebugAndPrint("Unable to get device information set.\n");
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 msg = "Found Device Hardware ID: ";
msg += buffer;
msg += "\n";
DebugAndPrint(msg.c_str());
// 可以在此处添加逻辑以匹配特定硬件 ID 或进一步处理
SetupDiDestroyDeviceInfoList(deviceInfoSet);
return true; // 找到至少一个大容量存储设备
}
}
SetupDiDestroyDeviceInfoList(deviceInfoSet);
DebugAndPrint("No mass storage devices found.\n");
return false; // 未找到任何大容量存储设备
}
int main() {
if (IsMassStorageDeviceConnected()) {
DebugAndPrint("A mass storage device is connected.\n");
} else {
DebugAndPrint("No mass storage devices are connected.\n");
}
return 0;
}
更新内容说明:
辅助函数
DebugAndPrint
:- 创建了一个新的函数
DebugAndPrint
,这个函数接收一个字符串参数。 - 它使用
OutputDebugStringA()
将消息发送到 Windows 调试器,并且使用std::cout
将相同的消息输出到控制台。
- 创建了一个新的函数
修改返回值处理:
- 在合适的位置(如未能获取设备集合、找到设备等)使用这个新函数打印消息,以便用户可以更好地理解程序的执行流程。
拼接字符串:
- 使用
std::string
拼接找到的硬件 ID 并传递给DebugAndPrint()
函数进行输出。
- 使用
通过这种方式,你既能在开发时通过调试工具查看详细的信息,也能够让终端用户直接在控制台上看到重要的运行时信息。
内容由零声教学AI助手提供,问题来源于学员提问