c++ - usar - ¿Cómo puedo configurar un gancho CBT en una ventana de la consola Win32?
mostrar barra de errores dev c++ (1)
El problema es que SetWindowHookEx se basa en el modelo de manejo de mensajes de Win32. Las ventanas de la consola son elementos secundarios del Kernel mismo y no crean sus propias ventanas o bombas de mensajes.
AFAIK haciendo lo que quiere directamente no es posible.
He estado intentando configurar un gancho CBT para mi aplicación C ++ Console con el siguiente código:
...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;
}
El programa parece estar funcionando porque no hay errores de compilación ni de tiempo de ejecución. Además, no aparece el mensaje ''FAIL'' en la función main (), lo que significa que SetWindowHookEx funciona correctamente. Sin embargo, no recibo ninguno de los mensajes indicados en la función CBTProc; ni siquiera el mensaje ''DEFAULT''. ¿Alguien puede precisar cuál es el error de lógica en el código?
Gracias.