Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Editar sobre otros procesos.

Saludos, he vuelto. He intentado hacer una cosa para funcionar con otros procesos. No se si me explico bien, pero por si acaso voy a explicarlo con un ejemplo.

Yo hago un programa que tiene un botón, al activarlo, "activa" otro botón de otro proceso. Por ejemplo, funcionando con notepad, que escriba "Probando botón", como si yo hubiera clicado todos esos botones. Me gustaría saber también si es muy complicado o si ya hay algún ejemplo por aquí (no he encontrado ninguno). Gracias a tod@s de antemano.
Responder Con Cita
  #2  
Antiguo 18-06-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola rauros, quieres que cuando hagas click digamos en Button1, llamar al codigo que hay en tus otros Buttons.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 ...........
 Button2Click(Sender);
 Button3Click(Sender);
end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 18-06-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
También puedes utilizar el metodo TButton.Click
La diferencia con la otra forma es que se asigna el ModalResult que tenga el botón al que le haces click y luego se ejecuta su código OnClick.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   ...
   Button2.Click;
   Button3.Click;
   ...
end;
Del Help de Delphi6
Cita:
Simulates a mouse click, as if the user had clicked the button.

procedure Click; override;

Description
Calling Click assigns the value of the button’s ModalResult property to the ModalResult property of its parent form, and then generates an OnClick event.

Última edición por duilioisola fecha: 18-06-2008 a las 14:11:36.
Responder Con Cita
  #4  
Antiguo 18-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
No no, eso ya lo sabía. Lo que quiero es manejar otros procesos, externos a la aplicación delphi. Por ejemplo, tengo un juego que si pulsas el botón s saltas, pues que si activo algún procedimiento en delphi, que en el juego esté saltando todo el rato (lo del bucle infinito es sencillo, lo que no sé es manejar otras aplicaciones desde una).
Responder Con Cita
  #5  
Antiguo 18-06-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por rauros Ver Mensaje
No no, eso ya lo sabía. Lo que quiero es manejar otros procesos, externos a la aplicación delphi. Por ejemplo, tengo un juego que si pulsas el botón s saltas, pues que si activo algún procedimiento en delphi, que en el juego esté saltando todo el rato (lo del bucle infinito es sencillo, lo que no sé es manejar otras aplicaciones desde una).
Que tipo de juego es?, podrías dar más info acerca de esto?
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #6  
Antiguo 18-06-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo entender que quieres manejar una aplicación desde otra aplicación...
Mira el tema de hooks de teclado.

Mira este hilo y los que se comentan dentro, a veri si te sirven.
Responder Con Cita
  #7  
Antiguo 18-06-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Te serviría el envío de teclas a otras aplicaciones o necesitas hacer más cosas?
Para "activar botones" tal como tú comentas, debes conocer el Handle apropiado del elemento que quieres modificar y a partir de ahí enviarle el mensaje adecuado para activarlo, ocultarlo,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 18-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Sí, me vale lo de las teclas. Estoy provando con una cosa pero me faltan algunas variables por declarar. El ejemplo es este:

http://www.clubdelphi.com/foros/showthread.php?t=31113

Pero no sé que tipo es hwndWinamp ni rtrim.

¿Y en ese ejemplo donde tengo que poner la manera de llegar a esa aplicación?
¿O tiene que ser la que está delante de todas?

He visto FindWindow(nil,pchar(rtrim(gWindowName))), ¿El nombre va en el campo nil?
Responder Con Cita
  #9  
Antiguo 21-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Qué cojones es esto?
Responder Con Cita
  #10  
Antiguo 22-06-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
FindWindow(nil,pchar(rtrim(gWindowName)))
No he podido ver el hilo que comentas, pero FindWindow debe ser una funcion para devolver el handle de una ventana dando su nombre

gWindowName es un string.
RTrim es una función que corta los espacios en blanco de la derecha de la cadena
pchar() convierte a un string en una cadena como las que se utilizan en C.
En Pascal y Delphi los string se definían como un byte que dice qué longitud tiene y luego los caracteres que lo componen.
En C, los string son caracteres que terminan en un caracter especial que marca el final.

El handle es finalmente un entero.

Con esto podrás saber cual es el handle de una ventan de la cual sabes el nombre. Luego, utilizando ese handle podrás enviarle información a esa ventana (teclas en tu caso).
Responder Con Cita
  #11  
Antiguo 22-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
¿Entonces RTrim no es necesario si no escribo espacios? Es que delphi me dice que no tengo RTrim declarado...

¿Y en GWindowName pongo el nombre de la aplicación, no?

Código Delphi [-]
 hwndWinamp := FindWindow(nil,pchar(rtrim(gWindowName))); //localizamos la ventana

  IF hwndWinamp = 0 THEN BEGIN
     hwndWinamp := FindWindow(pchar(rtrim(gWindowName)),nil); //gWindowName es una variable que contiene 
