串列埠插拔自動檢測程式思路
阿新 • • 發佈:2019-01-04
#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 的時候,可能會有串列埠消失,所以也需要重新掃描
串列埠