请问在dll中如何捕捉WM_DEVICECHANGE消息
假设dll中没窗口
现在我用钩子,好像没成功
在dll中某个函数中调用
- C/C++ code
HHOOK hHook=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,theApp.m_hInstance,0);
hHook不是NULL,theApp是MFC dll中的全局变量,因为发现AfxGetInstanceHandle()报错
- C/C++ code
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam,LPARAM lParam){ LogDll("CallWndProc"); CWPSTRUCT* pMsg=(CWPSTRUCT*)(lParam); if ( pMsg->message == WM_DEVICECHANGE ) { switch( pMsg->wParam ) { case DBT_DEVICEARRIVAL: LogDll("DBT_DEVICEARRIVAL"); break; case DBT_DEVICEREMOVECOMPLETE: LogDll("DBT_DEVICEREMOVECOMPLETE"); break; } } return CallNextHookEx( NULL,nCode,wParam,lParam);}现象是启动时打印出一堆"CallWndProc",后面就没了,拔插USB接口没任何反应
[解决办法]
SetWindowsHookEx(...,WH_GETMESSAGE,...);
[解决办法]
http://hi.baidu.com/lanyu705/blog/item/e3bf06d4ff57f111a08bb74d.html
[解决办法]
你setwindowhookex是在哪儿调用的?它的hmodul你使用virtualquery去获取试试。