Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
FreePascal / Lazarus
|
AW: Passwort automatisch eingeben
12. Aug 2020, 15: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.
|
|
Zitat
|