c ++全球挂钩。为什么SetWindowsHookEx返回NULL?

时间:2013-11-04 20:50:58

标签: c++ winapi hook setwindowshookex

我遇到了SetWindowsHookEx和WH_CALLWNDPROC的大问题!当使用SetWindowsHookEx进行本地挂钩

HHOOK hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, GetModuleHandle(NULL), GetCurrentThreadId());

一切正常,但是当我尝试为其他程序设置全局钩子或钩子时:

HHOOK hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, GetModuleHandle(NULL), threadId);

其中threadId = GetWindowThreadProcessId(window, NULL);
HWND window = ::FindWindow(NULL,"Program title");

我在钩子里得到NULL ......

我非常喜欢挂钩但是,我不明白在哪里...... 我头疼了几天。 提前谢谢你,对不起我的英语。

1 个答案:

答案 0 :(得分:2)

一种方法:

  1. 将您的CallWndProc函数放入DLL
  2. 使用具有以下内容的def文件导出该函数:
  3.   

    LIBRARY

    EXPORTS
    
        CallWndProc
    
    1. 完成!
    2. (尝试在Win32 API失败时始终使用GetLastError,并在询问时给出结果)