关于网友提出的“ 钩子无效求助”问题疑问,本网通过在网上对“ 钩子无效求助”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 钩子无效求助描述:
#pragma data_seg(".SHARDAT")
static HHOOK hkb=NULL;
#pragma data_seg()
HINSTANCE hins;
bool installhook()
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
logwrite("test");
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}
void HookEnd()
{
UnhookWindowsHookEx(hkb);
}
通过LoadLibrary和GetProcAddress,installhook已得到执行了,可是SetWindowsHookEx没有效果,请高手帮助!!!
解决方案1:
hins= AfxGetInstanceHandle(); 有调用吗
建议你检查SetWindowsHookEx的返回值,如果SetWindowsHookEx执行成功,那问题肯定是logwrite执行不成功。注意DLL中用到的所有全局变量,一定要放到#pragma data_seg(".SHARDAT")...#pragma data_seg(),而且还需要加上#pragma comment(linker, "/section:.SHARDAT,rws")
解决方案3:可能并没有触发你要勾的消息?你仔细察察很多功能的实现可能和预想的不太一样的
解决方案4: hins的值在哪里?有没有在InitInstance中得到?
键盘钩子的例子:
http://www.vckbase.com/document/viewdoc/?id=271