我正在使用挂钩应用程序来捕获外部应用程序上的某些特定事件。
我感兴趣的第一个是在主窗口创建子窗口时检测到。
我感兴趣的另一个事件是子窗口使用Spy ++称为WM_APP+2
的自定义消息:
http://i.stack.imgur.com/sfcWu.png
为了达到这个目的,我编写了一个DLL,它使用带有SetWindowsHookEx
挂钩的WH_CBT
来检测创建新窗口的时间,一旦创建新窗口,再次使用不同类型调用SetWindowsHookEx
钩子试图捕捉自定义消息。
第一: 构建这样的应用程序是否正确? (在旧处理过程中创建一个新钩子)
if (nCode == HCBT_CREATEWND){
hWnd = (HWND)wParam;
CBT_CREATEWND* cbtWnd = (CBT_CREATEWND*)lParam;
if (_tcscmp(cbtWnd->lpcs->lpszClass, CLASSNAME) == 0){
OutputDebugString(TEXT("Creating new Hook"));
g_hNewHook = SetWindowsHookEx(WH_CALLWNDPROC, &MyCallWndProc, g_hMod,
GetWindowThreadProcessId(hWnd, NULL));
}
}
我想我应该在DLL的共享内存区域中创建一个HHOOK
数组,以便在我的DLL从内存中卸载之前调用UnhookWindowsHookEx
,不是吗?
其次:
我正在使用WH_CALLWNDPROC
钩子来尝试检测WM_APP+2
(0x8002),但显然我没有得到与Spy ++相同(或类似)的值。
if (nCode == HC_ACTION){
CWPSTRUCT* cwt = (CWPSTRUCT*)lParam;
TCHAR str[100];
_stprintf_s(str, TEXT("message: 0x%08u - wParam: 0x%08u - lParam: 0x%08u."),
cwt->message, cwt->wParam, cwt->lParam);
OutputDebugString(str);
}
我做错了什么? 感谢