Hi Chris. I tried your code, but it failed here cb :=3D SizeOf(TStartupInfo);
Jeremy -----Original Message----- From: "Chris Milham" <[EMAIL PROTECTED]> To: Multiple recipients of list delphi <[EMAIL PROTECTED]> Date: Mon, 11 Nov 2002 15:13:44 +1300 Subject: RE: [DUG]: Execute and wait > Try this one. I have just wrapped a version of "WinExecAndWait32". This > = > one DEFINITELY waits correctly. > HTH > > Chris > > procedure ExecuteProgram(sPath: string; bWait: Boolean); > function WinExecAndWait32(Path: PChar; Visibility: Word; > Timeout: DWORD): integer; > var > WaitResult: integer; > StartupInfo: TStartupInfo; > ProcessInfo: TProcessInformation; > begin > FillChar(StartupInfo, SizeOf(TStartupInfo), 0); > with StartupInfo do > begin > cb :=3D SizeOf(TStartupInfo); > dwFlags :=3D STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; > { you could pass sw_show or sw_hide as parameter: } > wShowWindow :=3D visibility; > end; > if CreateProcess(nil, path, nil, nil, False, > NORMAL_PRIORITY_CLASS, nil, nil, > StartupInfo, ProcessInfo) then > begin > WaitResult :=3D WaitForSingleObject(ProcessInfo.hProcess, = > timeout); > { timeout is in miliseconds or INFINITE if > you want to wait forever } > result :=3D WaitResult; > end > else > { error occurs during CreateProcess see help for details } > result :=3D GetLastError; > end; > begin > SetCurrentDir(ExtractFilePath(Application.ExeName)); {Set this so = > relative paths will work} > if not FileExists(sPath) then begin > DlgError('Unable to run "' + sPath + '"'+NL+'The program cannot be > = > found.'); > end else begin > if bWait then begin > WinExecAndWait32(PChar(sPath), SW_SHOW, INFINITE); > end else begin > WinExecAndWait32(PChar(sPath), SW_SHOW, 0); > end; > end; > end; > > > > > -----Original Message----- > > From: vss [mailto:vss@;vss.co.nz] > > Sent: Monday, 11 November 2002 3:08 p.m. > > To: Multiple recipients of list delphi > > Subject: [DUG]: Execute and wait > >=20 > >=20 > > Hi All. > > I have a bit of code that does an execute and waits for the app. > to=20 > > close. > > What I want to do is execute a game and know when its=20 > > finished, BUT when=20 > > I use my code, it starts to execute the app, but then it stops and=20 > > returns an error code of zero which means its finished...BUT it > never=20 > > started. > > This is teh code I use. anyone got anything better? > >=20 > > Jeremy > >=20 > >=20 > > function TfrmMain.WinExecAndWait32(Path: PChar; Visibility: Word):=20 > > integer; > > var Msg: TMsg; > > lpExitCode: cardinal; > > StartupInfo: TStartupInfo; > > ProcessInfo: TProcessInformation; > > begin > > FillChar(StartupInfo, SizeOf(TStartupInfo), 0); > > with StartupInfo do > > begin > > cb :=3D SizeOf(TStartupInfo); > > dwFlags :=3D STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; > > wShowWindow :=3D visibility; {you could pass sw_show or sw_hide > as = > > > parameter} > > end; > >=20 > > if CreateProcess(nil, path, nil, nil, False, > NORMAL_PRIORITY_CLASS,=20 > > nil, nil, StartupInfo, > > ProcessInfo) then > > begin > > repeat > > while PeekMessage(Msg, 0, 0, 0, pm_Remove) do > > begin > > if Msg.Message =3D wm_Quit then Halt(Msg.WParam); > > TranslateMessage(Msg); > > DispatchMessage(Msg); > > end; > > GetExitCodeProcess(ProcessInfo.hProcess,lpExitCode); > > until lpExitCode <> Still_Active; > >=20 > > with ProcessInfo do {not sure this is necessary but seen=20 > > in in some=20 > > code elsewhere} > > begin > > CloseHandle(hThread); > > CloseHandle(hProcess); > > end; > > Result :=3D 0; {success} > > end else Result :=3D GetLastError; > > end; > >=20 > > -------------------------------------------------------------- > > ------------- > > New Zealand Delphi Users group - Delphi List -=20 > > [EMAIL PROTECTED] > > Website: http://www.delphi.org.nz > > To UnSub, send email to: [EMAIL PROTECTED]=20 > > with body of "unsubscribe delphi" > > Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/ > >=20 > ----------------------------------------------------------------------- > ---- > New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED] > Website: http://www.delphi.org.nz > To UnSub, send email to: [EMAIL PROTECTED] > with body of "unsubscribe delphi" > Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/ --------------------------------------------------------------------------- New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED] Website: http://www.delphi.org.nz To UnSub, send email to: [EMAIL PROTECTED] with body of "unsubscribe delphi" Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/