2014-03-05 177 views
32

如何獲取登錄用戶的顯示名稱?不是用戶名,而是顯示名稱,如以下屏幕截圖所示 - 並在任何Windows Vista/7計算機的開始菜單中顯示。獲取Windows用戶顯示名稱

enter image description here

我嘗試了一堆其他問題不同的意見,但他們都表現出了用戶名,而不是顯示名稱。您可以在上面的截圖中看到這些嘗試的結果。

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 
+1

Environment.UserName在這裏工作正常。 –

+0

沒有。答案並不是我想要的。 – Codemunkeee

+0

在什麼情況下使用'Environment.UserName'運行代碼?它是在ASP.Net,Windows服務,正常的桌面應用程序等... – JaredPar

回答

52

你應該使用UserPrincipal.DisplayName

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName 

要做到這一點,你需要從到System.DirectoryServices.AccountManagement.dll添加引用您的項目。

+0

最後,我的問題的正確答案。感謝您編輯我的問題! :d – Codemunkeee

+1

http://stackoverflow.com/a/6692790/3184380 – Shell

+6

我用這個方法,但在現實世界中,我看到了UserPrincipal.Current投擲PrincipalServerDownException,吸氣。我相信這種情況是當前用戶使用域帳戶登錄時,但無法聯繫目錄服務器,例如從筆記本電腦拔出網絡時。謹慎使用此方法,它似乎不可靠! –

-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); 
    } 
} 
+1

感謝..但它不工作:(( – Codemunkeee

+3

@Codemunkeee當描述一個問題,說:「它不工作」是沒用的。爲了得到對你有幫助告訴我們什麼錯誤,你看到一個例外嗎?如果是這樣,什麼是例外?是結果是否出乎預料?怎麼會這樣? –

+0

你可以參考我的問題之上。正如你可以看到它返回一個不同的輸出,我我將再次編輯代碼以列出我所做的所有事情。 – Codemunkeee

-2

System.DirectoryServices程序集必須先導入。 System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName 它返回在開始菜單(不是系統登錄ID)中顯示的顯示名稱。 謝謝蒂姆。

相關問題