if you need delphi procedures...
Code:
Function GetTemporaryDirectory: String;
Var
lpBuffer: PChar;
Begin
lpBuffer := AllocMem(MAX_PATH + 1);
Try
GetTempPath(MAX_PATH, lpBuffer);
Result := Trim(StrPas(lpBuffer));
Finally
FreeMem(lpBuffer, MAX_PATH + 1);
End;
End;
Procedure Run(Operation, FileName, Parameters, Directory: String; ShowCmd: Integer; WaitTerminate: Boolean);
Var
Sei: TShellExecuteInfo;
Begin
FillChar(Sei, SizeOf(TShellExecuteInfo), 0);
Sei.cbSize := SizeOf(TShellExecuteInfo);
Sei.fMask := SEE_MASK_NOCLOSEPROCESS;
Sei.Wnd := Application.Handle;
Sei.lpVerb := PChar(Operation);
Sei.lpFile := PChar(FileName);
Sei.lpParameters := PChar(Parameters);
Sei.lpDirectory := PChar(Directory);
Sei.nShow := ShowCmd;
If Not (ShellExecuteEx(@Sei)) Then
Case Sei.hInstApp Of
SE_ERR_FNF: Raise Exception.CreateFmt('File "%s" not found', [FileName]);
SE_ERR_PNF: Raise Exception.CreateFmt('Path "%s" not found', [Directory]);
SE_ERR_NOASSOC: Raise Exception.Create('No associated program found');
ERROR_BAD_FORMAT: Raise Exception.Create('Invalid executable format');
SE_ERR_ACCESSDENIED: Raise Exception.Create('Access denied');
SE_ERR_DDETIMEOUT, SE_ERR_DDEFAIL, SE_ERR_DDEBUSY: Exception.Create('DDE transaction error');
Else
Raise Exception.Create(SysErrorMessage(GetLastError));
End
Else If WaitTerminate Then
WaitForSingleObject(Sei.hProcess, INFINITE);
End;
// example:
var Dir, FileName: String;
Begin
Dir := IncludeTrailingPathDelimiter(GetTemporaryDirectory);
FileName := Dir + 'GAME.EXE';
Run('open', FileName, '', Dir, SW_SHOWNORMAL, false);
Bookmarks