J'ai essayé de mettre en place un crochet CBT pour mon application console C++ avec le code suivant:Comment puis-je configurer un hook CBT sur une fenêtre de la console Win32?
...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;
}
Le programme semble fonctionner parce qu'il n'y a pas d'erreurs de compilation ni erreurs d'exécution. De plus, je ne reçois pas de message 'FAIL' dans la fonction main(), ce qui signifie que SetWindowHookEx fonctionne correctement. Cependant, je ne reçois aucun des messages indiqués dans la fonction CBTProc; pas même le message 'DEFAUT'. Quelqu'un peut-il préciser quelle est l'erreur de logique dans le code?
Merci.