Hmm.. I don't know where those "3D"s came from :/ Just remove them all and you should be fine. Make sure you are using the windows unit.
Chris > -----Original Message----- > From: vss [mailto:vss@;vss.co.nz] > Sent: Monday, 11 November 2002 3:44 p.m. > To: Multiple recipients of list delphi > Subject: RE: [DUG]: Execute and wait > > > 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/ > --------------------------------------------------------------------------- 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/