Window检测设备插拔的方法 C语言
时间: 2024-04-13 07:28:41 浏览: 12
在 C 语言中,可以使用 Windows API 来检测设备的插拔。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <Windows.h>
int main() {
// 创建一个设备信息结构体
DEV_BROADCAST_DEVICEINTERFACE filter;
ZeroMemory(&filter, sizeof(filter));
filter.dbcc_size = sizeof(filter);
filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
// 注册设备变化通知
HDEVNOTIFY hNotify = RegisterDeviceNotification(
NULL, // 接收通知的窗口句柄,这里设置为 NULL 表示不接收窗口消息通知
&filter, // 设备信息结构体
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES // 接收所有接口类的设备变化通知
);
if (hNotify == NULL) {
printf("注册设备变化通知失败!\n");
return 1;
}
// 进入消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
// 处理设备变化消息
if (msg.message == WM_DEVICECHANGE) {
switch (msg.wParam) {
case DBT_DEVICEARRIVAL:
printf("设备插入\n");
break;
case DBT_DEVICEREMOVECOMPLETE:
printf("设备移除\n");
break;
}
}
}
// 注销设备变化通知
UnregisterDeviceNotification(hNotify);
return 0;
}
```
以上代码中,我们使用了 `RegisterDeviceNotification` 函数来注册设备变化通知,并通过 `WM_DEVICECHANGE` 窗口消息来接收设备变化事件。当有设备插入或移除时,会分别触发 `DBT_DEVICEARRIVAL` 和 `DBT_DEVICEREMOVECOMPLETE` 参数对应的分支。
请注意,由于使用了窗口消息通知,所以这段代码需要在一个具有消息循环的窗口程序中运行才能正常工作。如果只是想要简单地检测设备插拔,可以将上述代码放入一个独立的线程中执行,并使用一个标志位来控制线程的运行和退出。