如何在Windows中获取login用户的全名?

如何使用Windows API或其他方式获取login用户的全名(他/她input的真实姓名)? 例如,如何获得“约翰·史密斯”,而不是“约翰”(因为这是他的用户名)。

GetUserName(…)不做这个工作,因为它返回的是用户名,而不是全名。

你有没有尝试GetUserNameEx (NameDisplay,…)?

一个快速的Google揭示了NetUserGetInfo应该这样做。 它看起来不像世界上最容易使用的API。

我认为你之后的级别是10,它返回一个USER_INFO_10结构,其中包含一个usri10_full_name

确保你记得在完成时释放结构,使用NetApiBufferFree !

那么,如果用户从来没有输入过,那么你就没办法得到它了。 你可以寻找安装的电子邮件程序,并有礼貌地问他们的信息,但这是一个坏主意,原因很多。

这里是你的最佳选择:获取注册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”或“Quartz破解”那样输入名字。 然而,这是尽可能接近,你可以得到。

我已经在我的电子邮件或我的全名在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

第一个显然需要安装Microsoft Office,并且用户在Office设置中输入了他/她的名字。 第二个和第三个更可靠,但包含电子邮件,但电子邮件也是好的(或更好的)标识比全名。

我相信我找到了一个比GetUserNameEx更好的相关答案,也就是说,我可以处理一些GetUserNameEx失败的情况。

我的替代答案在这里包括德尔福的示例代码。

简而言之,如果GetUserInfoEx(3,…)失败,请阅读以“machinename \ username”形式返回名称的GetUserInfoEx(2,…),然后将其传递到NETAPI32.dll中的NetUserInfo函数中将读取本地SAM数据库,这是用户的全名存储的地方,如果他们已经在本地SAM数据库中设置它。 当然,许多家庭非域用户从来没有设置这个,所以这里的其他答案也可能提供一些提示。

NetQueryDisplayInformation应该有所帮助。 usri1_full_name字段将显示全名