delphi列举用户

delphi列举用户



unit Unit1;

interface

uses
  
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs, StdCtrls, ExtCtrls,shellapi;

type
   TForm1 =
class(TForm)
     Button1: TButton;
     Button2: TButton;
     Edit1:
TEdit;
     Label1: TLabel;
     Label2: TLabel;
     Edit2:
TEdit;
     Label3: TLabel;
     Edit3: TEdit;
     Button3:
TButton;
     Button4: TButton;
     Label4: TLabel;
     Edit4:
TEdit;
     Button7: TButton;
     Button8: TButton;
     ListBox1:
TListBox;
     Button6: TButton;
     procedure Button1Click(Sender:
TObject);
     procedure Button2Click(Sender: TObject);
     procedure
Button3Click(Sender: TObject);
     procedure Button4Click(Sender:
TObject);
     procedure Button7Click(Sender: TObject);
     procedure
Button8Click(Sender: TObject);
     procedure Button6Click(Sender:
TObject);
   private
     { Private declarations }
   public
     {
Public declarations }
   end;

var
   Form1: TForm1;
   type
USER_INFO_1=record
     usri1_name:pwidechar;
    
usri1_password:pwidechar;
     usri1_password_age:dword;
    
usri1_priv:dword;
     usri1_home_dir:pwidechar;
    
usri1_comment:pwidechar;
     usri1_flags:dword;
    
usri1_script_path:pwidechar;
   end;
   buffer=^USER_INFO_1;

  
type GROUP_USERS_INFO_1=record
      grui1_name:pwidechar;
     
grui1_attributes:DWORD;
   end;
   buffer1=^GROUP_USERS_INFO_1;

  
type LOCALGROUP_MEMBERS_INFO_3=record
    
lgrmi3_domainandname:pwidechar;
   end;
  
buffer2=^LOCALGROUP_MEMBERS_INFO_3;


implementation

{$R
*.dfm}
//加用户
function
NetUserAdd(Server:PWideChar;Level:DWORD;Buf:pointer;ParmError:dword):LongInt;stdcall;
external 'netapi32.dll'
//删除用户
function
NetUserDel(Server:PWideChar;username:pwidechar):LongInt;stdcall; external
'netapi32.dll';
//改用户密码
function
NetUserChangePassword(domainname:PWideChar;username:pwidechar;oldpassword:pwidechar;newpassword:pwidechar):LongInt;stdcall;
external 'netapi32.dll';
//设置用户信息
function
NetUserSetInfo(Servername:PWideChar;Username:pWidechar;Level:DWORD;Buf:pointer;ParmError:dword):LongInt;stdcall;
external 'netapi32.dll';
//设置用户的组信息(无用)
//function
NetUserSetGroups(Servername:PWideChar;Username:pWidechar;Level:DWORD;Buf:pointer;num_entries:DWORD):LongInt;stdcall;
external 'netapi32.dll';
//在指定的组中加用户(无用)
//function
NetGroupAddUser(Servername:PWideChar;Groupname:PWideChar;Username:PWideChar):LongInt;stdcall;
external 'netapi32.dll';
//获得nt用户
function NetUserEnum(ServerName:
PWideChar;Level,Filter: DWord;var Buffer: Pointer;PrefMaxLen: DWord;var
EntriesRead,TotalEntries, ResumeHandle: DWord): LongWord; stdcall; external
'netapi32.dll';
function NetApiBufferFree(pBuffer: PByte): LongInt;
stdcall;   external'netapi32.dll';
//在本地指定的组中加用户
function
NetLocalGroupAddMembers(servername:PWideChar;LocalGroupName:pwidechar;Level:DWORD;Buf:pointer;membercount:dword):LongInt;stdcall;
external 'netapi32.dll'
//在本地指定的组中删除用户
function
NetLocalGroupDelMembers(servername:PWideChar;LocalGroupName:pwidechar;Level:DWORD;Buf:pointer;membercount:dword):LongInt;stdcall;
external 'netapi32.dll'


{得到计算机名}
function
GetComputerNameD:string;
var
   Buffer: array[0..MAX_COMPUTERNAME_LENGTH]
of Char;
   BSize:Cardinal;
begin
   BSize:=SizeOf(Buffer);
   if  
GetComputerName(Buffer,BSize) then
   begin
     Result:=Buffer;
  
end
   else
   begin
     Result:='';
  
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
buf:buffer;
     var
