Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Interactuar con otras aplicaciones (https://www.clubdelphi.com/foros/showthread.php?t=63264)

FrianxD 06-02-2009 01:00:26

Interactuar con otras aplicaciones
 
Bueno hola antes que nada, quiero saber si me podrian ayudar en esta pequeña duda que tengo paso a explicarles

yo creo una aplicacion con un Checkbox solamente eso, y quiero que cuando el check box este marcado y el usuario preciona F1 escriba APROBADO
pero necesito que este APROBADO lo escriba en cualquier aplicacion, asi sea notepad word pad o donde sea basicamente lo que quiero es que cuando mi aplicacion este ejecutada y se precione F1 escriba APROBADO en cualquier programa que este en primer plano en ese momento, no se si me explico bien espero que si y espero que me puedan ayudar con mi duda.


Desde ya muchas gracias !:D

escafandra 06-02-2009 01:53:18

Revisa el mensaje WM_SETTEXT o la API BOOL SetWindowText(HWND hWnd, LPCTSTR lpString)

Necesitarás el HWND del control donde quieres escribir tu texto. Si el HANDLE es de un formulario, te cambiará el Caption, Si es un control editable, se colocará ese texto.

Saludos.

FrianxD 06-02-2009 01:58:23

si es un notepad donde yo quiero escribir APROBADO como deberia hacerlo, podrias darme un ejemplo ?? la verdad no entiendo mucho del tema y no se manejar las API

Neftali [Germán.Estévez] 06-02-2009 10:21:41

CReo que lo más sencillo es que tu programa (del checkbox) registre una ShortCut global a nivel de sistema.
Por ejemplo, en este hilo se muestra como registrar dos teclas de función.

A partir de ahí podrías probar a enviar teclas a la aplicación activa, sea con algun mensaje o utilizando algun procedimiento. Si buscas en los foros "sendkeys" encontrarás varios mensajes (por ejemplo este) que te pueden servir.

FrianxD 06-02-2009 13:37:20

Muchas gracias, voy a revisar esas cosas!


gracias nuevamente!

escafandra 06-02-2009 14:40:26

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.

FrianxD 06-02-2009 14:58:25

gracias por la buena onda ahora cuando este en casa voy a probar esas cosas !


La franja horaria es GMT +2. Ahora son las 01:59:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi