Im Prinzip stimmt es sozusagen schon, aber die IFDEFs können weg, wenn man gleich den passenden Typ verwendet.
compilerabhängig:
Delphi-Quellcode:
function RunAs(
const Handle: Hwnd;
const Path, Params:
string): Boolean;
var
sei: TShellExecuteInfo;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize := SizeOf(sei);
sei.Wnd :=
Handle;
sei.fMask := SEE_MASK_FLAG_DDEWAIT
or SEE_MASK_FLAG_NO_UI;
sei.lpVerb := '
runas';
sei.nShow := SW_SHOWNORMAL;
sei.lpFile := PChar(Path);
sei.lpParameters := PChar(Params);
Result := ShellExecuteEx(@sei);
end;
String ist ein compilerabhängiger Typ, wie z.B. Integer (früher mal 16 Bit und dann 32 Bit ... allerdings wurde der Integer für 64 Bit-CPUs eingefroren und dafür was Neues erfunden, welches in Delphi sich NativeInt nennt)
fest, immer als
ANSI: (das Gleiche bei
Unicode, mit Wide/W)
Delphi-Quellcode:
function RunAs(
const Handle: Hwnd;
const Path, Params: AnsiString): Boolean;
var
sei: TShellExecuteInfoA;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize := SizeOf(sei);
sei.Wnd :=
Handle;
sei.fMask := SEE_MASK_FLAG_DDEWAIT
or SEE_MASK_FLAG_NO_UI;
sei.lpVerb := '
runas';
sei.nShow := SW_SHOWNORMAL;
sei.lpFile := PAnsiChar(Path);
sei.lpParameters := PAnsiChar(Params);
Result := ShellExecuteExA(@sei);
end;
Windows bietet für fast alle WinAPIs zwei Versionen der Funktionen an (
ShellExecuteExA und
ShellExecuteExW)
und Delphi stellt schon immer diese APIs auch als compilerabhängige Variante an. (
ShellExecuteEx als Alias für ShellExecuteExA oder ShellExecuteExW ... vor D2009 und ab D2009)