i:longint;
begin
getmem(buf,sizeof(USER_INFO_1));
with buf^
do
begin
   usri1_name:=StringToOleStr(edit1.text);          //string to
pwidechar
   usri1_password:=StringToOleStr(edit2.text);      //string to
pwidechar
//   usri1_name:='123';
//   usri1_password:='123456';
  
usri1_password_age:=0;                           //此内容被忽略
  
usri1_priv:=1;                                   //用户等级     建立的时候必须为user
  
usri1_home_dir:=nil;
   usri1_comment:=nil;                             
//注释     515:禁用   513:使用
   usri1_flags:=0513;
  
usri1_script_path:=nil;
end;
netuseradd(nil,1,pointer(buf),0);
freemem(buf);
end;

procedure
TForm1.Button2Click(Sender: TObject);
var
username:pwidechar;
begin
username:=StringToOleStr(edit1.text);
NetUserDel(nil,username);
end;

procedure
TForm1.Button3Click(Sender:
TObject);
begin
NetUserChangePassword(nil,StringToOleStr(edit1.text),StringToOleStr(edit2.text),StringToOleStr(edit3.text));
end;

procedure
TForm1.Button4Click(Sender: TObject);
var buf:buffer;
    
i:longint;
begin
//好象没啥大用处
getmem(buf,sizeof(USER_INFO_1));
with
buf^ do
begin
//   usri1_name:=StringToOleStr(edit1.text);         
//由于是修改用户信息,此内容被忽略
   usri1_password:=StringToOleStr(edit2.text);     
//string to pwidechar
   usri1_password_age:=0;                          
//此内容被忽略
   usri1_priv:=2;                                   //用户等级
0:guest,1:user(不能选),2:adminstrator
   usri1_home_dir:=nil;
  
usri1_comment:=nil;                               //注释
  
usri1_flags:=515;
  
usri1_script_path:=nil;
end;
NetUserSetInfo(nil,StringToOleStr(edit1.text),1,pointer(buf),0);
freemem(buf);
end;


procedure
TForm1.Button7Click(Sender: TObject);
var buf:buffer2;
    
i:longint;
begin
getmem(buf,sizeof(LOCALGROUP_MEMBERS_INFO_3));
with
buf^ do
begin
   
lgrmi3_domainandname:=StringToOleStr(GetComputerNameD+'\'+edit1.text);
end;
i:=NetLocalGroupaddMembers(nil,StringToOleStr(edit4.text),3,pointer(buf),1);
freemem(buf);
end;

procedure
TForm1.Button8Click(Sender: TObject);
var EntiesRead: DWORD;
    
TotalEntries: DWORD;
     UserInfo: buffer;
     lpBuffer:
Pointer;
     ResumeHandle: DWord;
     Counter: Integer;
    
NetApiStatus: LongWord;
begin
   ResumeHandle := 0;
   repeat
//    
NetApiStatus := NetUserEnum(PChar('\\NT-Domain'), 1, 0, lpBuffer, 0,EntiesRead,
TotalEntries, ResumeHandle);
     NetApiStatus := NetUserEnum(nil, 1, 0,
lpBuffer, 0, EntiesRead, TotalEntries, ResumeHandle);
     UserInfo :=
lpBuffer;
     for Counter := 0 to EntiesRead - 1 do
     begin
      
listbox1.items.add(WideCharToString(UserInfo^.usri1_name)+'-->'+WideCharToString(UserInfo^.usri1_comment)+'-->'+floattostr(UserInfo^.usri1_priv)+'-->'+floattostr(UserInfo^.usri1_flags));
      
Inc(UserInfo);
     end;
     NetApiBufferFree(lpBuffer);    //frees the
memory that NetApiBufferAllocate allocates
   until (NetApiStatus <>
ERROR_MORE_DATA);
end;

procedure TForm1.Button6Click(Sender:
TObject);
var buf:buffer2;
    
i:longint;
begin
getmem(buf,sizeof(LOCALGROUP_MEMBERS_INFO_3));
with
buf^ do
begin
   
lgrmi3_domainandname:=StringToOleStr(GetComputerNameD+'\'+edit1.text);
end;
i:=NetLocalGroupdelMembers(nil,StringToOleStr(edit4.text),3,pointer(buf),1);
freemem(buf);
end;

end.
原文地址:https://www.cnblogs.com/edrp/p/2520478.html