繁体   English   中英

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

[英]How to get logged-in user's full name in windows?

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

GetUserName(...)不执行该作业,因为它返回用户名,而不是全名。

你试过GetUserNameEx (NameDisplay,...)吗?

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

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

使用NetApiBufferFree确保您记得在完成后释放结构!

NetQueryDisplayInformation应该有所帮助。 字段usri1_full_name将给出全名

好吧,如果用户从未输入过,那么你无法获得它。 您可以查找已安装的电子邮件程序并礼貌地询问他们的信息,但出于多种原因这是一个坏主意。

这是您的最佳镜头:获取用户在注册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”。 然而,这是尽可能接近的。

我在Windows注册表中找到了一些地方用我的电子邮件或我的全名:

  1. HKEY_CURRENT_USER \\ Software \\ Microsoft \\ Office \\ Common \\ UserInfo具有包含我的全名的UserName
  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,...)失败,请读取GetUserInfoEx(2,...),它返回“machinename \\ username”形式的名称,然后您可以将其传递到NETAPI32.dll中的NetUserInfo函数,将读取本地SAM数据库,如果用户的全名已存储在本地SAM数据库中,则该数据库将存储该数据库。 当然,许多家庭非域用户从未设置过这个,所以这里的其他答案也可能提供一些提示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM