自动向系统添加123用户,密码123,属于users组,支持拖放可以从资源管理器拖放文件到文本框,也可以通过浏览按钮选择要运行的文件,单击"运行",在帐户123运行指定程序
作者JJony E-Mail:jzj_jony@126.com
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,jwawintype,JwaWinBase, StdCtrls,ComCtrls,ShellAPI, cmpNetGroup,
cmpNetUser;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
OpenDialog1: TOpenDialog;
Label1: TLabel;
Label2: TLabel;
NetUser1: TNetUser;
NetLocalGroup1: TNetLocalGroup;
NetLocalGroup2: TNetLocalGroup;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function IsAdmin:boolean;//判断当前用户是否为administrators组用户
var
strl:tstringlist;
i:integer;
username:array[0..MAX_PATH] of char;
userl:cardinal;
begin
result:=false;
userl:=sizeof(username);
getusername(@username,userl);
strl:=tstringlist.Create;
try
form1.NetLocalGroup2.GetMembers(strl);
for i:=0 to strl.Count-1 do
begin
if lowercase(strl[i])=lowercase(strpas(username)) then
begin
result:=true;
exit;
end;
end;
finally
strl.Free;
end;
end;
function CheckPlatformAdmin: boolean;//判断是否运行于WinNT以上系统的管理员级帐户下
begin
if (Win32Platform = VER_PLATFORM_WIN32_NT) and IsAdmin then
result:=true
else
result:=false;
end;
procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);//消息转换
var
WMD: TWMDropFiles;
begin
if Msg.message = WM_DROPFILES then
begin
// MessageBeep(0);
WMD.Msg := Msg.message;
WMD.Drop := Msg.wParam;
WMD.Unused := Msg.lParam;
WMD.Result := 0;
WMDropFiles(WMD);
Handled := TRUE;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
si: StartupInfoW;
pif: PROCESS_INFORMATION;
res: Bool;
str:string;
spath:array[0..MAX_PATH] of widechar;
begin
str:=edit1.Text;
if not fileexists(str) then exit;
stringtowidechar(str,@spath,sizeof(spath));
si.cb := SizeOf(startupinfoW); //填充StartupInfoW结构
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWDEFAULT;
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := 'JJony';
res := CreateProcessWithLogonW('123', 'JZJ', '123', LOGON_WITH_PROFILE,//以123帐户运行程序
@spath, nil
, CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
if booltostr(res) = '0' then
begin
showmessage('运行出错,请与作者联系'+#13#10+'E-Mail:jzj_jony@126.com');//运行失败提示
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
edit1.Text:=OpenDialog1.FileName;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
slist:tstringlist;
i:integer;
u123:boolean;
begin
if not CheckPlatformAdmin then
begin
showmessage('对不起!本程序只能运行于WinNT以上系统的管理员级帐户下,点[确定]关闭程序');
application.Terminate;
end;
u123:=false;
slist:=tstringlist.Create;
try
NetLocalGroup1.GetMembers(slist);//判断123帐户时候存在,不存在就添加
for i:=0 to slist.Count-1 do
if slist[i]='123' then
u123:=true;
if u123=false then
begin
NetUser1.CreateAccount('程序运行测试环境帐户','123');
NetLocalGroup1.AddMember('123');
end;
finally
slist.Clear;
slist.Free;
end;
DragAcceptFiles(edit1.Handle,True);//程序接受拖拽
Application.OnMessage := AppOnMessage;
end;
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);//处理拖拽消息
var
buffer: array[0..MAX_PATH] of Char;
begin
with Msg do
begin
DragQueryFile(Drop,0, Buffer, sizeof(buffer));//取得拖拽的第一个文件名
edit1.Text:=StrPas(Buffer);
DragFinish(Drop);
end;
end;
end.