Cita:
Empezado por aguml
en mi hook no capturaba las teclas especiales como las Fx, flechas, ctrl, shift,... El tuyo no he podido probarlo aun. A lo que me refiero es que ¿como hago para que me capture esas teclas?
|
Con el Hook
Código PHP:
LRESULT CALLBACK Filtro(int nCode, WORD wParam, DWORD lParam)
{
if(nCode == HC_ACTION){
if((GetKeyState(0x43) < 0) && GetAsyncKeyState(VK_CONTROL) == OK){ //si pulsamos [Ctl+C]
CloseClipboard();
OpenClipboard(0);
EmptyClipboard();
}
else if((GetKeyState(0x56) < 0) && GetAsyncKeyState(VK_CONTROL) == OK){ //si pulsamos [Ctl+V]
CloseClipboard();
}
}
return CallNextHookEx(gancho,nCode,wParam,lParam);
}
/*******************************************************/
/*FUNCIÓN PARA INSTALAR/DESINSTALAR EL HOOK DEL TECLADO*/
/*******************************************************/
extern "C" __declspec(dllexport) __stdcall int CreaHook(BOOL Instala, HINSTANCE DLLInst)
{
int retval;
if(Instala==TRUE) {
gancho=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)Filtro,DLLInst,0);
if(gancho==NULL){
retval = 0;
}else{
retval = 1;
}
}else{
CloseClipboard();
retval = UnhookWindowsHookEx(gancho);
}
return retval;
}
Código PHP:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//cargamos la Dll
Dll=LoadLibrary("HookKeyboard.dll");
if(!Dll){
ShowMessage("No se encontró la Dll: RBT_KLogger.dll");
return;
}
//buscamos la funcion en la dll
Funcion = (LPFuncion)GetProcAddress(Dll, "CreaHook");
if(!Funcion){
ShowMessage("ERROR");
//FreeLibrary(Dll);
return;
}
//ejecutamos la función
Funcion(TRUE,Dll);//instalamos el hook
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//desinstalamos el hook
Funcion(FALSE,NULL);
//liberamos la memoria
// FreeLibrary(Dll);
}
//---------------------------------------------------------------------------
Observa que he declarado como __stdcallla función CreaHook. Esto es porque en un momentode este hilo preguntabas porqué el compilador "decoraba" la función con un guión delante. De esta manera el nombre de la función no se altera. No deber descargar la dll porque perderás el valor de la variable gancho.
Saludos.