PDA

Ver la Versión Completa : Simular click en otra aplicacion(es)


doverzhoff
16-12-2003, 04:48:05
Hola a todos!!!

Espero se encuentren bien y antes que nada les deseo una feliz navidad y un prospero año nuevo.

Tengo una duda y espero me puedan ayudar: Como puedo (si se puede) simular un click en una aplicación que no es mía, que ni siquiera he visto el código, por ejemplo simular un click del numero 1 (o cualquier botón) en la calculadora de windows, o por ejemplo poner el foco en un edit de la otra aplicación y escribir en él; todo esto desde mi aplicación.
P.D. Siempre busco en el historial antes de preguntar algo, pero esta vez no encontre nada.

Bueno, me despido envialdoles un cordial saludo...

dvz

delphi.com.ar
16-12-2003, 14:45:54
Creo que lo mejor es que busques la ventana indicada y el botón correspondiente (FindWindow, EnumWindows, EnumChildWindows), y le envíes el mensaje WM_LBUTTONDOWN.
También te recomiendo este hilo: http://www.clubdelphi.com/foros/showthread.php?s=&threadid=6010

Saludos!

acertij022
16-12-2003, 16:47:24
A través de este código, podras programar tu raton, para que se mueva y pulse cualquier botón automaticamente.
procedure TFrmPrincipal.ClickBotonIzquierdo(X, Y: Integer);
// Esta rutina sirve para hacer un click en las coordenadas
// X-Y de la pantalla.
var
ClientX, ClientY: Integer;
Window, Parent: HWnd;
WindowRect: TRECT;
begin
// Primero situa el cursor del ratón en la posición deseada
SetCursorPos(X, Y);

// Averiguamos el identificador del objeto que se encuentra
// en dichas coordenadas. (No funciona para ventanas ocultas
// o deshabilitadas)
Window := WindowFromPoint(Point(X, Y));

// Si el identificador devuelto es distinto de 0 es que
// realmente hay un objeto en dichas coordenadas
if (Window <> 0) then begin
// Averiguamos las coordenadas del objeto
GetWindowRect(Window, WindowRect);

// y trasladomos las coordenadas del punto donde se desea
// hacer click a las coordenadas del objeto encontrado
ClientX := X - WindowRect.Left;
ClientY := Y - WindowRect.Top;

// Ahora averiguamos si el objeto tiene padre, por ejemplo,
// si el objeto es un botón o una lista
Parent := GetAncestor(Window, GA_ROOT);

// Si el objeto no tiene padre, es que es una ventana. Si
// tiene padre (una ventana), utilizamos este, ya que el
// mensaje debe pasarse a una ventana.
if (Parent = 0) then
Parent := Window;

// Comprobamos que la ventana esta en primer plano, es decir,
// que es la ventana activa. Si no es así, la activamos
if (Parent <> GetForegroundWindow()) then begin
SetForegroundWindow(Parent);
end;

// Y ahora le enviamos a la ventana los mensajes correspondientes
// para obtener un click del ratón
SendMessage(Window, WM_LBUTTONDOWN, MK_LBUTTON, ClientX or (ClientY shl 16));
SendMessage(Window, WM_LBUTTONUP, 0, ClientX or (ClientY shl 16));
end;
end;


Espero que te sea util
:o :p

doverzhoff
22-12-2003, 23:31:32
Una pregunta más:
¿FindWindow, EnumWindows, EnumChildWindows tambien sirve para paginas de Internet?
Por ejemplo, me comentaron de un programa que revisa que unas pc's que estan en red esten trabajando bien (por ejemplo, puede que el cable se desconectó, etc), para esto, el programa manda un mensaje a una pc y si no se recibe una respuesta el programa entra a una pagina de internet para mandar un mensaje a un localizador con el nombre de la pc que tiene problemas y así poder dar solución mas rapido al problema.

Bueno, lo que deseo saber concretamente es: una vez abierto el navegador de internet y estando en la página requerida, introducir el texto y el numero del radiolocalizador en sus respectivos campos, y pulsar el botón "enviar", claro todo esto desde un programa en Delphi.

Espero haberme explicado bien, y ojalá puedan ayudarme.

"Que tengan todos una feliz Navidad y el próximo año este lleno de dicha para todos ustedes. Aprovecho tambien para agradecer la gran ayuda que nos brindan a los novatos en este amplio mundo de la programación y Delphi.
SINCERAMENTE, MUCHAS GRACIAS"

dvz