Pagina 1 di 1

capire quando un processo è terminato

MessaggioInviato: lun dic 12, 2005 5:53 pm
da pol86
Ciao a tutti , qualcuno sa dirmi come faccio a capire quando un processo, nel mio caso il prompt di dos è terminato.
Io apro il prompt da vb con questa riga di comando:
Shell "cmd /c netsh -c interface dump >c:\prova.txt", vbNormalFocus
e vorrei indicare nella form dove è contenuta tale riga, il suo stato, ossia se è ancora in esecuzione(e quindi mettere un mex del tipo "wait") o è già terminata.
Vi ringrazio per la vostra attenzione ciao

MessaggioInviato: lun dic 12, 2005 9:22 pm
da morskott
non puoi fare una join su quel processo?

MessaggioInviato: mar dic 13, 2005 11:29 am
da Silver Black
API WaitForSingleObject:

Dichiarazioni:

Codice: Seleziona tutto
Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessID As Long
    dwThreadID As Long
End Type
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
    ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName _
    As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal _
    lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags _
    As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
    lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) _
    As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&


Utilizzo:
Codice: Seleziona tutto
    Dim Proc As PROCESS_INFORMATION
    Dim Start As STARTUPINFO
    Dim Ret As Long
   
    Start.cb = Len(Start)
   
    'Shell the Application:
    Ret = CreateProcessA(0&, cmdLine, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, Proc)
   
    'Wait for the shelled application to finish:
    Ret = WaitForSingleObject(Proc.hProcess, INFINITE)
    Ret = CloseHandle(Proc.hProcess)


Esempio:
Codice: Seleziona tutto
Private Sub Form_Load()

    ExecCmd "notepad.exe"
    MsgBox "Appplicazione terminata!!!", vbExclamation, "Shell&Wait"

End Sub


Ciao!