Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: pandemonio en 12 Octubre 2006, 19:53 pm



Título: Duda con API FindWindow
Publicado por: pandemonio en 12 Octubre 2006, 19:53 pm
El problema es el siguiente; en la aplicación que desarrollé utilizo Shell para ejecutar un comando, con esto, se abre la consola de MS-DOS, y comienza a ejecutarse el proceso, cuando dicho proceso finaliza, la ventana se cierra, mi duda es ¿cómo puedo saber cuándo una ventana que estaba abierta se cerró? Sé cuándo una ventana aparece, más no sé cuándo desaparece, se me han ocurrido ideas con el control Timer, pero este consumiría muchos recursos. ¿Alguna idea?


Título: Re: Duda con API FindWindow
Publicado por: CeLaYa en 13 Octubre 2006, 14:37 pm
si lo que quieres hacer es esperar a que tu aplicacion espere a que termine la ejecucion de la ventana del DOS, te paso un tip, que aqui mismo me dieron:


 en tu programa en lugar de usar el shell
usa esta funcion

 ExeEspera "comando ms-dos"

Private Function ExeEspera(COMANDO As String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(COMANDO, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Pausa 100
    Loop While RetVal = STILL_ACTIVE
End Function


Título: Re: Duda con API FindWindow
Publicado por: pandemonio en 16 Octubre 2006, 19:00 pm
si lo que quieres hacer es esperar a que tu aplicacion espere a que termine la ejecucion de la ventana del DOS, te paso un tip, que aqui mismo me dieron:


 en tu programa en lugar de usar el shell
usa esta funcion

 ExeEspera "comando ms-dos"

Private Function ExeEspera(COMANDO As String)
    Dim hProcess As Long
    Dim RetVal As Long
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(COMANDO, vbMinimizedNoFocus))
    Do
        GetExitCodeProcess hProcess, RetVal
        DoEvents
        Pausa 100
    Loop While RetVal = STILL_ACTIVE
End Function


Gracias CeLaYa por el código, pero le hace falta algunas cosas, como funciones y APIS, con las APIS no hay problema, pero sí con las funciones, pero no importa, ya solucioné el problema de otra forma (sencilla y que no consume muchos recursos). Esta fue la solución:

Código:

Dim Success%

Private Function FileExists%(fname$)
    On Local Error Resume Next
    Dim ff%
    ff% = FreeFile
    Open fname$ For Input As ff%
    If Err Then
        FileExists% = False
    Else
        FileExists% = True
    End If
    Close ff%
End Function

Private Sub Command1_Click()
1
    'Se ejecuta el primer proceso
    '
    '
    '
   
    '
    '
    'Se ejecuta el proceso de MS-DOS
    '
    '
    '
   
    'Se prepara la función para comprobar la existencia de Archivo.txt
    Success% = FileExists(App.Path & "\Archivo.txt")
   
    'En caso de ser verdadero
    If Success% = True Then
        'Se ejecuta el proceso que deseo
    Else
'        Se regresa al primer proceso hasta que se encuentre el archivo
        GoTo 1
    End If
    'Se continua con otro proceso
End Sub


Obviamente no está completo el código, pero con esto cualquiera se da una idea de que ya pude llevar a cabo lo que quería. Muchas gracias por tu ayuda.

No estaría mal que publicaras el código completo que mostraste al principio, quizás me sea más útil que lo que encontré.


Título: Re: Duda con API FindWindow
Publicado por: Hendrix en 16 Octubre 2006, 19:18 pm
Puedes usar la API WaitForSingleObject

aki hay info:

http://www.elguille.info/VB/ejemplos/vb_stdout.htm

http://support.microsoft.com/default.aspx?scid=kb;es;551122

http://www.google.es/search?hs=xiV&hl=es&client=firefox-a&rls=org.mozilla%3Aes-ES%3Aofficial&q=waitforsingleobject+VB&btnG=B%C3%BAsqueda&meta=lr%3D

Salu2



Título: Re: Duda con API FindWindow
Publicado por: pandemonio en 17 Octubre 2006, 20:47 pm
Puedes usar la API WaitForSingleObject

aki hay info:

http://www.elguille.info/VB/ejemplos/vb_stdout.htm

http://support.microsoft.com/default.aspx?scid=kb;es;551122

http://www.google.es/search?hs=xiV&hl=es&client=firefox-a&rls=org.mozilla%3Aes-ES%3Aofficial&q=waitforsingleobject+VB&btnG=B%C3%BAsqueda&meta=lr%3D

Salu2



Gracias por lo enlaces, muy buena información.