![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola, buenas noches.
Estoy tratando de hacer algo muy difícil para mi entender de Delphi. Lo que pretendo hacer es una aplicación tipo "mensajeador" que iría buscando los HANDLE de ventanas externas y mediante PostMessage (Lo hago así por que de otra manera no sé hacerlo) enviarle o eventos de teclado o bien cerrar las ventanas o traerlas al frente. Mi problemas por ahora es que en un evento no me envía o no lo envío yo bien a un evento de la tecla espacio a un programa previamente abierto con mi aplicación. Les paso a explicar a ver si me entienden: Abro mi aplicación, esta lanza un programa externo de linea de comandos (FFPLAY.EXE) y ejecuta un video, cuando el video se cierra o lo cierro presionando una tecla, inmediatamente arranca otro programa externo que quedaría "de fondo" pasando música (Fmedia.exe) y además lanza un programa más que queda como pantalla principal (EmulationStation). Hasta ahí todo bien. Esta aplicación se que de fondo esperando que se le envíen mensajes con otra aplicación que se ejecutaría cuando el usuario lo requiera, que le envía un código + una linea de comandos que se vería así: EMUamiga||"D:\RetroLife\emulators\amiga\launcher.exe -config:floppy-drive-count=1 "d:\RetroLife\roms\amiga\GalaxyBlast_v1.1.zip"|| Hasta ahí todo va bien, funciona a la perfección. El problema viene ahora. Ese código de arriba lo proceso con una aplicación también mia llamada RELExecutor.exe que le envía los mensajes a la primer aplicación hasta no necestar más de RELExecutor.exe, y cerrarlo. Yo necesito enviar a la aplicación Fmedia.exe un evento de teclado que sería la barra espaciadora presionada, para que este quede en PAUSA, con la línea de comandos de allá arriba (sin el EMUamiga y los ||) ejecuto el emulador de CommodoreAmiga y una vez que se me cierre el emulador, volver a enviar la barra espaciadora para quitar la PAUSA, Bueno, todo este proceso de poner la PAUSA, cerrar el RLExecutor.exe y quitar la PAUSA no me funciona en este código que les voy a poner por acá. Alguien podría darle una mirada y decirme qué puedo agregarle o por qué no me funciona, por favor? Muchas gracias!!!!!
Bueno, ojalá lo hayan entendido y puedan ayudarme. SALUDOS!!!!! |
#2
|
||||
|
||||
Debes concretar alguna cosa en tu pregunta y tenes en cuenta que para cerrar una aplicación puede no ser efectivo el envío de WM_CLOSE. Este mensaje cierra una ventana. de forma que eso hará. Puede ser que la ventana en cuestión no sea la principal, o que la aplicación no tenga ventanas. El Mensaje WM_QUIT puede ser mandado al hilo principal mediante PostThreadMessage pero tampoco es seguro que. Finalmente puedes usar TerminateProcess Esta opción acaba con el proceso sobre el que se tiene permisos pero no de forma natural con lo que no podrá tomar las acciones previstas para su cierre.
Por otro lado preguntas como controlar otro proceso mediante la tecla espacio y muestras un código en el que esa tarea la realiza un procedimiento llamado MensajeFmedia pero cuyo código no muestras. Difícil poder analizarlo en esta condiciones ¿no crees? Revisa este tema: ¿Cómo simular de "verdad" las teclas SHIFT+TAB? seguro que te va a ayudar. Saludos. |
#3
|
|||
|
|||
Cita:
Disculpa, es que ese precedimiento lo tengo en otra unit y por eso no me di cuenta de ponerlo. No hace más que esto: Esto es el que manda el espacio a Fmedia.exe
Esto es lo que me busca la ventana de Fmedia.exe y obtiene su Handle.
La verdad es que no entiendo como hacerlo. Hace rato que estoy con esto y de a poco voy aprendiendo cosas nuevas que nunca he usado. Mi idea es Ejecutar un emulador, que se pause el Fmedia, que al cerrarse el emulador, se quite la pausa del Fmedia y se cierren las ejecuciones de fondo que se largaron con el emulador. Quizás ni se pueda hacer lo que quiero, pero no pierdo nada con tratar. Muchas gracias!!!!! |
#5
|
|||
|
|||
Enviar "parámetro" a una aplicación ya abierta.
Buenas tardes.
Estoy buscando por internet y por el foro (que también es internet ![]() La cosa es esta: Si yo hago una aplicación de Windows en Delphi, hay manera de poder, por ejemplo con un ShellExecute volver a tratar de ejecutar mi aplicación, pero que en vez de ejecutarse, esta solo tome los parámetros que le paso como para poder procesarlos como yo quiera en la aplicación ya abierta?????? Por ejemplo: Tengo una aplicación que está de fondo, la cual me ejecuta a otra aplicación también hecha por mi que es la que le envía los parámetros cada vez que se ejecuta. El problema es que yo la ejecuto mediante otro programa que es un frontEnd de emuladores, el cual abre una ventana de consola al ejecutarse por lo que queda abierta la ventana que ejecuto para mandar los parámetros a la aplicación ya abierta y la de consola y esto me genera el problema de que no puedo cerrrar mi programa, sin antes cerrar la ventana de consola por que si no me dá error y no puedo lograr hacer esto por medio de código. Mi idea es solamente ejecutar la aplicación que recibe los mensajes, mediante el frontend volver a llamar a esa aplicación y en vez de que se abra otra ventana, solo tome la linea de comandos con los parámetros que le pase, para ejecutar el emulador mediante mi programa. Ojalá lo hayan entendido. Y les quería hacer una petición para los expertos: Dónde tengo que leer o sacar los datos para cosas como estas? No me gusta estar preguntando tanto y que me resuelvan todo sin yo entender nada. Por que solo copio y pego código que no entiendo y así nunca voy a aprender a progamar realmente. Muchas gracias!!!!! |
#6
|
|||
|
|||
Enviar parámetros a una aplicación ya abierta.
Buenas tardes.
Estoy buscando por internet y por el foro (que también es internet ) a ver si existe algo parecido a lo que necesito, pero no encuentro guía al respecto. La cosa es esta: Si yo hago una aplicación de Windows en Delphi, hay manera de poder, por ejemplo con un ShellExecute volver a tratar de ejecutar mi aplicación, pero que en vez de ejecutarse, esta solo tome los parámetros que le paso como para poder procesarlos como yo quiera en la aplicación ya abierta?????? Por ejemplo: Tengo una aplicación que está de fondo, la cual me ejecuta a otra aplicación también hecha por mi que es la que le envía los parámetros cada vez que se ejecuta. El problema es que yo la ejecuto mediante otro programa que es un frontEnd de emuladores, el cual abre una ventana de consola al ejecutarse por lo que queda abierta la ventana que ejecuto para mandar los parámetros a la aplicación ya abierta y la de consola y esto me genera el problema de que no puedo cerrrar mi programa, sin antes cerrar la ventana de consola por que si no me dá error y no puedo lograr hacer esto por medio de código. Mi idea es solamente ejecutar la aplicación que recibe los mensajes, mediante el frontend volver a llamar a esa aplicación y en vez de que se abra otra ventana, solo tome la linea de comandos con los parámetros que le pase, para ejecutar el emulador mediante mi programa. Ojalá lo hayan entendido. Y les quería hacer una petición para los expertos: Dónde tengo que leer o sacar los datos para cosas como estas? No me gusta estar preguntando tanto y que me resuelvan todo sin yo entender nada. Por que solo copio y pego código que no entiendo y así nunca voy a aprender a progamar realmente. Muchas gracias!!!!! |
#7
|
|||
|
|||
No te creas que tengo claro haberte entendido bien, pero voy a arriesgarme. Lo que entiendo es que necesitas que dos aplicaciones desarrolladas por tí se comuniquen entre sí. No sé con que versión de delphi estás trabajando o si es con Lazarus, ni tampoco en que SO se ejecutaran estas aplicaciones por lo que igual mi recomendación no es aplicable. Puedes intentar utilizar la API de windows (creo que por eso estará la pregunta en este foro) y utilizar la función SendMessage. No me gusta mucho poner enlaces externos porque no sé cuanto tiempo estarán operativos, pero dejo aquí uno en el que se explica el sistema que que te planteo a ver si te sirve como punto de partida.
http://www.ajpdsoft.com/modules.php?...oenviarmensaje Última edición por engranaje fecha: 13-10-2019 a las 11:47:14. |
#8
|
||||
|
||||
Por favor, deja de crear hilos repetidos, este es el tercero igual, los he unido. Gracias, y no olvides nuestra guía de estilo.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
|||
|
|||
Cita:
Respondí un comentario y después cuando fui a hacer otro post nuevo, me hizo un post exactamente igual a mi conemtario y no el post que yo había escrito. Traté de borrarlo y no supe como,perdón. Lo que menos quiero es incumplir las normas del foro del que tanto aprendí. Muchas gracias!!!!! |
#10
|
|||
|
|||
Cita:
El programa emisor le envía cierto mensaje al programa receptor y este hace ejecuciones de emuladores según lo que se le haya enviado en el mensaje. Ya solucioné el problema del envío de la tecla ESPACIO ejecutando el programa que la recibe con TJvCreateProcess y manejando desde ahí todo. Ahora más o menos lo que estoy haciendo haca algo de lo que realmente quiero hacer, será cuestión de tiempo seguro. Muchas gracias!!!!! Ah!!!!! Uso Embarcadero Delphi Community Edition 10.3.2 en Windows 10 con la última actualización. |
#11
|
||||
|
||||
Cita:
Gracias, amigo ![]() Es que soy un poco insoportable ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" | dec | Internet | 9 | 04-08-2015 16:11:50 |
"Bug" de automatización COM al usar WideChar como parámetro | Al González | [GH Freebrary] | 3 | 09-01-2014 18:21:46 |
Error delphi "valor no puede ser nulo nombre del parametro key" | nickolas | Varios | 0 | 21-08-2012 02:07:45 |
funcion con parametro "raro" | emeceuy | Varios | 3 | 26-11-2008 13:41:46 |
Cómo insertar "NULL" en un parametro de INSERT en SQL | Joselito | SQL | 4 | 23-10-2005 00:17:35 |
![]() |
|