Try this , something I got together some while ago.
It's not tested all that much so don't be suprised if strange things happens =).
But hope it can help you.
;---------------------------------------------------------------
; Exec and wait by Thomas Jansson aka Spindeln
;---------------------------------------------------------------
;---------------------------------------------------------------
; Userlib
;---------------------------------------------------------------
;
;.lib "kernel32.dll"
;
;api_lstrcpy%(bank*,String$):"lstrcpyA"
;api_CreateProcess%(lpAppName%,lpCLine%,lpProcAtt%,lpThreadAtt%,bInhHan%,dwCreFlags%,lpEnv%,lpCurDir%,lpStartInf%,lpProcInf):"CreateProcessA"
;api_WaitForSingleObject%(hHandle,dwMilliseconds):"WaitForSingleObject"
;api_MulDiv%(a*,b%,c%):"MulDiv"
;api_CloseHandle(Handle%):"CloseHandle"
;
;.lib "user32.dll"
;api_FindWindow%(Class%,Title$):"FindWindowA"
;api_ShowWindow%(hWnd%,nCmdShow%):"ShowWindow"
;
;---------------------------------------------------------------
; Windows constants
;---------------------------------------------------------------
Const STARTF_USESHOWWINDOW = $00000001
Const CREATE_DEFAULT_ERROR_MODE = $04000000
Const SW_HIDE = 0
Const SW_SHOW = 5
Const INFINITE = $FFFFFFFF ; Infinite timeout
;---------------------------------------------------------------
; Ptr by Koriolis and (or) soja
;---------------------------------------------------------------
Function Ptr%(Bank)
Return api_MulDiv(Bank,1,1)
End Function
;---------------------------------------------------------------
; Exec
;---------------------------------------------------------------
Function Exec%(FileName$,CurrentDirectory$)
If FileName$ = "" Then Return False
Local STARTUPINFO = CreateBank(68)
Local PROCESS_INFORMATION = CreateBank(16)
Local FileNameBank = CreateBank(Len(FileName$))
Local FileNameStr = api_lstrcpy(FileNameBank,FileName$)
Local CurDirBank = 0
Local CurDirStr = 0
If CurrentDirectory$<>"" Then
CurDirBank = CreateBank(Len(CurrentDirectory$))
CurDirStr = api_lstrcpy(CurDirBank,CurrentDirectory$)
EndIf
PokeInt(STARTUPINFO,0,BankSize(STARTUPINFO))
PokeInt(STARTUPINFO,4,0)
PokeInt(STARTUPINFO,8,0)
PokeInt(STARTUPINFO,12,0)
PokeInt(STARTUPINFO,16,0)
PokeInt(STARTUPINFO,20,0)
PokeInt(STARTUPINFO,24,0)
PokeInt(STARTUPINFO,28,0)
PokeInt(STARTUPINFO,32,0)
PokeInt(STARTUPINFO,36,0)
PokeInt(STARTUPINFO,40,0)
PokeInt(STARTUPINFO,44,STARTF_USESHOWWINDOW)
PokeShort(STARTUPINFO,48,SW_SHOW)
PokeShort(STARTUPINFO,50,0)
PokeByte(STARTUPINFO,52,0)
PokeInt(STARTUPINFO,53,0)
PokeInt(STARTUPINFO,57,0)
PokeInt(STARTUPINFO,61,0)
If Not api_CreateProcess(0,FileNameStr,0,0,False,CREATE_DEFAULT_ERROR_MODE,0,CurDirStr,Ptr(STARTUPINFO),Ptr(PROCESS_INFORMATION))
If CurDirBank <> 0 Then FreeBank(CurDirBank)
FreeBank(FileNameBank)
FreeBank(STARTUPINFO)
FreeBank(PROCESS_INFORMATION)
RuntimeError("Could not create process")
EndIf
api_WaitForSingleObject(PeekInt(PROCESS_INFORMATION,0),INFINITE)
api_CloseHandle(PeekInt(PROCESS_INFORMATION,0))
api_CloseHandle(PeekInt(PROCESS_INFORMATION,4))
If CurDirBank <> 0 Then FreeBank(CurDirBank)
FreeBank(FileNameBank)
FreeBank(STARTUPINFO)
FreeBank(PROCESS_INFORMATION)
End Function
;---------------------------------------------------------------
; Main
;---------------------------------------------------------------
Const Title$ = "Exec test"
AppTitle(Title$)
Graphics3D(640,480,32)
hWnd = api_FindWindow(0,Title$)
If hWnd = 0 Then RuntimeError("No blitz handle sucker!")
Camera = CreateCamera()
PositionEntity(Camera,0,0,-5)
Light = CreateLight()
Cube = CreateCube()
While Not KeyDown(1)
RenderWorld()
UpdateWorld()
TurnEntity(Cube,1,1,1)
If KeyDown(59) Then
api_ShowWindow(hWnd,SW_HIDE)
Exec("notepad.exe","")
api_ShowWindow(hWnd,SW_SHOW)
EndIf
Text 0,0,"Press F1 to start notepad"
Text 0,10,"Then close notepad to get back in business"
Flip()
Wend