USB的 监听

来源:互联网 发布:淘宝买家星级在哪里 编辑:程序博客网 时间:2024/05/08 17:05

#include <windows.h>

#include <Dbt.h>// 添加头文件,捕捉WM_DEVICECHANGE消息

#include <stdio.h>

#include <math.h>

LRESULT CALLBACK WndProc(HWND h, UINT msg,WPARAM wp, LPARAM lp)//windous发生的信息进行处理,HWND h消息要传递的窗口,UINT msg消息的id,消息在电脑中的代码表示, 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(“有U盘插进来了\n");

           }

       }

       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("U盘被拔掉了\n");

           }

       }

       return TRUE;

    }

   else return DefWindowProc(h, msg, wp, lp);//应用程序没有处理的任何窗口消息提供缺省的处理

}

int main()

{

    //.lpszClassName.lpfnWndProc都是WNDCLASSEX中重要的函数

   WNDCLASS wc;//应用程序通过定义一个窗口类确定窗口的属性

   ZeroMemory(&wc, sizeof(wc));//将指定的内存块清零

   wc.lpszClassName = TEXT("myusbmsg");//指向NULL结束的字符串或原型

   wc.lpfnWndProc /*智能地处理了所有的窗口消息循环 */= WndProc;//Windows操作系统向应用程序发送一系列消息,如左键按下和左键抬起,应用程序将通过GetMessage等方法最终将消息提交到窗口过程WndProc[英文全称windows process])指向一个应用程序定义的窗口过程的指针

 

   RegisterClass(&wc);

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

                          0, 0,GetModuleHandle(0), 0);

   MSG msg;//定义一个结构体

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

    {

       TranslateMessage(&msg); //函数用于将虚拟键消息转换为字符消息

        DispatchMessage(&msg);//该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息。

    }

}

1 0