Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#9

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 00:49
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 (MSDN-Library durchsuchenShellExecuteExA und MSDN-Library durchsuchenShellExecuteExW)
und Delphi stellt schon immer diese APIs auch als compilerabhängige Variante an. (MSDN-Library durchsuchenShellExecuteEx als Alias für ShellExecuteExA oder ShellExecuteExW ... vor D2009 und ab D2009)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Okt 2018 um 00:56 Uhr)
  Mit Zitat antworten Zitat