如何取得用户的显示名称

hn_boy_79 2008-07-16 08:26:36
在知道一个用户名的前提下,如果用DELPHI通过活动目录查询到它的显示名称呢?

比如我知道一个用户名'test', 它的显示名称为'工程部.test',如何通过DELPHI写程序来得到这个显示的名称呢?

...全文
225 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
blz_wowar 2009-10-22
  • 打赏
  • 举报
回复
我发现我的电脑上一个exe能使用这个办法获取到display name
但是另外一个就不行
真是OOXX了,都不知道原因。。。

我的电脑有域账号
okmnji79513 2008-08-05
  • 打赏
  • 举报
回复
有没有高手解答下?
okmnji79513 2008-08-05
  • 打赏
  • 举报
回复
NetUserEnum和NetUserGetInfo是不是只能查 本地 的账号啊?

我将上面两个函数的第一个参数换成别人的主机名,NetUserEnum返回空,NetUserGetInfo报错。怎么回事?
okmnji79513 2008-08-04
  • 打赏
  • 举报
回复
试试 关注
hn_boy_79 2008-08-04
  • 打赏
  • 举报
回复
function NetUserGetInfo(servername: PWideChar; username: PWideChar;
level: DWORD; var bufptr: Pointer): DWORD; stdcall; external 'netapi32.dll' name 'NetUserGetInfo';
function NetApiBufferFree(buffer : Pointer) :Integer; stdcall; external 'netapi32.dll';

这样就可以了。
hn_boy_79 2008-07-22
  • 打赏
  • 举报
回复
谢谢各位回复,我去试试。

okmnji79513 2008-07-17
  • 打赏
  • 举报
回复
有没有人指点下,o(∩_∩)o...
okmnji79513 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hn_boy_79 的回复:]
对对,就这个意思。因为提取出账号名称是英文的看起来不直观,要显示名称才好, 就像QQ号码一样,要看昵称。
[/Quote]
这样的话,水品有限,帮不上忙。关注。
hn_boy_79 2008-07-16
  • 打赏
  • 举报
回复
对对,就这个意思。因为提取出账号名称是英文的看起来不直观,要显示名称才好, 就像QQ号码一样,要看昵称。
okmnji79513 2008-07-16
  • 打赏
  • 举报
回复
是不是域账号是'test',这个域账号的名称是'工程部.test' ?这个是不是要通过域控来取域账号的名称(个人意见)?

不是很懂,等待高手。
hn_boy_79 2008-07-16
  • 打赏
  • 举报
回复
不是啦,是账号的显示名称, 一般域用户名称是英文的,但是显示名称会设置显示中文的。
jmh521 2008-07-16
  • 打赏
  • 举报
回复
不太明白。。。UP。。。应该很简单。。
okmnji79513 2008-07-16
  • 打赏
  • 举报
回复
'工程部.test' 是不是 计算机名 啊?
okmnji79513 2008-07-16
  • 打赏
  • 举报
回复
我用第一种方式得到结果:'Administrator 管理计算机(域)的内置帐户
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.
monkely 2008-07-16
  • 打赏
  • 举报
回复
procedure TForm1.BitBtn1Click(Sender: TObject);
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;

这段可能更准确
monkely 2008-07-16
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
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.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