Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#24

AW: Passwort automatisch eingeben

  Alt 12. Aug 2020, 14:56
Er öffnet den Prozess als den angegebenen Benutzer. Wir benötigen das für Remote-Prozesse und läuft. Hab folgendes in meinem Delphi Ordner noch gefunden, was funktionierte, bevor ich auf Lazarus geschwenkt bin:
Delphi-Quellcode:
type
  function CreateProcessAsLogon(const User, PW, Application, param, CmdLine: WideString): DWORD;
//...
  
  function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: LPWSTR; dwLogonFlags: dword; lpApplicationName,
  lpCommandLine: LPWSTR; dwCreationFlags: dword; lpEnvironment: pointer; lpCurrentDirectory: LPWSTR; lpStartupInfo:
  PStartUpInfoW; lpProcessInfo: PProcessInformation): boolean; stdcall; external 'advapi32.dll';

implementation

//Prozess als bestimmten Benutzer starten (Hilfsaufruf)
procedure startasUser(exe, param : string);
var
  User : WideString;
  PW : WideString;
  err : DWORD;
begin
  User := 'Benutzer';
  PW := 'Passwort';
  err := CreateProcessAsLogon(User, PW, exe, param, '');
  if err <> 0 then
    ShowMessage(SysErrorMessage(err));
end;

//Prozess als bestimmten Benutzer starten
function CreateProcessAsLogon(const User, PW, Application, param, CmdLine: WideString): DWORD;
var
  ws : WideString;
  si : TStartupInfoW;
  pif : TProcessInformation;
begin
  ZeroMemory(@si, sizeof(si));
  si.cb := sizeof(si);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := 1;

  if CmdLine = 'then
    ws := Application
  else
    ws := Application + ' "' + CmdLine + '"';

  SetLastError(0);
  SI.cb := SizeOf(TStartupInfo);
  if CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), 0, nil, PWideChar(ws), CREATE_DEFAULT_ERROR_MODE, nil, PChar(param), @si, @pif) then
  begin
    sleep(500);
    if PIf.dwProcessId > 0 then
    begin
      AppPID := PIf.dwProcessId;
      CloseHandle(PIf.hProcess);
      CloseHandle(PIf.hThread);
    end;
  end;
  Result := GetLastError;
end;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat