在VS2010环境下,怎么用C++实现USBHID设备插入和拔出的检测

在VS2010环境下,怎么用C++实现USBHID设备插入和拔出的检测,第1张

USB设备插入,会有一个事件消息, 捕获这个消息就行了

当USB设备插入或者d出时,Windows会产生一条全局消息:WM_DEVICECHANGE

我们需要做的是,获得这条消息的wParam参数,如果为DBT_DEVICEARRIVAL则表示有设备插入并可用,

如果是DBT_DEVICEREMOVECOMPLETE则表示有设备已经移除。再查看lParam参数为DBT_DEVTYP_VOLUME时,

就可以取出DEV_BROADCAST_VOLUME结构的卷号dbcv_unitmask,就知道是哪个卷被插入或者d出。

#include <windows.h>

#include <dbt.h>

#include <stdio.h>

#include <math.h>

LRESULT CALLBACK WndProc(HWND h, UINT msg, WPARAM wp, LPARAM lp)

{

    if (msg == WM_DEVICECHANGE) {

        if ((DWORD)wp == DBT_DEVICEARRIVAL) {

            DEV_BROADCAST_VOLUME* p = (DEV_BROADCAST_VOLUME*) lp

            if (p->dbcv_devicetype == DBT_DEVTYP_VOLUME) {

                int l = (int)(log(double(p->dbcv_unitmask)) / log(double(2)))

                printf("啊……%c盘插进来了\n", 'A' + l)

            }

        } else if ((DWORD)wp == DBT_DEVICEREMOVECOMPLETE) {

            DEV_BROADCAST_VOLUME* p = (DEV_BROADCAST_VOLUME*) lp

            if (p->dbcv_devicetype == DBT_DEVTYP_VOLUME) {

                int l = (int)(log(double(p->dbcv_unitmask)) / log(double(2)))

                printf("啊……%c盘被拔掉了\n", 'A' + l)

            }

        }

        return TRUE

    } else return DefWindowProc(h, msg, wp, lp)

}

int main() {

    WNDCLASS wc

    ZeroMemory(&wc, sizeof(wc))

    wc.lpszClassName = TEXT("myusbmsg")

    wc.lpfnWndProc = WndProc

    

    RegisterClass(&wc)

    HWND h = CreateWindow(TEXT("myusbmsg"), TEXT(""), 0, 0, 0, 0, 0,

        0, 0, GetModuleHandle(0), 0)

    MSG msg

    while( GetMessage(&msg, 0, 0, 0) > 0 ) {

        TranslateMessage(&msg)

        DispatchMessage(&msg)

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11633020.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存