调用SetWindowsHookEx的DLL的模块实例句柄,它可以经由DllMain入口的第一个参数得到。

HHOOK SetWindowsHookEx( int idHook,

HOOKPROC lpfn,

HINSTANCE hMod,

DWORD dwThreadId);

至于SetWindowsHookEx的第四个参数dwThreadId,才是你需要借由窗口句柄得到的窗口线程ID,

你可以通过下面的代码获得:

DWORD dwThreadID = GetWindowThreadProcessId(hwnd, NULL);

选择相应的消息钩子,比如

WH_CALLWNDPROC//监视到达窗口前的消息

WH_CALLWNDPROCRET//监视窗口处理后的消息

WH_DEBUG//监视系统调用其他HOOK关联的HOOK子程

WH_GETMESSAGE//监视发送到窗体消息队列里的消息

WH_JOURNALPLAYBACK//全局HOOK,可以插入消息到消息队列

WH_JOURNALRECORD//全局HOOK,监视输入事件(键盘、鼠标等)

WH_KEYBOARD//键盘钩子

WH_MOUSE//鼠标钩子

WH_MSGFILTER//监视菜单、滚动条、消息框、对话框消息和切换窗口的组合键(Alt+Tab等)

WH_SHELL//接收系统中重要的通知(如窗口被产生、摧毁等)