Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SendMessage de otra aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=52681)

cmm07 28-01-2008 15:50:36

SendMessage de otra aplicacion
 
Hola, necesito hacer lo sig. haber si ustedes me pueden ayudar y disculpen las molestias esque no logro conseguirlo, quiero que desde mi aplicacion oprima un boton de otra aplicacion cualquiera por ejemplo:

Mi aplicacion ---Oprima el boton siguiente de un instalador:

será algo así que error tiene:

var
Instala : HWND;
begin
Instala := FindWindowEx(FindWindow(nil, 'Instalador'), 0, 'Button','&Siguiente');
SendMessage(Instala, WM_LBUTTONDOWN, VK_SPACE, 0);
SendMessage(Instala, WM_LBUTTONUP, VK_SPACE, 0);


que me faltará como lo puedo hacer gracias..

you frind

aeff 28-01-2008 17:53:39

saludos!!

me parece que no te funciona porque ese código que ejecutas no se encuentra dentro de la dirección de memoria del programa "Instalador" o de otro cualquiera al que intentas clickearle el button,

para lograr esto de esa *forma que intentas*, creo que debes inyectarte dentro de ese otro programa, eso de inyecciones es un poco graaaande y trabajoso, te presento una forma mas cómoda y sin complicarnos con direcciones de memorias u otra cosa:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  hWnd, hBtn: Cardinal;
  btnPos: TWindowInfo;
  vCPosBefore: TPoint;
  X, Y: Integer;
begin

  hWnd := FindWindow(nil, 'Ejecutar');
  hBtn := FindWindowEx(hWnd, 0, 'Button', '&Examinar...');

  GetCursorPos(vCPosBefore);
  SetForegroundWindow(hWnd);

  if GetWindowInfo(hBtn, btnPos) = true then
    begin
      X := btnPos.rcClient.Left + ((btnPos.rcClient.Right - btnPos.rcClient.Left) div 2);
      Y := btnPos.rcClient.Top + ((btnPos.rcClient.Bottom - btnPos.rcClient.Top) div 2) ;
      SetCursorPos(X, Y);
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
      Sleep(0);
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    end;

  // Para regresar a nuestra ventanita, claro, si lo deseas...
  SetCursorPos(vCPosBefore.x, vCPosBefore.y);
  SetForegroundWindow(Handle);
end;

que crees? abre la ventanita "Ejecutar" de Windows y pruébalo!!!

de todas formas, lo que intentabas hacer presionando espacio en el button, creo que antes debes pasarle el foco, y aún así, yo no lo haría de esa forma, por ejemplo, te muestro como lo haría si quisiera mandar a clickear un button de mi formulario:

Código Delphi [-]
  SendMessage(Form1.Handle, WM_COMMAND, 0, Button1. Handle);

** claro, que este código se ejecuta dentro de la misma dirección de memoria de mi programa... por eso me funciona ok!**


espero que te funcione!!!

saludos,

cmm07 28-01-2008 18:51:12

No logro que funcione pero de todas formas muchas gracias me sirvio como referencial, no se si es mucho pedir que me hagan un ejemplillo acerca de como usar esto.

gracias
*SALU2

ixMike 28-01-2008 18:59:46

Cita:

Empezado por cmm07 (Mensaje 261604)
No logro que funcione

¿Por qué? ¡Dinos qué te falla!

Cita:

Empezado por cmm07 (Mensaje 261604)
muchas gracias me sirvio como referencial, no se si es mucho pedir que me hagan un ejemplillo acerca de como usar esto.

Si verdaderamente te sirvió de referencia, entonces creo que serías capaz de hacerlo tú mismo ;) (venga, esfuérzate un poco, sabemos que puedes hacerlo :))

Cita:

Empezado por cmm07 (Mensaje 261604)
*SALU2

¡Y deja de copiarme el saludo! :D:D:D


Salu2.

cmm07 28-01-2008 20:52:14

Hola, siisisisiiss me funciono de maravillas gracias gracias, el unico problema esque no todos los botones funcionan, por ej cuando coloco cancelar funciona pero cuando coloco abrir no me funciona no me hace caso, que puede ser...

Gracias


SALU2 :D:D:D:D:D:D:D:

Gracias
lol

ixMike 28-01-2008 21:09:19

Cita:

Empezado por cmm07 (Mensaje 261656)
el unico problema esque no todos los botones funcionan, por ej cuando coloco cancelar funciona pero cuando coloco abrir no me funciona no me hace caso, que puede ser...

Bueno, fíjate si tiene un carácter subrayado. Por si no lo sabías, ese carácter indica que puedes accionar el botón mediante la combinación de teclas Alt+El_carácter_que_sea, o también sencillamente pulsando ese carácter si estás situado (esto es, el foco) en otro botón o similar.

Para ponerlo en el Caption, este carácter va precedido del '&', así que, por ejemplo, si pone "Abrir", tú deberías poner en el código '&Abrir'.

No se me ocurre otra cosa.

Sal u2 [toma, a que este no se te había ocurrido :D:D]

cHackAll 28-01-2008 21:32:59

Tomando la idea de AEFF y consejos de ixMike;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var hWnd: Integer;
begin
 hWnd := FindWindowEx(FindWindow(nil, 'Ejecutar'), 0, 'Button', 'Cancelar');
 SendMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
 SendMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
 SendMessage(hWnd, WM_LBUTTONUP, 0, 0);
end;

Saludos

cmm07 29-01-2008 01:27:05

mychas gracias me anda de maravilla.


La franja horaria es GMT +2. Ahora son las 18:42:49.

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