General |
6.23 Avviare un file eseguibile ed attenderne la fine. |
AntoGal |
'dichiarazioni Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" _ (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CloseHandle Lib "kernel32"_ ( ByVal hObject As Long) As Long Private Const SYNCHRONIZE = &H100000 Private Const INFINITE = &HFFFF Public Sub RunAppAndWait(FileName As String, WindowsStyle As Integer) 'Autore: AntoGal 'avvia un'applicazione e sospende il thread chiamante finchè 'il processo non termina 'Accetta: ' FileName = nome del file eseguibile ' WindowsStyle = modalità di visualizzazione finestra ' (costante di Access, vedi la funzione Shell) Dim hProg As Long hProg = Shell(FileName, WindowsStyle) If hProg Then WaitOnProgram (hProg) 'chiama solo se tutto ok End Sub Private Sub WaitOnProgram(idProg As Long) 'codice valido solo per Win32 Dim hProc As Long, iret As Long hProc = OpenProcess(SYNCHRONIZE, False, idProg) If hProc <> vbNull Then iret = WaitForSingleObject(hProc, INFINITE) CloseHandle hProc End If End Sub'la routine si usa per esempio così: RunAppAndWait "notepad.exe", vbNormalFocus Nota: Se si richiama un file BAT, e si desidera che la finestra DOS venga chiusa automaticamente, inserire il comando CLS come ultima riga nel BAT. |