【问题标题】:In VB.NET, how do you get a list of all users in the current Windows machine?在 VB.NET 中,如何获取当前 Windows 机器中所有用户的列表?
【发布时间】:2009-01-27 21:28:31
【问题描述】:

在 VB.NET 中,如何获取当前 Windows 机器中所有用户的列表?

【问题讨论】:

    标签: .net windows vb.net


    【解决方案1】:

    您可以使用需要一点解析的注册表,但它确实有效。这是一些代码:

    C#

     RegistryKey userskey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList");
            foreach (string keyname in userskey.GetSubKeyNames())
            {
                    using (RegistryKey key = userskey.OpenSubKey(keyname))
                    {
                        string userpath = (string)key.GetValue("ProfileImagePath");
                        string username = System.IO.Path.GetFileNameWithoutExtension(userpath);
                        Console.WriteLine("{0}", username);
                    }
            }
    

    VB

    Dim userskey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList")
    For Each keyname As String In userskey.GetSubKeyNames()
        Using key As RegistryKey = userskey.OpenSubKey(keyname)
            Dim userpath As String = DirectCast(key.GetValue("ProfileImagePath"), String)
            Dim username As String = System.IO.Path.GetFileNameWithoutExtension(userpath)
            Console.WriteLine("{0}", username)
        End Using
    Next
    

    【讨论】:

      【解决方案2】:

      这是Nathan W's的改进版答案:

      Function GetUsers() As List(Of String)
          Dim ret As New List(Of String)
          Dim userskey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList")
          For Each keyname As String In userskey.GetSubKeyNames()
              Using key As RegistryKey = userskey.OpenSubKey(keyname)
                  Dim userpath As String = DirectCast(key.GetValue("ProfileImagePath"), String)
                  Dim username As String = System.IO.Path.GetFileNameWithoutExtension(userpath)
                  'Console.WriteLine("{0}", username)
                  ret.Add(username)
              End Using
          Next
          If Not ret.Contains("Guest") Then ret.Add("Guest")
          ret.Sort()
      
          Return ret
      End Function
      

      此函数从注册表返回当前域/机器上所有用户的列表。对于他的回答,它无法识别我系统上的来宾帐户。不知道为什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2011-01-06
        相关资源
        最近更新 更多