SetupDiGetClassDevs函数使用遇到问题

在使用SetupDiGetClassDevs ()函数中遇到问题函数返回值始终是INVALID_HANDLE_VALUE
结果是GetLastError();返回122

img


没有成功

CString c;
CString 串口::串口函数1() 
{
    HWND hand = NULL;
HDEVINFO shebei;
    shebei = SetupDiGetClassDevs(NULL, L"USB",hand , DIGCF_PRESENT);
    if (shebei == INVALID_HANDLE_VALUE) {

        c = { "没有成功" };

        DWORD error;
        error = GetLastError();
        c.Format(_T("% u"), error);
        return c;
    }
    else
    {
        c = { "成功了0" };
        return c;
    }

}

【以下回答由 GPT 生成】

问题的原因是调用SetupDiGetClassDevs函数时的参数设置有问题。根据微软官方文档,第三个参数hand应该是一个指向窗口的句柄,而不是一个空指针。因此,需要传递一个有效的窗口句柄给该函数。

以下是修改后的代码示例:

#include <windows.h>
#include <setupapi.h>
#include <iostream>

#pragma comment(lib, "setupapi.lib")

CString 串口::串口函数1()
{
    HWND hand = GetDesktopWindow();  // 获取一个有效的窗口句柄
    HDEVINFO shebei;
    shebei = SetupDiGetClassDevs(NULL, L"USB", hand, DIGCF_PRESENT);

    if (shebei == INVALID_HANDLE_VALUE) {
        DWORD error = GetLastError();
        CString errorMsg;
        errorMsg.Format(_T("SetupDiGetClassDevs failed with error code %u"), error);
        return errorMsg;
    }
    else {
        return _T("成功了0");
    }
}

这样就能够正确调用SetupDiGetClassDevs函数并避免返回INVALID_HANDLE_VALUE和GetLastError()返回122的问题。

请注意,上述代码中需要包含<windows.h><setupapi.h>头文件,并链接到setupapi.lib库文件。此外,还需要定义GetDesktopWindow()来获取有效的窗口句柄。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^