HHOOK SetWindowsHookEx(
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);
第一个参数:指定钩子的类型,有WH_MOUSE、WH_KEYBOARD等十多种
第二个参数:标识钩子函数的入口地址
第三个参数:钩子函数所在模块的句柄;
第四个参数:钩子相关函数的ID用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息。为了捕获所有事件,挂钩函数应该放在动态链接库DLL中。在应用程序中提供导出函数,可以不.
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);
第一个参数:指定钩子的类型,有WH_MOUSE、WH_KEYBOARD等十多种
第二个参数:标识钩子函数的入口地址
第三个参数:钩子函数所在模块的句柄;
第四个参数:钩子相关函数的ID用以指定想让钩子去钩哪个线程,为0时则拦截整个系统的消息。为了捕获所有事件,挂钩函数应该放在动态链接库DLL中。在应用程序中提供导出函数,可以不.
//消息钩子函数
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HookAllTextOut();
return CallNextHookEx(g_hHook, nCode, wParam, lParam);}void CmyDlg::Ontest()
{
// TODO: Add your control notification handler code here
//系统级空Hook,这里用了WH_GETMESSAGE,用其它的也行
g_hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, NULL, 0);
//g_hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, NULL, GetCurrentThreadId());
}红色的代码不调用GetMsgProc,而为了为了捕获所有事件,第四个参数就要设置为0,由于钩子函数所在模块的句柄在当前程序中,所以第四个参数也要设置为0.但是为什么不调用GetMsgProc呢?
LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HookAllTextOut();
return CallNextHookEx(g_hHook, nCode, wParam, lParam); } void CmyDlg::Ontest()
{
// TODO: Add your control notification handler code here
//系统级空Hook,这里用了WH_GETMESSAGE,用其它的也行
g_hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, NULL, 0);
//g_hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, NULL, GetCurrentThreadId());
} 红色的代码不调用GetMsgProc,而为了为了捕获所有事件,第四个参数就要设置为0,由于钩子函数所在模块的句柄在当前程序中,所以第三个参数也要设置为0.但是为什么不调用GetMsgProc呢?