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.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.