导语:
当有设备进入windows时,系统会向所有的应用层发送WM_DEVICECHANGE消息。进一步根据相应的事件判断设备。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch (message)
{
//A device has been added to or removed from the system.
case WM_DEVICECHANGE: if (/*DBT_DEVNODES_CHANGED*/DBT_DEVICEARRIVAL == wParam && lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; if (lpdbv->dbcv_unitmask)
{ WCHAR wstrDrive = FirstDriveFromMask(lpdbv->dbcv_unitmask);
wstring wstrMsg;
wstrMsg.append(&wstrDrive);
wstrMsg = wstrMsg.substr(0, 1);
wstrMsg.append(L": arrived.\n");
MessageBoxW(hWnd, wstrMsg.c_str(), L"", MB_OK);
}
}
if (DBT_DEVICEREMOVECOMPLETE == wParam && lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{ PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; if (lpdbv->dbcv_unitmask)
{ WCHAR wstrDrive = FirstDriveFromMask(lpdbv->dbcv_unitmask);
wstring wstrMsg;
wstrMsg.append(&wstrDrive);
wstrMsg = wstrMsg.substr(0, 1);
wstrMsg.append(L": leave.\n");
MessageBoxW(hWnd, wstrMsg.c_str(), L"", MB_OK);
}
} //根据掩码判断盘符
WCHAR FirstDriveFromMask(ULONG unitmask)
{
char i; for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
break;
unitmask = unitmask >> 1;
} return(i + L'A');
} 如果要在MFC中响应此消息:需要重载虚函数:WindowProc 别忘了#include <Dbt.h>

相关链接:
https://msdn.microsoft.com/en-us/library/aa363480.aspx
https://msdn.microsoft.com/en-us/library/aa363205.aspx
https://msdn.microsoft.com/en-us/library/aa363431.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363215%28v=vs.85%29.aspx

基于windows消息的响应USB插入或取出的更多相关文章

  1. 让动态创建的ActiveX控件响应Windows消息

    当我们通过 CWnd::CreateControl() 动态创建 ActiveX   控件时, Windows 消息并不会被发送给我 们的由   CWnd 派生得控件类.例如,即使我们为 WM_KIL ...

  2. windows消息机制详解(转载)

    消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序.消息本身是作为一个记录传递给应用程序的 ...

  3. Windows消息大全(转)

    原链接地址: http://www.cnblogs.com/icebutterfly/archive/2011/08/05/2128864.html 表A-1 Windows消息分布 消息范围说 明 ...

  4. 【转】C# 重写WndProc 拦截 发送 系统消息 + windows消息常量值(1)

    C# 重写WndProc 拦截 发送 系统消息 + windows消息常量值(1) #region 截获消息        /// 截获消息  处理XP不能关机问题        protected ...

  5. Windows消息传递函数SendMessage参数属性

    Windows消息传递函数SendMessage参数属性 转载于:http://www.cr173.com/html/5605_1.html Windows是一个消息驱动式系统,SendMessage ...

  6. C# 重写WndProc 拦截 发送 系统消息 + windows消息常量值

    接收拦截+发送消息 对于处理所有消息.net 提供了wndproc进行重写 WndProc(ref Message m)protected override void WndProc(ref Mess ...

  7. 深入理解windows 消息机制

    深入理解Windows消息机制 今天我们来学一学Windows消息机制,我们知道在传统的C语音程序中,当我们需要打开一个文件时,我们可以调用fopen()函数,这个函数最后又会调用操作系统提供的函数以 ...

  8. Windows消息机制详解

    消息是指什么?      消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...

  9. 【转】windows消息和消息队列详解

    转载出处:http://blog.csdn.net/bichenggui/article/details/4677494  windows消息和消息队列 与基于MS - DOS的应用程序不同,Wind ...

随机推荐

  1. Dll注入技术之输入法注入

    DLL注入技术之输入法注入 输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:\WIN ...

  2. 数据结构C++版-栈

    一.概念 二.应用实例 1.进制转换 #include <stdlib.h> #include <iostream> #include <string> #incl ...

  3. 8、collection

    collection 可以理解为一个容器 组织业务逻辑 导入导出 监控或者mock server 实例: 1.新建一个collection,命名为v2ex 2.保存1个请求到v2ex 3.选中v2ex ...

  4. RobotFramework Selenium2 EXCUTE JAVASCRIPT

    https://www.cnblogs.com/lixy-88428977/p/9563247.html

  5. php 图片旋转和png透明

    因需要先处理生成的二维码图片旋转,再和另外一张png图片合并,图片都是png <?php // this file writes the image into the http response ...

  6. Unix、Linux、Windows操作系统的区别

    1.操作区别 原文地址: https://blog.csdn.net/qq_41026740/article/details/96018808 linux区分大小写,windows在dos界面命令下不 ...

  7. csps-模拟7980题解

    题面:https://www.cnblogs.com/Juve/articles/11712702.html 树: 我太sb了不知道DROT是1,还在sb找根 记录一个fa[]数组,表示x的祖先中第一 ...

  8. jenkins实现不同角色查看不同视图

    1.安装插件Role-based Authorization Strategy 2.开启插件 系统管理>>>全局安全配置 3.创建角色和用户 4.登陆查看,只能看到travel开头的 ...

  9. Xcode 5 SVN配置

    from:http://stackoverflow.com/questions/19180718/import-a-project-in-svn-from-xcode-5/19410994#19410 ...

  10. (转)java源程序加密解决方案(基于Classloader解密)

    转:http://cjnetwork.iteye.com/blog/851544 源程序加密解决方案 1. 概述: Java源程序的加密,有如下两种: 1使用混淆器对源码进行混淆,降低反编译工具的作用 ...