2
는 다음 코드 내 C++ 콘솔 응용 프로그램에 대한 CBT 후크를 설정하는 노력했습니다 : 오류도 런타임 오류를 컴파일하지 있기 때문에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;
}
이 프로그램은 작동하는 것 같군. 또한 SetWindowHookEx가 작동하고 있다는 것을 의미하는 main() 함수에 'FAIL'메시지가 표시되지 않습니다. 그러나 CBTProc 함수에 명시된 메시지는 표시되지 않습니다. 'DEFAULT'메시지조차도 아닙니다. 누구든지 코드에서 논리 오류가 무엇인지 지적 할 수 있습니까?
감사합니다.