[MFC]U盘检测

简介:

前言

  本文主要是讲在MFC中使用消息队列,并在消息中捕获系统USB插入、卸载U盘的事件。
 

 

正文

  一、MFC中使用消息队列

    1.1  声明

virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
 

    1.2  实现

LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    
return  CDialog::WindowProc(message,wParam,lParam);
}

      本示例是继承CDialog。

 

  二、捕获U盘插入、卸载事件
 

LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
    
switch  (message)
    {
        
// WM_DEVICECHANGE,系统硬件改变发出的系统消息
         case  WM_DEVICECHANGE:
        {
            PDEV_BROADCAST_HDR lpdb
= (PDEV_BROADCAST_HDR)lParam;
            
switch (wParam)
            {
                
case  WM_DEVICECHANGE:
                    
break ;
                
case  DBT_DEVICEARRIVAL: // DBT_DEVICEARRIVAL,设备检测结束,并且可以使用
                {
                    
if (lpdb -> dbch_devicetype  ==  DBT_DEVTYP_VOLUME) // 逻辑卷
                    {
                        PDEV_BROADCAST_VOLUME lpdbv 
=   (PDEV_BROADCAST_VOLUME)lpdb;
                        
switch (lpdbv -> dbcv_flags)
                        {
                            
case   0 :                 // U盘
                            {
                                CString decDriver;
                                decDriver 
=  FirstDriveFromMask(lpdbv  -> dbcv_unitmask);
                                TRACE1(
" 检测到U盘:[%s]插入!\n " ,decDriver.GetBuffer( 0 ));
                            }
                                
break ;
                            
case  DBTF_MEDIA:     // 光盘
                                TRACE1( " 检测到光盘:[%c]插入!\n " ,FirstDriveFromMask(lpdbv  -> dbcv_unitmask));
                                
break ;
                        }
                    }
                }
                    
break ;
                
case  DBT_DEVICEREMOVECOMPLETE: // DBT_DEVICEREMOVECOMPLETE,设备卸载或者拔出
                {
                    
if (lpdb -> dbch_devicetype  ==  DBT_DEVTYP_VOLUME) // 逻辑卷
                    {
                        PDEV_BROADCAST_VOLUME lpdbv 
=   (PDEV_BROADCAST_VOLUME)lpdb;
                        
switch (lpdbv -> dbcv_flags)
                        {
                            
case   0 :                 // U盘
                            {
                                CString decDriver;
                                decDriver 
=  FirstDriveFromMask(lpdbv  -> dbcv_unitmask);
                                TRACE1(
" 检测到U盘:[%s]拔出!\n " ,decDriver.GetBuffer( 0 ));
                            }
                                
break ;
                            
case  DBTF_MEDIA:     // 光盘
                                
                                
break ;
                        }
                    }
                }
                    
break ;
            }
        }
        
break ;
    }
    
return  CDialog::WindowProc(message,wParam,lParam);  
}


 

  三、效果图

   

 

  四、文章修改

    4.1  2010-5-7  MFC中使用不要使用SetWindowLong方式来获取消息队列,否则会出现无法关闭窗口的问题。



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/583033,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 自然语言处理 运维
搜索NLP行业模型和轻量化客户定制
开放搜索NLP行业模型和轻量化客户定制方案,解决减少客户标注成本、完全无标注或少量简单标注的等问题,让搜索领域扩展更易用。
1866 0
搜索NLP行业模型和轻量化客户定制
|
前端开发
CSS 轻松制作 SVG 动画
如果从未在前端使用过 SVG,那么就错过了很多改善性体验,如果不知道如何使用 SVG 制作动画,那么将错过更多。本文开始制作第一个 SVG 图形,为其添加动画。
882 0
CSS 轻松制作 SVG 动画
|
开发者
记一次微信分享功能调整带来的问题。分享功能分享出来链接
做微信公众号开发的时候,有时候因为业务需要,地址需要给到其他人,让他们放到公众号里。最常用的功能就是微信分享,分享出一个 卡片,看起来也很美观。但是一直好使的业务,在没有代码更改的前提下,忽然不好用了。分享出来的只能是一个url地址。这让我百思不得其解。对自己的代码还是很有信心的(手动狗头)!!!
287 0
记一次微信分享功能调整带来的问题。分享功能分享出来链接
|
监控 算法 流计算
|
1天前
|
云安全 人工智能 自然语言处理
|
6天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
314 116
|
8天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
604 53
Meta SAM3开源:让图像分割,听懂你的话