如何在Windows中登录用户的全名?

时间:2010-08-09 09:09:10

标签: .net c++ windows winapi

如何使用Windows API或其他方式获取登录用户的全名(他/她输入的名称)?例如,如何获得“John Smith”,而不是“john”(因为这是他的用户名)。

GetUserName(...)不能完成这项工作,因为它会返回用户名,而不是全名。

6 个答案:

答案 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注册表中找到了一些地方的电子邮件或我的全名:

  1. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ UserInfo 包含用户名,其中包含我的全名。
  2. KEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer 包含登录用户名,其中包含我的电子邮件。
  3. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon 包含 DefaultUserName ,其中包含我的电子邮件。
  4. 第一个显然需要安装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将给出全名