我试图获取当前用户的用户名。当我以Johnny Smith
身份登录并在没有管理员权限的情况下运行我的应用程序时,它将返回正确的用户名Johnny Smith
。但问题是,当我右键单击并选择"以管理员身份运行时,Windows将提示我为管理员登录屏幕,登录后我的应用程序返回用户名admin
,而不是用户这是当前登录的。
我试过了:
strUserLabel.Text = Environment.UserName
另外
Dim WSHNetwork = CreateObject("WScript.Network")
Dim strUser = ""
While strUser = ""
strUser = WSHNetwork.Username
End While
strUserLabel.Text = strUser
当提示为管理员时,两者都返回管理员用户名。
答案 0 :(得分:7)
在MSDN文档中,我发现他们更改了属性Environment.UserName
的定义。
获取启动当前线程的人员的用户名。
获取当前登录到Windows操作系统的人员的用户名
答案 1 :(得分:2)
我已经弄清楚了。我使用了这个函数来确定用户正在使用哪个进程。在我的代码中,我定义了查找explorer.exe
进程的用户名。
Function GetUserName() As String
Dim selectQuery As Management.SelectQuery = New Management.SelectQuery("Win32_Process")
Dim searcher As Management.ManagementObjectSearcher = New Management.ManagementObjectSearcher(selectQuery)
Dim y As System.Management.ManagementObjectCollection
y = searcher.Get
For Each proc As Management.ManagementObject In y
Dim s(1) As String
proc.InvokeMethod("GetOwner", CType(s, Object()))
Dim n As String = proc("Name").ToString()
If n = "explorer.exe" Then
Return s(0)
End If
Next
End Function
0 的索引将返回用户名
1 的索引将返回用户的域名
答案 2 :(得分:0)
我认为上面接受的答案是一种非常占用资源的方式来查找用户名。它有数百个项目的嵌套循环。在我的8GP RAM PC中,这需要2秒钟以上的时间!
怎么样:
SystemInformation.Username
,和Environment.UserDomainName
在VS2017测试
答案 3 :(得分:0)
SystemInformation.Username
在某些应用程序中不起作用。就我而言,代码以System身份运行,而explorer.exe以Daniel身份运行。 SystemInformation.Username
报告系统。