热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VCWM_DEVICECHANGE消息,实时捕获U盘插入、移除

WM_DEVICECHANGE使用方式有两种,一种是直接在Windows窗口回调函数中使用,另一种便需要自己注册一下,并编写On函数。第一种,在回调函数中添加“caseWM_DEVICECHAN

 

WM_DEVICECHANGE使用方式有两种,一种是直接在Windows窗口回调函数中使用,另一种便需要自己注册一下,并编写On函数。

 

第一种,在回调函数中添加“case WM_DEVICECHANGE:”,并且可以直接判断wParam,如下。

switch (wParam)
   {
    case DBT_DEVICEARRIVAL:    
    case DBT_DEVICEREMOVECOMPLETE:}

在其中便可判断了,当然需要自己写相应代码,李木所写程序展示如下,这便是一个最基本的U盘检测程序,能够实时检测U盘的插入、卸载,并获得U盘的盘符,显示出来。

 

1、在Dialog.cpp中新增消息。
BEGIN_MESSAGE_MAP(CDeviceMonitorDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_DEVICECHANGE()
END_MESSAGE_MAP()
2、新增响应函数。
DECLARE_MESSAGE_MAP()
public:
afx_msg BOOL OnDeviceChange(UINT nEventType,DWORD dwData);


BOOL CTestDlg::OnDeviceChange(UINT nEventType,DWORD dwData)
{

DEV_BROADCAST_DEVICEINTERFACE * dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;
switch(nEventType)
{

case DBT_DEVICEARRIVAL:
MessageBox("Device arrival!");
break;
case DBT_DEVICEQUERYREMOVE:
// Handle device removal request
MessageBox( "Device request remove!");
break;
case DBT_DEVICEREMOVECOMPLETE:
// Handle device removal
MessageBox( "Device removal!" );
break;
default:
MessageBox("others!");
break;
}


return TRUE;

}

第二种自己定义:

 

本代码可以监测USB状态的变化

启动VC,新建一个MFC的EXE程序,命名为USBListening,选择Dialog bassed,

其余默认,点击Finished

在绿字下面添加如下红色代码

 
 
在绿字下面添加如下红色代码/////////////////////////////////////////////////////////////////////////////// CUSBListeningDlg message handlers #i nclude "Dbt.h" #i nclude  #i nclude  #pragma comment(lib,"Rpcrt4.lib")PVOID g_hNotifyDevNode;void CUSBListeningDlg::RegisterForDevChange(HWND hDlg, PVOID *hNotifyDevNode){    DEV_BROADCAST_DEVICEINTERFACE *pFilterData =   (DEV_BROADCAST_DEVICEINTERFACE*)   _alloca(sizeof(DEV_BROADCAST_DEVICEINTERFACE));    ASSERT (pFilterData);  UUID GUID_CLASS_INPUT; UuidFromString((unsigned char*)"36FC9E60-C465-11CF-8056-444553540000", &GUID_CLASS_INPUT);     ZeroMemory(pFilterData, sizeof(DEV_BROADCAST_DEVICEINTERFACE));     pFilterData->dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);    pFilterData->dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;    pFilterData->dbcc_classguid  = GUID_CLASS_INPUT;       *hNotifyDevNode = RegisterDeviceNotification(hDlg, pFilterData, DEVICE_NOTIFY_WINDOW_HANDLE);}//使用向导,添加DefWindowProc函数LRESULT CUSBListeningDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) {    switch (message)    {       case WM_DEVICECHANGE:        {            switch (wParam)            {            case DBT_DEVICEARRIVAL:            // Handle device arrival                    MessageBox("Handle device arrival");                    break;                case DBT_DEVICEQUERYREMOVE:                     // Handle device removal request                    MessageBox("Handle device removal request");                    break;                           case DBT_DEVICEREMOVECOMPLETE:                     // Handle device removal                   MessageBox("Handle device removal");                   break;            }        } }   return CDialog::DefWindowProc(message, wParam, lParam);}//在OnInitDialog函数中添加RegisterForDevChange函数BOOL CUSBListeningDlg::OnInitDialog(){ CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX <0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {  CString strAboutMenu;  strAboutMenu.LoadString(IDS_ABOUTBOX);  if (!strAboutMenu.IsEmpty())  {   pSysMenu->AppendMenu(MF_SEPARATOR);   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);  } } // Set the icon for this dialog.  The framework does this automatically //  when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);   // Set big icon SetIcon(m_hIcon, FALSE);  // Set small icon  // TODO: Add extra initialization here RegisterForDevChange(m_hWnd,&g_hNotifyDevNode);  return TRUE;  // return TRUE  unless you set the focus to a control}

   

推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
chunhuai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有