如何使用Windows API或其他方式获取登录用户的全名(他/她输入的名称)?例如,如何获得“John Smith”,而不是“john”(因为这是他的用户名)。
GetUserName(...)不能完成这项工作,因为它会返回用户名,而不是全名。
答案 0 :(得分:4)
您是否尝试GetUserNameEx(NameDisplay,...)?
答案 1 :(得分:3)
Google快速透露,NetUserGetInfo应该这样做。它看起来不像世界上最容易使用的API。
我认为你所追求的等级是10,它返回USER_INFO_10结构,其中包含usri10_full_name
。
确保您记得在完成后使用NetApiBufferFree!
释放结构答案 2 :(得分:0)
好吧,如果用户从未输入过,那么你无法获得它。您可以查找已安装的电子邮件程序并礼貌地询问他们的信息,但出于多种原因,这是一个坏主意。
这是您的最佳镜头:获取用户在注册Windows副本时输入的名称。这是在注册表中。 Windows版本的确切位置不同,但在最新版本中,它位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
(在Windows 95/98 / ME中,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
)。
在那里,你会找到RegisteredOwner,这是应该输入名字的地方。显然,如果这是一台公司计算机而且机器是由IT设置的,那么在那里找到标准化的公司字符串是很常见的。当然,很多人会在那里输入名字,如“Joe Sixpack”或“Cracked by Quartex”。然而,这是尽可能接近的。
答案 3 :(得分:0)
我在Windows注册表中找到了一些地方的电子邮件或我的全名:
第一个显然需要安装Microsoft Office,并且用户已在Office设置中输入了他/她的名字。第二个和第三个更可靠,但包含电子邮件,但电子邮件也比完整名称更好(或更好)。
答案 4 :(得分:0)
我相信我找到了一个比GetUserNameEx更好的相关答案,也就是说,我可以处理GetUserNameEx失败的一些情况。
我的另一个答案是here,包括Delphi的示例代码。
简而言之,如果GetUserInfoEx(3,...)失败,请读取GetUserInfoEx(2,...),它返回“machinename \ username”形式的名称,然后您可以将其传递到NETAPI32中的NetUserInfo函数。 dll,如果已将其设置在本地SAM数据库中,则将读取存储用户全名的本地SAM数据库。当然,许多家庭非域用户从未设置过这个,所以这里的其他答案也可能提供一些提示。
答案 5 :(得分:0)
NetQueryDisplayInformation应该有所帮助。 字段usri1_full_name将给出全名