//el handle de la ventana sobre la que debemos actuar
     IF hwndWinamp = 0 THEN BEGIN
       ShowMessage(gWindowName + ' Ventana NO ENCONTRADA');
       exit;
     end;
  END;
  SetForegroundWindow(hwndWinamp); //pasamos a esa ventana
  SetForegroundWindow(hwndWinamp);
  //Aqui tienes varios ejemplos de envio de pulsaciones de teclas
  PostKeyEx32(VK_HOME, [], TRUE);          
  PostKeyEx32(VK_END, [SSsHIFT], TRUE);
  PostKeyEx32(VK_INSERT, [ssCtrl], TRUE); 
  SetForegroundWindow(Handle); //De esta manera volvemos a nuestra aplicacion    
  PostKeyEx32(ord('V'), [SSCTRL], TRUE);

Ahí está el ejemplo. Lo pongo porque no se como debo declarar HwndWinamp.
He probado con HwndWinamp: handle; pero no funciona porque lo más seguro es que me lo haya inventado xD.
Responder Con Cita
  #12  
Antiguo 22-06-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Supongo que si declaras HWndWinamp como integer y gWindowName com string será suficiente.
De todos modos, supongo que si te pones sobre la función FindWindow y presionas F1, te dará algo de información sobre esta API. (No tengo el Delphi para probar ahora)

mira este hilo que creo que solucionará todas tus dudas
Responder Con Cita
  #13  
Antiguo 26-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
He conseguido compilar pero no encuentra ninguna ventana... Os puedo dejar el código para que me lo corrijan? (no es mucho)

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  gWindowName:='firefox.exe';
  hwndWinamp := FindWindow(nil,pchar(trim(gWindowName))) ; //localizamos la ventana

  IF hwndWinamp = 0 THEN BEGIN
     hwndWinamp := FindWindow(pchar(trim(gWindowName)),nil) ; //gWindowName es una variable que contiene
//el handle de la ventana sobre la que debemos actuar
     IF hwndWinamp = 0 THEN BEGIN
       ShowMessage(gWindowName + ' Ventana NO ENCONTRADA');
       exit;
     end;
  END;
  SetForegroundWindow(hwndWinamp); //pasamos a esa ventana
  SetForegroundWindow(hwndWinamp);
  //Aqui tienes varios ejemplos de envio de pulsaciones de teclas
  PostKeyEx32(VK_HOME, [], TRUE);
  PostKeyEx32(VK_END, [SSsHIFT], TRUE);
  PostKeyEx32(VK_INSERT, [ssCtrl], TRUE);
  SetForegroundWindow(Handle); //De esta manera volvemos a nuestra aplicacion
  PostKeyEx32(ord('V'), [SSCTRL], TRUE);
end;

He empezado provando con firefox pero siempre me dice
firefox.exe VENTANA NO ENCONTRADA
Responder Con Cita
  #14  
Antiguo 26-06-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba cambiando el primer parámetro del FindWindow por:

PChar('MozillaUIWindowClass')

Que es la clase para la ventana principal de FF; Deja el segundo parámetro a nil.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #15  
Antiguo 26-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Vale pero eso era para hacer una prueba. ¿y si necesito usar el proceso de un videojuego como puedo saber el tipo de clase para la ventana? Gracias a todos.
Responder Con Cita
  #16  
Antiguo 26-06-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Utilidades com WinDowse o Winexp pueden darte el nombre de la clase para una ventana determinada.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #17  
Antiguo 27-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
He solucionado los problemas, gracias. Pero hay otro problema: no puedo escribir "punto". He provado con PostKeyEx32(46, [], TRUE); pero no funciona. Pese a que con PostKeyEx32(13, [], TRUE); si que pulsa "enter" (car return) y que las letras también funcionan de ese modo. Gracias por toda la ayuda.
Responder Con Cita
  #18  
Antiguo 27-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Investigando un poco he encontrado que el error es de delphi, y no del susodicho juego. Pues he probado con el notepad y tampoco se escriben puntos. Creo que solo se escriben carácteres alfabéticos (a...z). A ver si alguien encuentra alguna solución, o alguien le ha pasado esto anteriormente. Gracias.
Responder Con Cita
  #19  
Antiguo 30-06-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Ya que no me ayuda nadie con el problema anterior, pondré otro nuevo a ver si alguien me puede ayudar con este. Necesito la manera de conseguir información sobre otros procesos. Un ejemplo:

Si escribo "cosa" en notepad, al clicar mi programa, lea "cosa". Muchas gracias por las ayudas anteriores.
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
Editar sobre DBGrid Ignacio Varios 7 25-07-2012 18:13:20
Duda editar sobre grid hugohiram Conexión con bases de datos 1 07-01-2008 17:24:20
Sobre los procesos Suriu Windows 1 07-05-2007 22:11:40
"enditall" finalizar aplicacs y procesos innecesarios para por ejemplo...editar video images API de Windows 7 20-09-2004 09:55:14


La franja horaria es GMT +2. Ahora son las 14:17:28.


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