Ver Mensaje Individual
  #6  
Antiguo 06-02-2009
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
Una solución usando un Hook al teclado:

Código:
HHOOK WHookKeyboard = 0;

//---------------------------------------------------------------------------
LRESULT CALLBACK KeyboardHookCallBack(int Code, WPARAM wParam, LPARAM lParam)
{
   if(Code == HC_ACTION){
      // PKBDLLHOOKSTRUCT hs = (PKBDLLHOOKSTRUCT)lParam;
      PKBDLLHOOKSTRUCT hs = reinterpret_cast<PKBDLLHOOKSTRUCT>(lParam);
      if (hs->vkCode == VK_F1 && hs->flags ==0){
        HWND hWnd = 0;
        HWND hWndc = 0;
        hWnd = FindWindow("NotePad", 0);
        hWndc = FindWindowEx(hWnd, 0,0,0);
        SetForegroundWindow(hWndc);
        ::SetFocus(hWndc);
        char cadena[] = "HOLA";
        for(int n=0; n<strlen(cadena); n++){
          PostMessage(hWndc, WM_CHAR, cadena[n], 0);
        }
      }
   }


   // Permitimos el proceso del resto del teclado.
   return CallNextHookEx(WHookKeyboard, Code, wParam, lParam);
}

//---------------------------------------------------------------------------
bool Hook()
{
   if(WHookKeyboard == 0) {
     WHookKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, reinterpret_cast<HOOKPROC>(KeyboardHookCallBack), HInstance, 0);
     // Antigua y clásica forma de hacer el casting
     // WHookKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardHookCallBack, HInstance, 0);
   }

   return (bool)WHookKeyboard;
}

//---------------------------------------------------------------------------
void UnHook()
{
   UnhookWindowsHookEx(WHookKeyboard);
   WHookKeyboard = 0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
   if(CheckBox1->Checked) Hook();
   else UnHook();
}
//---------------------------------------------------------------------------
Saludos.

Última edición por escafandra fecha: 06-02-2009 a las 14:52:12.
Responder Con Cita