#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.   

    我现在是最简单的勾子程序了,只要有键盘按下就写个LOG. 是WINXP环境下,有关系吗?
      

  2.   

    hins的值在哪里?有没有在InitInstance中得到?
    键盘钩子的例子:
    http://www.vckbase.com/document/viewdoc/?id=271
      

  3.   

    建议你检查SetWindowsHookEx的返回值,如果SetWindowsHookEx执行成功,那问题肯定是logwrite执行不成功。注意DLL中用到的所有全局变量,一定要放到#pragma data_seg(".SHARDAT")...#pragma data_seg(),而且还需要加上#pragma comment(linker, "/section:.SHARDAT,rws")
      

  4.   

    hins= AfxGetInstanceHandle(); 有调用吗
      

  5.   

    的确,问题是出在hins的值设置上,谢谢诸位.