Window监控USB设备插拔动作,C语言
时间: 2024-04-14 20:29:29 浏览: 19
要在Windows上监控USB设备的插拔动作,可以使用Windows API函数来实现。以下是一个使用C语言编写的示例代码:
```c
#include <Windows.h>
#include <Dbt.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_HDR pBroadcastHdr = (PDEV_BROADCAST_HDR)lParam;
if (pBroadcastHdr != NULL)
{
switch (wParam)
{
case DBT_DEVICEARRIVAL:
{
PDEV_BROADCAST_DEVICEINTERFACE pBroadcastDevInterface = (PDEV_BROADCAST_DEVICEINTERFACE)pBroadcastHdr;
if (pBroadcastDevInterface->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
printf("USB device inserted\n");
// 在这里处理USB设备插入后的操作
}
break;
}
case DBT_DEVICEREMOVECOMPLETE:
{
PDEV_BROADCAST_DEVICEINTERFACE pBroadcastDevInterface = (PDEV_BROADCAST_DEVICEINTERFACE)pBroadcastHdr;
if (pBroadcastDevInterface->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
printf("USB device removed\n");
// 在这里处理USB设备拨出后的操作
}
break;
}
}
}
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int main()
{
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = "USBDeviceMonitor";
if (!RegisterClass(&wc))
{
printf("Failed to register window class\n");
return 1;
}
HWND hWnd = CreateWindowEx(0, wc.lpszClassName, "", 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL);
if (hWnd == NULL)
{
printf("Failed to create window\n");
return 1;
}
DEV_BROADCAST_DEVICEINTERFACE notificationFilter = {0};
notificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
notificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB;
HDEVNOTIFY hDevNotify = RegisterDeviceNotification(hWnd, ¬ificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if (hDevNotify == NULL)
{
printf("Failed to register device notification\n");
return 1;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterDeviceNotification(hDevNotify);
DestroyWindow(hWnd);
return 0;
}
```
在上面的代码中,我们创建了一个窗口,并在窗口的回调函数`WndProc`中处理`WM_DEVICECHANGE`消息,该消息会在设备插拔时触发。通过检查`wParam`参数和设备类型,我们可以确定是设备插入还是拨出,并在相应的分支中执行相应的操作。
请注意,该示例代码是一个简化的示例,只演示了如何监控USB设备的插拔动作。在实际应用中,您可能需要根据需要进行更多的处理,例如打开和关闭设备、读取设备信息等等。