Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 01: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)
$2B or not $2B

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