Título: Estado de un programa externo Publicado por: Xaina en 24 Octubre 2007, 21:16 pm Hola chic@s! no acostumbro a interactuar en los foros, no es mi estilo, aunque no niego haberle echado una ojeado a uno que otro...
No he encontrado en otros sitios, algo que de verdad me pueda ayudar, si uds, pueden... gracias de antemano. La idea es la siguiente: tengo un programa "A" de cualquier extención, y una aplicación "B.exe" hecha en vb, quiero que cuando ejecute "B", este me avise a través de un msgbox por ejemplo, si "A" se esta ejecutando o no. D De verdad no encontrado algo que me de una idea de como hacerlo, gracias de antemano. Xaina. Saludos!!! Título: Re: Estado de un programa externo Publicado por: HaDeS, - en 24 Octubre 2007, 22:17 pm Para dos aplicaciones hechas en visual podes hacer esto:
Código esa seria la aplicacion A, la aplicacion B tendria este code: Código Si ejecutas B, entonces se utiliza la api findwindow para buscar una ventana que contiene el codigo que creamos con la api createwindowex en la aplicacion A. si es para observar otras aplicaciones podes utilizar la misma api findwindow para buscar por el titulo de la ventana que contiene la aplicacion, o utilizas la api getclassname para mirar si la clase en una aplicacion esta activa. que te sirva y saludos ;) Título: Re: Estado de un programa externo Publicado por: Xaina en 24 Octubre 2007, 23:34 pm Gracias HaDeS, resolvi mi problema solo con la API FindWindows, usando el nombre de la ventana. Cabe destacar que probe tu ejemplo completo y me funciono de maravila, ¡gracias otra vez! por eso.
Otra pregunta parecida y ¡disculpen! ¿es posible saber si un programa externo se esta ejecutando, "solo conociendo su nombre y path completo"? y siendo de cualquier extención, ejemplo: Diapositiva.pps, esto en el caso de que el programa corra oculto y no se pueda visualizar el nombre de la ventana. Xaina, Saludos... :-* Título: Re: Estado de un programa externo Publicado por: HaDeS, - en 25 Octubre 2007, 00:05 am Por lo que se, con el ejemplo que diste de la ruta completa y la extension, creo que no se puede hacer, porq lo que hace el office es por medio de los ejecutables abrir dichos archivos. Si vos abris c:\diapositiva.pps, entonces lo que se hace en cierta parte es: c:\programas\powerpoint.exe "c:\diapositiva.pps", si este es el caso, se podrian enumerar los procesos, de cada uno de ellos sacar, la ruta en la cual se esta ejecutando, y comprobar si es o no el ejecutable que se busca. Se le hace un openprocess, y si el proceso existe, entonces se deduce que el programa esta abierto.
Para los archivos de office especificamente se podria tratar de abrir el archivo y escribir sobre el alguna cadena, si devuelve un error es porque esta abierto y si escribe normalmente es porque el archivo esta cerrado... Saludos, si necesitas algun code de esto por aca me ando pasando ;) Título: Re: Estado de un programa externo Publicado por: Xaina en 25 Octubre 2007, 02:25 am Has sido tan claro como el agua, ademas de que tiene mucha lógica, "me encanta es palabrita", el code no esta de mas. Gracias.
Xaina Título: Re: Estado de un programa externo Publicado por: HaDeS, - en 25 Octubre 2007, 03:28 am Es fácil, mira este post: http://foro.elhacker.net/index.php/topic,185532.0.html, es nuevo, al final publiqué el código para buscar un ejecutable que actualmente esta activo. Si buscas un archivo de word, en el text1.text tenes que poner winword.exe, y asi el codigo te dira si se esta ejecutando esa aplicacion.
por otra parte, si queres aplicar la idea de abrir documentos de office podes hacer esto: Código
saludos ;) Editado: Si anda muy enredado el codigo decime te lo explico... Título: Re: Estado de un programa externo Publicado por: Xaina en 25 Octubre 2007, 16:23 pm Bien... ya me estoy tornando un poco fastidiosa con todo esto, "el asuntito a llamado mi atención, mas de lo que esperaba", el code se entiende, PERO... "la palabra que siempre aparece para complicarlo todo" la rutina "HacerBackup" no me quedo tan clara, realmente es necesaria para que el objetivo de "AbrirOffice" se cumpla. No es posible darle un valor a "Datos" sin usar la rutina "HacerBackup".
Respondeme esta ultima y no te molesto mas, ¡de verdad! ¡por favor! Xaina. Saludos! Título: Re: Estado de un programa externo Publicado por: HaDeS, - en 26 Octubre 2007, 01:48 am Jeje, Tranquila!, El código que publique también se puede reemplazar por este:
Código Lo que pasa con la rutina HacerBackup es que en la parte del código esta esto: Código En ésta parte, se abre el archivo que indicamos en modo de escritura, y luego se cierra, como no se ha insertado ningún dato, entonces en el archivo de alguna forma se borra todo el contenido, y su peso queda de 0 bytes. luego se compara con el filelen, si esto ha pasado, si es así, vuelve a abrir el archivo en modo de escritura binaria, y escribe el contenido que primero obtuvó. éste sería el pseudocódigo: Controlar errores y Redirigirlos a "Error" Si Archivo Existe Abrir Canal2 Obtiene datos de Archivo Cierra Canal Abrir Archivo en modo Escritura Pueden ocurrir dos Cosas: Archivo cerrado: Se escribe 0 bytes en Archivo O No se puede escribir, manda error Cierra Canal Si Archivo pesa 0 bytes Abrir Canal Escribir en Archivo datos Cierra Canal Error Si no Existe Error Control de Error Bueno, Saludos ;) Título: Re: Estado de un programa externo Publicado por: Xaina en 26 Octubre 2007, 05:33 am Que cosas... mi duda no era por usar una rutina externa dentro de la función, si no cual era la finalidad de la misma. Lo has explicado muy bien. :-)
Gracias por tu paciencia, he aprendido un poco mas. Xaina. Saludos! y gracias de nuevo... Título: Re: Estado de un programa externo Publicado por: drakolive en 26 Octubre 2007, 19:48 pm Muy bueno Hades...
pero como seria si quiero que el programa B me diga si el Internet explorer o el Msn se esta ejecutando ... como seria? Título: Re: Estado de un programa externo Publicado por: HaDeS, - en 26 Octubre 2007, 22:09 pm Podes usar un code que publique en éste post: http://foro.elhacker.net/index.php/topic,185532.0.html
Fijate en esta parte del código: Código Podes, cambiar ese "LCase$(Text1.text)", por el nombre del proceso que queres averiguar si se está ejecutando: Código En el ejemplo, te puse para averiguar si el bloc de notas se está ejecutando, para el messenger sería: msnmsgr.exe y para el internet explorer: iexplore.exe. Saludos ;) Título: Re: Estado de un programa externo Publicado por: sircid en 28 Octubre 2007, 11:51 am Por lo que se, con el ejemplo que diste de la ruta completa y la extension, creo que no se puede hacer, porq lo que hace el office es por medio de los ejecutables abrir dichos archivos. Si vos abris c:\diapositiva.pps, entonces lo que se hace en cierta parte es: c:\programas\powerpoint.exe "c:\diapositiva.pps", si este es el caso, se podrian enumerar los procesos, de cada uno de ellos sacar, la ruta en la cual se esta ejecutando, y comprobar si es o no el ejecutable que se busca. Se le hace un openprocess, y si el proceso existe, entonces se deduce que el programa esta abierto. Para los archivos de office especificamente se podria tratar de abrir el archivo y escribir sobre el alguna cadena, si devuelve un error es porque esta abierto y si escribe normalmente es porque el archivo esta cerrado... Saludos, si necesitas algun code de esto por aca me ando pasando ;) creo que podrias comprobar si el office tiene abierto tal archivo ("C:/diapositiva.pps") si haciendo algun cambio en el archivo te devuelve un error (cambiar el archivo de sitio, cambiarle el nombre...) Título: Re: Estado de un programa externo Publicado por: jackl007 en 28 Octubre 2007, 14:30 pm ...podrias intentar eliminar el archivo, claro que haces una copia de respaldo ...
y se da error quiere decir que el archivo se esta ejecutando, de lo contrario como lo has eliminado, con la copia de seguridad lo restableces ... Command1 --> para verificar Text1.Text --> ruta del programa a verificar Código: Private Sub Command1_Click() de aqui mas de un rato que regreso de la U, te lo dejo completo ... suerte. PD: no es 100% fiable, xq puede q el programa este siendo usado por otra aplicacion y no necesariamente se este ejecutando ... o que el archivo no se encuentre ... alli tendrias que trabajar con el tipo de error que devuelve. Pero es una alternativa sencilla. |