串口插拔自动检测程序思路

#include

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 的时候,可能会有串口消失,所以也需要重新扫描


串口

你可能感兴趣的:(串口插拔自动检测程序思路)