2014-03-05 9 views
32

Wie bekomme ich den Anzeigename des Benutzers, der angemeldet ist? Nicht der Benutzername, aber der Anzeigename, wie im Screenshot unten gezeigt - und wie auf dem Startmenü in jedem Windows Vista/7 Computer zu sehen.Get Windows User Display Name

enter image description here

habe ich versucht, eine Reihe von verschiedenen Vorschlägen von anderen Fragen, aber sie alle zeigen die Benutzername, nicht die Anzeigenamen. Sie können die Ergebnisse dieser Versuche im obigen Screenshot sehen.

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 funktioniert hier gut. –

+0

nein. Die Antwort gibt es nicht, was ich wollte. – Codemunkeee

+0

In welchem ​​Kontext läuft der Code mit 'Environment.UserName'? Ist es in ASP.Net, Windows-Dienst, normale Desktop-App, etc ... – JaredPar

Antwort

52

Sie UserPrincipal.DisplayName verwenden sollten:

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName 

Um dies zu tun, müssen Sie und fügen Sie einen Verweis auf System.DirectoryServices.AccountManagement.dll von Ihrem Projekt.

+0

Endlich eine richtige Antwort auf meine Frage. Danke für die Bearbeitung meiner Frage auch !! : D – Codemunkeee

+1

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

+6

Ich habe diesen Ansatz verwendet, aber in der realen Welt sehe ich den Getter für UserPrincipal.Current werfen eine PrincipalServerDownException. Ich glaube, der Fall ist, wenn der aktuelle Benutzer mit einem Domänenkonto angemeldet ist, aber der Verzeichnisserver nicht kontaktiert werden kann, z. B. wenn ein Laptop aus dem Netzwerk entfernt wurde. Verwenden Sie diese Methode mit Vorsicht, es scheint nicht zuverlässig zu sein! –

-2

Versuchen Sie, diese

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

danke .. aber es funktioniert nicht: (( – Codemunkeee

+3

@Codemunkeee) Bei der Beschreibung eines Problems ist es sinnlos, zu sagen, "es funktioniert nicht." Um Hilfe zu erhalten, haben Sie um uns zu sagen, was schief läuft. Sehen Sie eine Ausnahme? Wenn ja, was ist die Ausnahme? Ist das Ergebnis unerwartet? –

+0

Sie können sich auf meine Frage oben beziehen.Wie Sie sehen, gibt es eine andere Ausgabe, I Ich werde den Code erneut bearbeiten, um all die Dinge aufzulisten, die ich gemacht habe. – Codemunkeee

-2

Die System.DirectoryServices-Assembly muss zuerst importiert werden. System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName Es gibt den Anzeigenamen zurück, der im Startmenü angezeigt wird (Nicht Systemanmelde-ID). Danke Tim.