WINCE接收设备插入拔出消息

在WINCE系统中,可以通过由窗口接收一个事件来判断有新设备插入。
窗口只需要接收该消息:WM_DEVICECHANGE。然后,通过判断设备类型和设备名称就可以判断具体的设备插入。
例如判断 SD卡的插入和拔出操作,其中SD卡的设备名为"DSK1:",那么可以在顶层窗口中接收并判断此消息:
case WM_DEVICECHANGE:
{

         DEV_BROADCAST_HDR* dhr = (DEV_BROADCAST_HDR *)lParam;
         PDEV_BROADCAST_PORT lpdbp = (PDEV_BROADCAST_PORT)dhr; 

         if( DBT_DEVTYP_PORT == lpdbp->dbcp_devicetype && !wcsicmp(lpdbp->dbcp_name, L"DSK1:")) {
                   switch(wParam) {
                               case DBT_DEVICEARRIVAL: //SD卡插入
                                          m_Flag_SD_Detected = TRUE;
                                          break;
                              case DBT_DEVICEREMOVECOMPLETE://SD卡拔出
                                          m_Flag_SD_Detected = FALSE;
                                          break;
                  }
          }
}
当然了,这个消息的发送也是要驱动程序去实现的。一般在驱动程序中有对设备在线和离线状态的判断,一旦发现状态有变,就会广播一个消息,也可以只往某个窗口发送消息。以下是USB从机驱动判断插入和拔出的广播消息的实现:
static VOID BroadcastUSBINSERT(
                     LPTSTR DevName,
                     BOOL bNew
)
{
          PDEV_BROADCAST_PORT pBCast;
          DWORD len;
          LPTSTR str;
         static DWORD insert_times = 0; //记录USB插入的次数
         if(bNew == TRUE){
                  insert_times++;
         }else if(insert_times <= 0){
                 return;
         }else{
                insert_times = 0;
         }
        len = sizeof(DEV_BROADCAST_HDR) + (_tcslen(DevName) + 1)*sizeof(TCHAR);
        pBCast = (PDEV_BROADCAST_PORT)LocalAlloc(LPTR, len);
        if (pBCast == NULL) {
                return;
        }
        pBCast->dbcp_devicetype = DBT_DEVTYP_PORT;
        pBCast->dbcp_reserved = 0;
        str = (LPTSTR)&(pBCast->dbcp_name[0]);
        _tcscpy(str, DevName);
         pBCast->dbcp_size = len;
         DEBUGMSG(ZONE_PNP,
                                 (TEXT("DEVICE!BroadcastDeviceChange Calling SendNotifyMessage for device %s\r\n"), DevName));
         NKDbgPrintfW((TEXT("Sendmsg : %s\r\n")),(bNew)?TEXT("enter"):TEXT("exit"));
        // Call the function
        SendNotifyMessage(
                   HWND_BROADCAST,
                  WM_DEVICECHANGE,
                  (bNew) ? DBT_DEVICEARRIVAL : DBT_DEVICEREMOVECOMPLETE,
                  (LPARAM)pBCast);
        LocalFree(pBCast);
}
这样,用刚开始的办法,在窗口中接收WM_DEVICECHANGE消息就可以进行异步判断USB设备插入和拔出的动作了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值