在你的代码中,你希望将调试信息输出到控制台,而不仅仅是通过 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助手提供,问题来源于学员提问


        
        
        
        
        
        
        
        
        
                
                
                
                
                
                
                