BOOL LogonUser( LPTSTR lpszUsername, // string that specifies the user name LPTSTR lpszDomain, // string that specifies the domain or server LPTSTR lpszPassword, // string that specifies the password DWORD dwLogonType, // specifies the type of logon operation DWORD dwLogonProvider, // specifies the logon provider PHANDLE phToken // pointer to variable to receive token handle );
应该有相应的API,一时想不起来
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type USER_INFO_1 = record usri1_name: LPWSTR; usri1_password: LPWSTR; usri1_password_age: DWORD; usri1_priv: DWORD; usri1_home_dir: LPWSTR; usri1_comment: LPWSTR; usri1_flags: DWORD; usri1_script_path: LPWSTR; end; lpUSER_INFO_1 = ^USER_INFO_1; 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';type TForm1 = class(TForm) btnRefresh: TButton; ListView1: TListView; procedure btnRefreshClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnRefreshClick(Sender: TObject); var EntiesRead: DWORD; TotalEntries: DWORD; UserInfo: lpUSER_INFO_1; lpBuffer: Pointer; ResumeHandle: DWord; Counter: Integer; NetApiStatus: LongWord; TempListItem:TListItem; begin self.ListView1.Items.Clear; ResumeHandle := 0; repeat NetApiStatus:=NetUserEnum(nil,1,0,lpBuffer,0,EntiesRead, TotalEntries,ResumeHandle); UserInfo := lpBuffer; for Counter := 0 to EntiesRead - 1 do begin TempListItem:=self.ListView1.Items.Add; TempListItem.Caption:=WideCharToString(UserInfo^.usri1_name); TempListItem.SubItems.Add(WideCharToString(UserInfo^.usri1_comment)); Inc(UserInfo); end; NetApiBufferFree(lpBuffer); until (NetApiStatus<>ERROR_MORE_DATA); end;procedure TForm1.FormCreate(Sender: TObject); var TempListColumn:TListColumn; begin self.ListView1.ViewStyle:=vsReport; self.ListView1.GridLines:=true; TempListColumn:=self.ListView1.Columns.Add; TempListColumn.Caption:='名称'; TempListColumn:=self.ListView1.Columns.Add; TempListColumn.Caption:='描述'; end;end.
LPTSTR lpszDomain, // string that specifies the domain or server
LPTSTR lpszPassword, // string that specifies the password
DWORD dwLogonType, // specifies the type of logon operation
DWORD dwLogonProvider, // specifies the logon provider
PHANDLE phToken // pointer to variable to receive token handle
);
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
USER_INFO_1 = record
usri1_name: LPWSTR;
usri1_password: LPWSTR;
usri1_password_age: DWORD;
usri1_priv: DWORD;
usri1_home_dir: LPWSTR;
usri1_comment: LPWSTR;
usri1_flags: DWORD;
usri1_script_path: LPWSTR;
end;
lpUSER_INFO_1 = ^USER_INFO_1; 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';type
TForm1 = class(TForm)
btnRefresh: TButton;
ListView1: TListView;
procedure btnRefreshClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnRefreshClick(Sender: TObject);
var
EntiesRead: DWORD;
TotalEntries: DWORD;
UserInfo: lpUSER_INFO_1;
lpBuffer: Pointer;
ResumeHandle: DWord;
Counter: Integer;
NetApiStatus: LongWord;
TempListItem:TListItem;
begin
self.ListView1.Items.Clear;
ResumeHandle := 0;
repeat
NetApiStatus:=NetUserEnum(nil,1,0,lpBuffer,0,EntiesRead,
TotalEntries,ResumeHandle);
UserInfo := lpBuffer;
for Counter := 0 to EntiesRead - 1 do
begin
TempListItem:=self.ListView1.Items.Add;
TempListItem.Caption:=WideCharToString(UserInfo^.usri1_name);
TempListItem.SubItems.Add(WideCharToString(UserInfo^.usri1_comment));
Inc(UserInfo);
end; NetApiBufferFree(lpBuffer);
until (NetApiStatus<>ERROR_MORE_DATA);
end;procedure TForm1.FormCreate(Sender: TObject);
var
TempListColumn:TListColumn;
begin
self.ListView1.ViewStyle:=vsReport;
self.ListView1.GridLines:=true;
TempListColumn:=self.ListView1.Columns.Add;
TempListColumn.Caption:='名称';
TempListColumn:=self.ListView1.Columns.Add;
TempListColumn.Caption:='描述';
end;end.