想用c++写一个监测在win7下的usb插拔监测
发布网友
发布时间:2022-05-04 14:18
我来回答
共5个回答
热心网友
时间:2022-06-24 22:29
#include <windows.h>
#include <dbt.h>
#include <stdio.h>
#include <math.h>
LRESULT CALLBACK WndProc(HWND h, UINT msg, WPARAM wp, LPARAM lp)
{
if (msg == WM_DEVICECHANGE) {
if ((DWORD)wp == DBT_DEVICEARRIVAL) {
DEV_BROADCAST_VOLUME* p = (DEV_BROADCAST_VOLUME*) lp;
if (p->dbcv_devicetype == DBT_DEVTYP_VOLUME) {
int l = (int)(log(double(p->dbcv_unitmask)) / log(double(2)));
printf("啊……%c盘插进来了\n", 'A' + l);
}
} else if ((DWORD)wp == DBT_DEVICEREMOVECOMPLETE) {
DEV_BROADCAST_VOLUME* p = (DEV_BROADCAST_VOLUME*) lp;
if (p->dbcv_devicetype == DBT_DEVTYP_VOLUME) {
int l = (int)(log(double(p->dbcv_unitmask)) / log(double(2)));
printf("啊……%c盘被拔掉了\n", 'A' + l);
}
}
return TRUE;
} else return DefWindowProc(h, msg, wp, lp);
}
int main() {
WNDCLASS wc;
ZeroMemory(&wc, sizeof(wc));
wc.lpszClassName = TEXT("myusbmsg");
wc.lpfnWndProc = WndProc;
RegisterClass(&wc);
HWND h = CreateWindow(TEXT("myusbmsg"), TEXT(""), 0, 0, 0, 0, 0,
0, 0, GetMoleHandle(0), 0);
MSG msg;
while( GetMessage(&msg, 0, 0, 0) > 0 ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
热心网友
时间:2022-06-24 22:29
winddk里有源码,微软官方提供的,如果你安装的是7600的ddk,那么就在C:\WinDDK\7600.16385.1\src\usb\usbview目录下,如果是其他版本,对应着找就可以了,这个是纯C语言写的,没有用到mfc,有界面,自己可以将界面去掉
热心网友
时间:2022-06-24 22:30
这个 和消息 有关 控制台貌似 不行吧 需要 窗口的
http://blog.csdn.net/veryhehe2011/article/details/7781055
热心网友
时间:2022-06-24 22:30
CDSN论坛问问
热心网友
时间:2022-06-24 22:31
自己写驱动程序吧,没有其他方法