wait for a program to finish

Nirious

Registered User.
Local time
Today, 19:27
Joined
Jul 31, 2004
Messages
106
Is there a way to launch a program from code, and let the code wait for the program to finish before access continues?

I currently fixed this by letting the user click "ok" on a messagebox to indicate when the program has finished, but that isn't very reliable, nor professional :cool:


Nirious
 
I don’t remember where I found this, Microsoft site I think.

Code:
Option Compare Database
Option Explicit
    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&
   
Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer
  
       ' Initialize the STARTUPINFO structure:
      start.cb = Len(start)
        
       ' Start the shelled application:
      ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
         NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
       
       ' Wait for the shelled application to finish:
      Do
         ReturnValue = WaitForSingleObject(proc.hProcess, 0)
         DoEvents
         Loop Until ReturnValue <> 258
      
       ReturnValue = CloseHandle(proc.hProcess)
   End Sub
      
    Sub Testing()
    ChDrive "G"
    ChDir "G:\Kronos\data"
      ExecCmd "C:\KRONOS\APPS\cswin.exe /s C:\CardSaverSingle.ks1 /sl C:\cs.log"
      MsgBox "Process Finished"
   End Sub
Hope this helps.
 

Users who are viewing this thread

Back
Top Bottom