挂钩子窗口&&挂钩WM_APP特定的私人消息

时间:2014-03-28 18:39:47

标签: c++ windows winapi visual-c++ hook

我正在使用挂钩应用程序来捕获外部应用程序上的某些特定事件。

我感兴趣的第一个是在主窗口创建子窗口时检测到。 我感兴趣的另一个事件是子窗口使用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);

}

我做错了什么? 感谢

0 个答案:

没有答案