编程光驱监测

 
光驱监测
VC6新建一个Dialog对话框类的程序,重载WindowProc()函数(在“查看”à“新建类向导”页面“Messages”中找到主对话框的WindowProc()虚汗数,点击右边创建并编辑它),参照下面内容添加进入即可。下面是源码,要说的都包含在注释中了,看看吧:
 
LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    // TODO: Add your specialized code here and/or call the base class
    PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
    CString szMsg;
    if(message == WM_DEVICECHANGE)
    {
         switch(wParam)
         {
             //当一个设备变得被插入并变得可用时,
             //系统会发送广播事件DBT_DEVICEARRIVAL
         case DBT_DEVICEARRIVAL:
             // 判断CDROM碟片是否已经插入到光驱中
             if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
             {
                  PDEV_BROADCAST_VOLUME lpdbv=(PDEV_BROADCAST_VOLUME) lpdb;
                  //判断是否有CDROM碟片
                  if (lpdbv -> dbcv_flags & DBTF_MEDIA)
                  {
                      // 显示消息,获取光驱的逻辑驱动器号
                      szMsg.Format("驱动器%c: 已经可用/n",chFirstDriveFromMask(lpdbv ->dbcv_unitmask));
                      AfxMessageBox(szMsg);
                  }
             }
             break;
        
             //当一个设备变得被移走并变得不可用时,
             //系统会发送广播事件DBT_ DEVICEREMOVECOMPLETE
         case DBT_DEVICEREMOVECOMPLETE:
                  // 判断CDROM碟片是否从光驱中移走
                  if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
                  {
                      PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
                      if (lpdbv -> dbcv_flags & DBTF_MEDIA)
                      {
                          //显示消息,获取光驱的逻辑驱动器号
                          szMsg.Format("驱动器%c: 已经弹出/n",chFirstDriveFromMask(lpdbv ->dbcv_unitmask));
                          AfxMessageBox(szMsg);
                      }
                  }
                  break;
             }
    }
    return CDialog::WindowProc(message, wParam, lParam);
}
 
其中用到的函数chFirstDriveFromMask()如下:
char chFirstDriveFromMask (ULONG unitmask)
{
    char i;
    for (i = 0; i < 26; ++i) //假设不会超过个逻辑驱动器
    {
         if (unitmask & 0x1) //看该驱动器的状态是否发生了变化
         break;
         unitmask = unitmask >> 1;
    }
    return (i + 'A');
}
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值