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