Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
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

Última edición por cmm07 fecha: 28-01-2008 a las 15:53:59.
Responder Con Cita
  #2  
Antiguo 28-01-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
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,
Responder Con Cita
  #3  
Antiguo 28-01-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 28-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por cmm07 Ver Mensaje
No logro que funcione
¿Por qué? ¡Dinos qué te falla!

Cita:
Empezado por cmm07 Ver Mensaje
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 Ver Mensaje
*SALU2
¡Y deja de copiarme el saludo!


Salu2.
Responder Con Cita
  #5  
Antiguo 28-01-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
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 :

Gracias
lol
Responder Con Cita
  #6  
Antiguo 28-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por cmm07 Ver Mensaje
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 ]
Responder Con Cita
  #7  
Antiguo 28-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 29-01-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
mychas gracias me anda de maravilla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SendMessage no me funciona gluglu API de Windows 6 08-10-2007 20:11:49
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
Keypress en otra aplicacion? lookmydoom API de Windows 4 29-06-2006 04:30:05
SendMessage y dos instancias de una aplicación Aldo OOP 3 22-05-2006 19:43:12
Maximizar otra Aplicación Caro API de Windows 2 05-12-2005 13:11:15


La franja horaria es GMT +2. Ahora son las 16:25: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
Copyright 1996-2007 Club Delphi