Hola Faust, bienvenido al foro antetodo.
Pues mira, yo ahora mismo estoy con ese tema en mi empresa. Tenemos una aplicacion que hemos desarrollado en Delphi que tiene que distribuirse a diversas oficianas por toda España y esta aplicación debe poder interactuar con otra aplicación que tienen estas oficinas y que no es nuestra, de manera que ejecuta pulsaciones de tecla y copia el texto en esa ventana y lo pega en un memo de la nuestra.
Buscando encontramos esto: con esto puedes enviar pulsaciones de tecla a otra aplicacion
Código Delphi
[-]
Procedure Tform1.PostKeyEx32( key: Word; Const shift: TShiftState; specialkey: Boolean );
Type
TShiftKeyInfo = Record
shift: Byte;
vkey : Byte;
End;
byteset = Set of 0..7;
Const
shiftkeys: Array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL ),
(shift: Ord(ssShift); vkey: VK_SHIFT ),
(shift: Ord(ssAlt); vkey: VK_MENU ));
Var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
Begin
For i := 1 To 3 Do Begin
If shiftkeys[i].shift In bShift Then
keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
End;
If specialkey Then
flag := KEYEVENTF_EXTENDEDKEY
Else
flag := 0;
keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );
flag := flag or KEYEVENTF_KEYUP;
keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );
For i := 3 DownTo 1 Do Begin
If shiftkeys[i].shift In bShift Then
keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), KEYEVENTF_KEYUP, 0);
End;
End;
Para averiguar el Handle simplemente necesitas el título del form de la aplicación sobre la que deseas interactuar, exactamente igual (respetando mayusculas y minusculas)
Ejemplo de llamada:
Código Delphi
[-]
hwndWinamp := FindWindow(nil,pchar(rtrim(gWindowName)));
IF hwndWinamp = 0 THEN BEGIN
hwndWinamp := FindWindow(pchar(rtrim(gWindowName)),nil); IF hwndWinamp = 0 THEN BEGIN
ShowMessage(gWindowName + ' Ventana NO ENCONTRADA');
exit;
end;
END;
SetForegroundWindow(hwndWinamp); SetForegroundWindow(hwndWinamp);
PostKeyEx32(VK_HOME, [], TRUE);
PostKeyEx32(VK_END, [SSsHIFT], TRUE);
PostKeyEx32(VK_INSERT, [ssCtrl], TRUE);
SetForegroundWindow(Handle); PostKeyEx32(ord('V'), [SSCTRL], TRUE);
Espero te sirva.
Saludos