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.
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