ShellandWait ayuda para entener

Iniciado por andrer03, 22 Enero 2009, 19:06 PM

0 Miembros y 2 Visitantes están viendo este tema.

andrer03

miren estoy haciendo un programa que necesito ejecutar un archivo bat
quiero que cuando acabe lo que e programado en el archivo bat ejecutar un boton
automaticamente estuve leyendo algo pero no logro que espere que acabe y ejecute el boton si algun puede ayudar :)

Karcrack

Un ejemplo simple:
Código (vb) [Seleccionar]
Option Explicit


'Funciones del api
'''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long, _
   ByVal bInheritHandle As Long, _
   ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
  (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long

'Constantes
'''''''''''''''''''''''''''''''''''''''''''''''''''
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STATUS_PENDING = &H103&

Private Sub Command1_Click()

   Call Ejecutar_shell("notepad.exe")

End Sub


' Recibe el argumento de la línea de comandos para pasarle al Shell
Private Sub Ejecutar_shell(programa As String)

    Dim handle_Process As Long
    Dim id_process As Long
    Dim lp_ExitCode As Long
   
    ' Abre el proceso con el shell
    id_process = Shell(programa, 1)
   
    ' handle del proceso
    handle_Process = OpenProcess(PROCESS_QUERY_INFORMATION, False, id_process)
   
    ' Mientras lp_ExitCode = STATUS_PENDING, se ejecuta el do
    Do

        Call GetExitCodeProcess(handle_Process, lp_ExitCode)
       
        DoEvents
   
    Loop While lp_ExitCode = STATUS_PENDING
   
    ' fin
    ' Cierra
    Call CloseHandle(handle_Process)

    MsgBox "Se cerró el " & programa, vbInformation

End Sub


Private Sub Form_Load()
    Command1.Caption = " Ejecutar programa y esperar a que cierre "
End Sub

http://www.recursosvisualbasic.com.ar/htm/listado-api/205-abrir-programa-esperar-a-que-termine.htm

Estoy seguro de que no tendras ningun problema para adaptarlo ;D

Saludos ;D

andrer03

#2
no me sirve por que lo que ejecuto es un archivo bat aunque con el archivo bat ejecuto un .exe

lo que quiro decirle es que pere a que el exe se cierre y ejecute el boton

cassiani

Ejecuta el exe directamente usando el code que te deja Karcrack...

andrer03

#4
bien pero en el archivo bat tengo escrita alunas funciones que relaiza el .exe :(
si fuera solo cuestion de ejecutar solo el exe no tendria problema
el archivo bat contiene esto


tool.exe "path" -summary -chapters > tempfile.txt

Karcrack

Cita de: andrer03 en 22 Enero 2009, 20:41 PM
bien pero en el archivo bat tengo escrita alunas funciones que relaiza el .exe :(
si fuera solo cuestion de ejecutar solo el exe no tendria problema
el archivo bat contiene esto


tool.exe "path" -summary -chapters > tempfile.txt

Ejecuta el bat de esta forma:

Código (vb) [Seleccionar]
Call Ejecutar_shell("cmd /C Nombre.bat")

Pero creo que no necesitarias crear un bat para esas cosas :xD

Saludos ;D

andrer03

okay thx
utilice este ejemplo y funciona creando un modulo

http://www.davidsuarez.es/2008/08/ejecutar-un-programa-con-shell-y-esperar-a-que-termine-en-visual-basic/


Private Sub Command1_Click() 
    Dim retval As Variant
retval = ShellandWait("" & App.Path & "\" & "file.bat")
Command4_Click
End Sub


lo que pasa es que no se como decirle que el archivo bad lo ejecute oculto
añadi esto al final pero me da un error :( a ver si alguien sabe por que sera y ya no molesto mas .
Citar
, vbHide

cassiani

En la línea
CitarlInst = Shell(sExeName, vbMinimizedNoFocus)

reemplazas la constante "vbMinimizedNoFocus" por "vbHide".


Karcrack

Cita de: andrer03 en 23 Enero 2009, 02:38 AM
no funciona :(
Sin comillas :¬¬

PD:Por si acaso... He visto cosas peores :P