elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Estado de un programa externo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Estado de un programa externo  (Leído 4,430 veces)
Xaina

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Estado de un programa externo
« 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!!!


En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Estado de un programa externo
« Respuesta #1 en: 24 Octubre 2007, 22:17 pm »

Para dos aplicaciones hechas en visual podes hacer esto:
Código
  1. Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
  2.  
  3. Private Sub Form_Load()
  4. CreateWindowEx 0&, "STATIC", "CADENAAA QUE IDENTIFIQUE EL FORM", 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, 0&
  5. End Sub
  6.  
esa seria la aplicacion A, la aplicacion B tendria este code:
Código
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2.  
  3. Private Sub Form_Load()
  4. If FindWindow(vbNullString, ByVal "CADENAAA QUE IDENTIFIQUE EL FORM") Then
  5.        MsgBox "La aplicacion A esta activa"
  6. End If
  7. End Sub
  8.  
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 ;)


En línea

Xaina

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Estado de un programa externo
« Respuesta #2 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... :-*
En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Estado de un programa externo
« Respuesta #3 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 ;)
En línea

Xaina

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Estado de un programa externo
« Respuesta #4 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
En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Estado de un programa externo
« Respuesta #5 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
  1. Dim Datos$
  2.  
  3. Private Sub Command1_Click()
  4. Datos = ""
  5. MsgBox AbrirOffice("c:\hola.doc")
  6. End Sub
  7.  
  8. Private Function AbrirOffice(archivo$) As String
  9. On Error GoTo Error
  10. Dim Canal%
  11. If Dir$(archivo) <> "" Then
  12. HacerBackup archivo
  13. Canal = FreeFile
  14. Open archivo For Output As Canal
  15. Close Canal
  16. If FileLen(archivo) = 0 Then
  17.    Canal = FreeFile
  18.    Open archivo For Binary Access Write As Canal
  19.    Put #Canal, LOF(Canal) + 1, Datos
  20.    Close #Canal
  21. End If
  22. AbrirOffice = "El archivo " & archivo & " existe, pero no esta abierto."
  23. Else
  24. AbrirOffice = "El archivo " & archivo & " no existe."
  25. End If
  26.  
  27. Error:
  28. If Err.Description <> "" Then
  29. MsgBox Err.Description
  30.    AbrirOffice = "El archivo " & archivo & " se encuentra abierto."
  31. End If
  32. End Function
  33.  
  34. Private Sub HacerBackup(archivo$)
  35. Dim Canal2%
  36. Canal2 = FreeFile
  37. Open archivo For Binary Access Read As Canal2
  38. Datos = Space(LOF(Canal2))
  39. Get #Canal2, , Datos
  40. Close #Canal2
  41. End Sub
  42.  

saludos ;)

Editado: Si anda muy enredado el codigo decime te lo explico...
« Última modificación: 25 Octubre 2007, 03:30 am por HaDeS, - » En línea

Xaina

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Estado de un programa externo
« Respuesta #6 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!
« Última modificación: 25 Octubre 2007, 18:15 pm por Xaina » En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Estado de un programa externo
« Respuesta #7 en: 26 Octubre 2007, 01:48 am »

Jeje, Tranquila!, El código que publique también se puede reemplazar por este:
Código
  1. Private Sub Command1_Click()
  2. Datos = ""
  3. MsgBox AbrirOffice("c:\hola.doc")
  4. End Sub
  5.  
  6. Private Function AbrirOffice(archivo$) As String
  7. On Error GoTo Error
  8. Dim Canal%, Canal2%, Datos$
  9. If Dir$(archivo) <> "" Then
  10.  
  11. Canal2 = FreeFile
  12. Open archivo For Binary Access Read As Canal2
  13. Datos = Space(LOF(Canal2))
  14. Get #Canal2, , Datos
  15. Close #Canal2
  16.  
  17. Canal = FreeFile
  18. Open archivo For Output As Canal
  19. Close Canal
  20. If FileLen(archivo) = 0 Then
  21.    Canal = FreeFile
  22.    Open archivo For Binary Access Write As Canal
  23.    Put #Canal, LOF(Canal) + 1, Datos
  24.    Close #Canal
  25. End If
  26. AbrirOffice = "El archivo " & archivo & " existe, pero no esta abierto."
  27. Else
  28. AbrirOffice = "El archivo " & archivo & " no existe."
  29. End If
  30.  
  31. Error:
  32. If Err.Description <> "" Then
  33.    AbrirOffice = "El archivo " & archivo & " se encuentra abierto."
  34. End If
  35. End Function
  36.  
Lo que pasa con la rutina HacerBackup es que en la parte del código esta esto:
Código
  1. Open archivo For Output As Canal
  2. Close Canal
  3.  
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 ;)
En línea

Xaina

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Estado de un programa externo
« Respuesta #8 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...


   
En línea

drakolive

Desconectado Desconectado

Mensajes: 141


Ver Perfil
Re: Estado de un programa externo
« Respuesta #9 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?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cambiar return de Api usada por un programa externo
Programación Visual Basic
Psyke1 1 1,240 Último mensaje 15 Enero 2013, 18:47 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines