Ver Mensaje Individual
  #11  
Antiguo 25-11-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por aguml Ver Mensaje
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 nCodeWORD wParamDWORD 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 InstalaHINSTANCE 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.
Responder Con Cita