#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函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息。
}
}