第一条是可以实现的
首先你的应用程序必须要先向操作系统注册notify消息,以便USB口有设备连入或断开时给你的应用程序窗口发送消息,API:RegisterDeviceNotification可以帮你完成消息的注册
之后你就可以在WindowProc或其它类似的消息拦截函数拦截到你需要的消息,例如在WindowProc中处理:
switch (message)
{
case WM_DEVICECHANGE:
{
switch(wParam)
{
case DBT_DEVICEARRIVAL://A device has been inserted and is now available.
{
// Handle device arrival
GetDlgItem(IDC_STATIC)->SetWindowText("新设备插入!");
TRACE("新设备插入!\n");
DEV_BROADCAST_HDR* p = (DEV_BROADCAST_HDR*) lParam;
}
break;
case DBT_DEVICEQUERYREMOVE://Permission to remove a device is requested. Any application can deny this request and cancel the removal.
// Handle device removal request
GetDlgItem(IDC_STATIC)->SetWindowText("请求设备删除!");
TRACE("请求设备删除!\n");
break;
case DBT_DEVICEREMOVECOMPLETE://Device has been removed.
// Handle device removal
GetDlgItem(IDC_STATIC)->SetWindowText("设备删除!");
TRACE("设备删除!\n");
break;
case DBT_DEVICEQUERYREMOVEFAILED://Request to remove a device has been canceled.
GetDlgItem(IDC_STATIC)->SetWindowText("设备删除失败!");
TRACE("设备删除失败!\n");
break;
case DBT_DEVICEREMOVEPENDING://Device is about to be removed. Cannot be denied.
GetDlgItem(IDC_STATIC)->SetWindowText("设备已删除!");
TRACE("设备已删除!\n");
break;
case DBT_DEVICETYPESPECIFIC://Device-specific event.
GetDlgItem(IDC_STATIC)->SetWindowText("特殊事件!");
TRACE("特殊事件!\n");
break;
case DBT_CONFIGCHANGED://Current configuration has changed.
GetDlgItem(IDC_STATIC)->SetWindowText("配置改变!");
TRACE("配置改变!");
break;
case DBT_DEVNODES_CHANGED://Device node has changed.
GetDlgItem(IDC_STATIC)->SetWindowText("设备节点改变!");
TRACE("设备节点改变!\n");
break;
case DBT_CUSTOMEVENT://.
GetDlgItem(IDC_STATIC)->SetWindowText("\n");
TRACE("device !\n");
break;