1. 程式人生 > >串列埠插拔自動檢測程式思路

串列埠插拔自動檢測程式思路

#include <dbt.h>

HDEVNOTIFY  hDevNotify; //硬體插拔控制代碼

//註冊訊息
DEV_BROADCAST_DEVICEINTERFACE dbdi;
  memset(&dbdi,0,sizeof(dbdi));
  dbdi.dbcc_size = sizeof(dbdi);
  dbdi.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
  hDevNotify = RegisterDeviceNotification(Handle,&dbdi,DEVICE_NOTIFY_WINDOW_HANDLE|DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);


註冊之後,就能收到 WM_DEVICECHANGE 訊息了


if(Message.Msg == WM_DEVICECHANGE) // 硬體插拔
{
  if(Message.WParam==DBT_DEVICEARRIVAL) // 新硬體插入
  {
  }
  if(Message.WParam==DBT_DEVICEREMOVECOMPLETE) // 硬體拔出
  {
  }
}


登出硬體插拔事件


if(hDevNotify)
   {
     UnregisterDeviceNotification(hDevNotify);
     hDevNotify = NULL;
   }
登出之後,就收不到插拔事件了


WM_DEVICECHANGE 是需要註冊了使用的,不註冊是收不到訊息的


WM_DEVICECHANGE 訊息裡面,WParam 等於 DBT_DEVICEARRIVAL 的時候,說明有新硬體,在此


處掃描新串列埠
WParam 等於 DBT_DEVICEREMOVECOMPLETE 的時候,可能會有串列埠消失,所以也需要重新掃描


串列埠