获取 Windows 用户显示名称

Posted

技术标签:

【中文标题】获取 Windows 用户显示名称【英文标题】:Get Windows User Display Name 【发布时间】:2014-04-06 22:06:29 【问题描述】:

如何获取登录用户的显示名称?不是用户名,而是显示名,如下面的屏幕截图所示 - 在任何 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 & _
               "6: " & My.User.Name & vbCrLf &
                "7: " & My.Computer.Name)

    End Sub

End Class

【问题讨论】:

Environment.UserName 在这里工作正常。 @Codemunkeee 为什么那里的答案“不是你想要的”?它会产生不正确的输出吗? 当然你必须隐藏对话框下唯一重要的代码。 如果您的应用程序在另一个用户下运行,您将获得另一个用户名。 How do I get the AD Display Name of the currently logged in user 的可能重复项 【参考方案1】:

你应该使用UserPrincipal.DisplayName:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName

为此,您需要在项目中添加对System.DirectoryServices.AccountManagement.dll 的引用。

【讨论】:

我使用了这种方法,但在现实世界中,我看到 UserPrincipal.Current 的 getter 抛出 PrincipalServerDownException。我相信这种情况是当前用户使用域帐户登录,但无法联系目录服务器,例如笔记本电脑已从网络中拔出。谨慎使用此方法,似乎不靠谱! Roger Sanders 是对的,谨慎使用这个变量。在我的情况下,网络上有很长的延迟,所以这个方法会挂起一段时间。 Unable to cast object of type 'System.DirectoryServices.AccountManagement.GroupPrincipal' to type 'System.DirectoryServices.AccountManagement.UserPrincipal'. 【参考方案2】:

试试这个

http://msdn.microsoft.com/en-us/library/sfs49sw0(v=vs.110).aspx

using System.IO;
using System;
using System.Security.Principal;
class Program

    static void Main()
    
        Console.WriteLine(WindowsIdentity.GetCurrent().Name);
    

【讨论】:

@Codemunkeee 在描述问题时,说“它不工作”是没有用的。为了获得帮助,您必须告诉我们出了什么问题。你看到一个例外吗?如果是这样,有什么例外?结果出乎意料吗?怎么样? 你可以参考我上面的问题。如您所见,它返回不同的输出,我将再次编辑代码以列出我所做的所有事情.. @Codemunkeee 你能试试上面的代码并粘贴你得到的控制台输出吗 还是一样的兄弟 :( 好的.. 等等.. 我还在编辑代码和所有我用过的东西【参考方案3】:

这包含在 System.DirectoryServices 命名空间中,因此您需要将其添加到 using 部分。

然后您可以使用返回Display NameSystem.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName。这通常显示在“开始”菜单中。

【讨论】:

以上是关于获取 Windows 用户显示名称的主要内容,如果未能解决你的问题,请参考以下文章

在Windows 10 C#UWP通用Windows应用程序中获取UserName

如何获取以常用词开头的所有 Windows 服务名称?

如何在 Windows 中获取 COM 端口的友好名称?

Windows phone 7:获取存储在库图片中的照片名称?

bat脚本获取电脑上所有windows服务的信息?

如何使用 Windows 集成身份验证强制显示登录窗口