MFC C++ 通过 WM_DEVICECHANGE 通知区分两个设备

Posted

技术标签:

【中文标题】MFC C++ 通过 WM_DEVICECHANGE 通知区分两个设备【英文标题】:MFC C++ differentiate between two devices from WM_DEVICECHANGE notifications 【发布时间】:2020-03-04 07:41:38 【问题描述】:

我正在编写一个函数来检测在 Windows 中使用 C++ VS2019 添加/删除 USB 设备。 WM_DEVICECHANGE 会在设备被移除或连接到 PC 时发出通知,但它会为单个设备提供多个通知。通过返回的参数对于所有通知也是相同的。

问题是当2个设备一个接一个连接或移除时,通知数量增加但参数保持不变。如何区分通知来自不同的设备。

BEGIN_MESSAGE_MAP(CCheckDlg, CDialogEx)
   ON_MESSAGE(WM_DEVICECHANGE, &CCheckDlg::OnMyDeviceChange)
END_MESSAGE_MAP()

功能:

    LRESULT CCheckDlg::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
    
        //When USB device connected or removed,
        //The wParam is always equal to 7 and lParam is equal to 0.
    

或者,如果有任何其他方法可以使用 C++ 检测设备添加/移除,您可以提出建议。

谢谢。

【问题讨论】:

【参考方案1】:

WM_DEVICECHANGE 消息的wParam 包含触发此消息的特定事件。 7 的值是指DBT_DEVNODES_CHANGED 事件。

DBT_DEVNODES_CHANGED 的文档说明:

没有关于哪个设备已添加到系统或从系统中删除的其他信息。需要更多信息的应用程序应使用RegisterDeviceNotification 函数注册设备通知。

【讨论】:

以上是关于MFC C++ 通过 WM_DEVICECHANGE 通知区分两个设备的主要内容,如果未能解决你的问题,请参考以下文章

使用 Microsoft Visual C++ MFC 2021 进行编程

在 C++ 中更改 MFC 菜单弹出文本

在 MFC C++ 中打开对话框

C++ MFC 命名线程,以便 Procmon 可以看到它们

我可以在 Windows 中静态链接 ws2_32.lib 吗? c++ MFC

MFC C++ 应用程序的最佳 XML 序列化库