唉。。搞不懂钩子。麻烦告诉我错在那里-_-
我这样写
__declspec(dllexport) BOOL Zdll_InstallMyzdll_hook( HWND hWnd )
{
if(zdll_hWndServer != NULL)
return FALSE; // already zdll_hooked!
zdll_hook = SetWindowsHookEx( WH_GETMESSAGE, (HOOKPROC)Zdll_hookproc, zdll_hInst, 0 );
if(zdll_hook != NULL)
{ /* success */
zdll_hWndServer = hWnd;
return TRUE;
} /* success */
return FALSE; // failed to set zdll_hook
} // setMyzdll_hook
static LRESULT CALLBACK Zdll_hookproc( UINT nCode, WPARAM wParam, LPARAM lParam )
{
if(nCode < 0)
{ /* pass it on */
CallNextHookEx(zdll_hook, nCode, wParam, lParam);
return 0;
} /* pass it on */
if( (lParam & 0x01FF0000) == zdll_lparamHotKeyOffAuto )
PostMessage(zdll_hWndServer, WM_USER_ON_AUTO, 0, lParam );
else if( (lParam & 0x01FF0000) == zdll_lparamHotKeyOffAuto )
PostMessage(zdll_hWndServer, WM_USER_OFF_AUTO, 0, lParam );
本来呢,我用WH_KEYBOARD这个Flag可以达到我的要求,可是如此一来当程序是背景时就无效了,就是不肯来hookproc。
后来呢,我用WH_GETMESSAGE,这样子虽然程序在背景时也有响应,但是到hookproc时的lParam却不对了-_-.
然后呢,我就改成在hookproc时用GetKeyState(VK_F2)判断後发送消息,结果是近乎死机,就好像是有处理不完的消息一样。。=_=
我又试了几个flag(WH_FOREGROUNDIDLE,WH_CALLWNDPROC..)就是不行。我只是想在背景时也能启动我的热键啊。(因为是给人选键的,所以用钩子比用HotKey好吧。)
大侠啊,我那里错了啊>_<