在知道一个用户名的前提下,如果用DELPHI通过活动目录查询到它的显示名称呢?比如我知道一个用户名'test', 它的显示名称为'工程部.test',如何通过DELPHI写程序来得到这个显示的名称呢?
解决方案 »
- DBEdit如何获取在另一窗体DBGrid的值?
- 请问那里能找到李维的分布式开发三步曲或者其它比较精典的分布式开发方面的书和资料
- 过年快放假了,开心,放点分之9
- 如何用enter代替tab键!!!!
- 用过神龙卡BUFFER开发VOD系统的人请进!
- 在AdoQuery中执行Insert时出错!!!
- 菜鸟问题——怎样实现两个Table的同步(BDE+Access)
- popmenu
- 请问如何才能让窗口显示以后自动的执行窗口里的一个按钮事件?
- 请问Delphi里面的SQL Builder在什么菜单里面啊?
- 如何用delphi来打开com1口??
- 哪位能详解一下“1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。”
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, 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)
BitBtn1: TBitBtn;
RichEdit1: TRichEdit;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var
EntiesRead: DWORD;
TotalEntries: DWORD;
UserInfo: lpUSER_INFO_1;
lpBuffer: Pointer;
ResumeHandle: DWord;
Counter: Integer;
NetApiStatus: LongWord;
userName,userdest:string;
begin
ResumeHandle := 0;
repeat //枚举帐户
NetApiStatus := NetUserEnum(nil, 1, 0, lpBuffer, 0, EntiesRead,TotalEntries, ResumeHandle);
//如果要指定域名,将NETUSERENUM里的第一个参数NIL 替换成域计算机名即可;
UserInfo := lpBuffer;
for Counter := 0 to EntiesRead - 1 do
begin
userName:= WideCharToString(UserInfo^.usri1_name);//获取用户名
userdest:=WideCharToString(UserInfo^.usri1_comment);//获取用户描述
RichEdit1.Lines.Add(userName + '_' +userdest);
end;
until (NetApiStatus <> ERROR_MORE_DATA);//枚举下一下用户
NetApiBufferFree(lpBuffer);//释放分配的空间
end;end.
var
UserInfo: lpUSER_INFO_1;
lpBuffer: Pointer;
userName,userdest:string;
begin
NetUserGetInfo(nil,'administrator',1,lpbuffer);
//如果要指定域名,将NETUSERENUM里的第一个参数NIL 替换成域计算机名即可;
userinfo := lpbuffer;
userName:= WideCharToString(UserInfo^.usri1_name);//获取用户名
userdest:=WideCharToString(UserInfo^.usri1_comment);//获取用户描述
RichEdit1.Lines.Add(userName + '_' +userdest); NetApiBufferFree(lpBuffer);//释放分配的空间
end;这段可能更准确
Guest 供来宾访问计算机或访问域的内置帐户
SQLDebugger This user account is used by the Visual Studio .NET Debugger'没有域的其他用户啊,要指定域主机名?第二种:加了
function NetUserGetInfo(
Server: PWideChar;
UserName:PWideChar;
Level: DWORD;
Buf: Pointer):Longint;stdcall;external 'netapi32.dll';
还报错,EAccessViolation with message 'Access Violation at address 0040403f in module 'xxx.exe'.Read of address 8BD88B53'.Process stopped.
level: DWORD; var bufptr: Pointer): DWORD; stdcall; external 'netapi32.dll' name 'NetUserGetInfo';
function NetApiBufferFree(buffer : Pointer) :Integer; stdcall; external 'netapi32.dll';这样就可以了。
但是另外一个就不行
真是OOXX了,都不知道原因我的电脑有域账号