RequestDeviceNotifications实例及源码

 #include <Pnp.h>

//定义DEVDETAIL联合体,目的为了DEVDETAIL结构体的szName变量的长度
typedef union {
DEVDETAIL d;
char pad[sizeof(DEVDETAIL)+MAX_DEVCLASS_NAMELEN];
} MYDEV;

//检测SD卡插拔状态的线程
UINT CRequestDeviceNotifications_TestDlg::SDCheckThread(LPVOID lpParam)
{
GUID guid = {0};    // or any known and relevant device interface GUID
HANDLE hQueue, hn;
MSGQUEUEOPTIONS msgopts;

msgopts.dwSize = sizeof(MSGQUEUEOPTIONS);
msgopts.dwFlags = 0;
msgopts.dwMaxMessages = 0;
msgopts.cbMaxMessage = sizeof(MYDEV);
msgopts.bReadAccess = TRUE;

//创建消息队列
hQueue = CreateMsgQueue(NULL, &msgopts);

if (hQueue == 0)
{
   return 0;
}

//注册消息队列到设备管理器
hn = RequestDeviceNotifications(&guid, hQueue, TRUE);

MYDEV devDetail;
DWORD dwFlags;
DWORD dwSize;

for(;;)
{
   //等待消息队列的返回
   DWORD rel = ::WaitForSingleObject(hQueue, INFINITE);

   if(rel == WAIT_OBJECT_0)
   {
    //读消息队列的数据,这里是读出很多消息的,因为有比较多的设备
    while(::ReadMsgQueue(hQueue, &devDetail, sizeof(MYDEV), &dwSize, 0, &dwFlags) == TRUE)
    {
     //判断是否SD卡目录,这里可以增加其他判断,这样就可以变成检测其他设备
     if(TEXT("\\SD Memory") == devDetail.d.szName)
     {
      wprintf(L"ReadMsgQueue %s\r\n",devDetail.d.szName);
     }
    }
   }
}

return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值