2
我一直在試圖建立一個CBT鉤子我用下面的代碼C++控制檯應用程序:如何在Win32控制檯窗口上設置CBT掛鉤?
...includes...
typedef struct _HOOKDATA
{
int type;
HOOKPROC hookproc;
HHOOK hhook;
}_HOOKDATA;
_HOOKDATA hookdata;
//CBT
LRESULT CALLBACK CBTProc(int code, WPARAM wParam, LPARAM lParam)
{
//do not proccess message
if(code < 0)
{
cout<<"code less than 0"<<endl;
return CallNextHookEx(hookdata.hhook,code,wParam,lParam);
}
switch(code)
{
case HCBT_ACTIVATE:
break;
case HCBT_CREATEWND:
cout<<"CREATEWND"<<endl;
break;
case HCBT_MINMAX:
cout<<"MINMAX"<<endl;
break;
default: //unknown
cout<<"DEFAULT"<<endl;
break;
}
return CallNextHookEx(hookdata.hhook, code, wParam, lParam);
}
int main()
{
hookdata.type = WH_CBT;
hookdata.hookproc = CBTProc;
hookdata.hhook = ::SetWindowsHookEx(hookdata.type, CBTProc,
GetModuleHandle(0), GetCurrentThreadId());
if(hookdata.hhook == NULL)
{
cout<<"FAIL"<<endl;
system("pause");
}
system("pause");
return 0;
}
程序似乎是工作,因爲沒有編譯錯誤,也沒有運行時錯誤。此外,我沒有在main()函數中聲明的'FAIL'消息,這意味着SetWindowHookEx工作正常。但是,我沒有收到CBTProc函數中的任何消息。甚至沒有'DEFAULT'消息。任何人都可以指出代碼中的邏輯錯誤是什麼?
謝謝。