2012-03-12 18 views
5

Ok, así que casi estoy tratando de enviar las pulsaciones de teclas de una cadena desde y editar el cuadro a la ventana activa y la tecla Intro después. ¿Alguien aquí conoce un método de trabajo para hacer esto en Delphi 7?¿Cómo puedo enviar claves a otra aplicación usando Delphi 7?

He estado buscando alrededor de una hora y media para esto ahora y no puedo encontrar nada y las cosas que he encontrado son éter para las versiones más nuevas de Delphi, o simplemente no funciona. He intentado TTouchKeyboard pero eso es solo para Delphi 10 y más nuevo.

+2

¿Has probado SendInput todavía? –

+2

¿Tiene que ser Delphi? Mira Autohotkey. –

Respuesta

9

Lo he usado para enviar texto a una molesta aplicación emergente 3G sin interfaz, es un hack ya que no nos queda ninguna opción.

procedure TForm1.TypeMessage(Msg: string); 
var 
    CapsOn: boolean; 
    i: integer; 
    ch: char; 
    shift: boolean; 
    key: short; 
begin 
    CapsOn := (GetKeyState(VK_CAPITAL) and $1) <> 0; 

    for i:=1 to length(Msg) do 
    begin 
    ch := Msg[i]; 
    ch := UpCase(ch); 

    if ch <> Msg[i] then 
    begin 
     if CapsOn then 
     begin 
     keybd_event(VK_SHIFT, 0, 0, 0); 
     end; 
     keybd_event(ord(ch), 0, 0, 0); 
     keybd_event(ord(ch), 0, KEYEVENTF_KEYUP, 0); 
     if CapsOn then 
     begin 
     keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); 
     end; 
    end 
    else 
    begin 
     key := VKKeyScan(ch); 
     // UpperCase 
     if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or 
     ((key and $100) > 0) then 
     begin 
     keybd_event(VK_SHIFT, 0, 0, 0); 
     end; 
     keybd_event(key, 0, 0, 0); 
     keybd_event(key, 0, KEYEVENTF_KEYUP, 0); 
     if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or 
     ((key and $100) > 0) then 
     begin 
     keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); 
     end; 
    end; 
    end; 
end; 

esperanza de que ayuda a

ACTUALIZACIÓN

Editado para permitir que otros personajes (no alpha) es decir, cambió los números! "£ $ etc.

+0

¡Thaks tanto! :) ¡eso funciono! :) Hombre maravilloso. pero, ¿alguien sabe cómo enviaría la tecla Enter? – connorbp

+0

Asegúrese de llamar a TypeMessage (char (VK_RETURN)); o agregue char (VK_RETURN) a su mensaje – Dampsquid

+0

, de esta manera no escribe caracteres como /. o: ¿cómo puedo hacer que esos trabajen? – connorbp

6

Ver la función keybd_event. Tendrá que realizar la traducción entre los caracteres y los códigos de exploración del teclado, pero Internet está lleno de información sobre esto.

A menos que necesite emular escribiendo, tiene sentido enviar WM_SETTEXT a la ventana del cuadro de edición y luego enviar Enter como teclado. Esto le permitirá evitar lidiar con códigos de scan.

0

Uso SendKeys() de la unidad SNDKEY32.PAS en el CD de instalación de Delphi 7. En caso de que no pueda encontrar su CD, busque here. Funciona bien para mí (Delphi7 en Windows 7).

Cuestiones relacionadas