Delphi-Quellcode:
function WinExecAndWait_32(FileName:
string; Visibility: Integer; bWait: Boolean = False): Longword;
var { by Pat Ritchey }
zAppName:
array[0..512]
of Char;
zCurDir:
array[0..255]
of Char;
WorkDir:
string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(
nil,
zAppName,
// pointer to command line string
nil,
// pointer to process security attributes
nil,
// pointer to thread security attributes
False,
// handle inheritance flag
CREATE_NEW_CONSOLE
or // creation flags
NORMAL_PRIORITY_CLASS,
nil,
//pointer to new environment block
nil,
// pointer to current directory name
StartupInfo,
// pointer to STARTUPINFO
ProcessInfo)
// pointer to PROCESS_INF
then Result := WAIT_FAILED
else
begin
if bWait
then
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
{ WinExecAndWait32 }
das ist die funktion die ich immer verwende, und die ist auch kompatibel mit späteren windows versionen!!!
um sie zu verwenden musst du unter uses windows einbinden
aufrufen kannst du die function so:
WinExecAndWait_32('c:\sin.exe +set game 2015', 1, False);
wäre eine version mit parameter
WinExecAndWait_32('c:\sin.exe', 1, False);
und diese wäre ohne parameter!!
die 1 steht für die sichtbarkeit des gestarten programms
und true/false steht bei der function für das warten auf das gestartete programm