unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} function CreateProcessWithLogonW( lpUsername: PWideChar; // user's name lpDomain: PWideChar; // user's domain lpPassword: PWideChar; // user's password dwLogonFlags: DWORD; // logon option lpApplicationName: PWideChar; // executable module name lpCommandLine: PWideChar; // command-line string dwCreationFlags: DWORD; // creation flags lpEnvironment: Pointer; // new environment block lpCurrentDirectory: PWideChar; // current directory name const lpStartupInfo: TStartupInfo; // startup information var lpProcessInformation: TProcessInformation // process information ):BOOL; stdcall; external ADVAPI32; const LOGON_WITH_PROFILE = $00000001; procedure TForm1.Button1Click(Sender: TObject); var supinfo: STARTUPINFO; procinfo: PROCESS_INFORMATION; begin ZeroMemory(@supinfo, SizeOf(STARTUPINFO)); supinfo.cb :=sizeof(supinfo); supinfo.dwFlags :=STARTF_USESHOWWINDOW; supinfo.wShowWindow :=SW_SHOWDEFAULT; if not CreateProcessWithLogonW( 'Administrator', nil, 'password', LOGON_WITH_PROFILE, StringToOleStr(ParamStr(0)), nil, CREATE_DEFAULT_ERROR_MODE, nil, nil, supinfo, procinfo) then RaiseLastOSError; end; end. |