如何获取登录用户的显示名称?不是用户名,而是显示名称,如下面的屏幕截图所示 - 以及任何Windows Vista/7计算机的开始菜单中显示的名称.

我从其他问题尝试了一堆不同的建议,但它们都显示了用户名,而不是显示名称.您可以在上面的屏幕截图中看到这些尝试的结果.
Imports System.Security.Principal
Imports System.Threading
Imports System.IO
Imports System
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox("1: " & System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString & vbCrLf & _
"2: " & Environment.UserDomainName & vbCrLf & _
"3: " & WindowsIdentity.GetCurrent().Name & vbCrLf & _
"4: " & Thread.CurrentPrincipal.Identity.Name & vbCrLf & _
"5: " & Environment.UserName & vbCrLf & _ …Run Code Online (Sandbox Code Playgroud) 考虑在Active Directory中为用户设置的以下属性:

在我的winforms应用程序中,我想显示当前登录并使用该应用程序的用户的显示名称.我该如何检索这些信息?
如何获取本地Windows用户列表(仅显示在Windows登录屏幕中的用户)
我尝试了很多使用Windows Principle库和WMI Select命令的方法.我一直得到管理员,访客和其他一些奇怪的帐户(VUSRNEIL-DELL,$ HOMEGROUPUSER,ASPNET等等)
登录屏幕上不会显示这3个用户帐户.如何区分这些用户类型?
我在C#中编码
如何使用Windows API或其他方式获取登录用户的全名(他/她输入的真实姓名)?例如,如何获取“ John Smith”,而不是“ john”(因为这是他的用户名)。
GetUserName(...)不会执行此操作,因为它返回用户名,而不是全名。
我发现在Windows 7 64位上,在具有域名的机器上,GetUserNameEx(3,....)应该将扩展名称格式DisplayName(== 3)放入缓冲区,工作正常.
但是,它不适用于Windows 7 32位,工作组上的虚拟机,而不是域,它返回ERROR_NONE_MAPPED.
例如,你如何以适用于Windows的方式阅读该人的友好名称"Fred Smith"?GetUserNameEx明显被破坏了.实际上,没有破坏,我被告知,只是不打算为不在域上的用户工作.我想知道为什么不存在本地SAM信息?并且似乎没有其他直接API来执行此操作.
如果Windows为您提供ERROR_NONE_MAPPED,那么您运气不佳,可能不在域上.所以这不是API的友好区域.
[看起来有可能,调用NetUserGetInfo,读取本地SAM信息,当不在域上时,但您需要首先知道用户名和密码,然后它可能会查找友好名称.]