現在のユーザーのユーザー名を取得しようとしています。 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
管理者としてプロンプトが表示されたら、どちらも管理者ユーザー名を返します。
私はそれを理解しました。ユーザーが使用しているプロセスを判別するこの関数を使用しました。私のコードでは、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
Index of はsernameを返します
Index of 1はdomain name ofuserを返します
上記の受け入れられた答えは、ユーザー名を見つけるための非常にリソースを消費する方法だと思います。何百ものアイテムを含むネストされたループがあります。私の8GP RAM PCでは、これには2秒以上かかります!
どうですか:
SystemInformation.Username
、およびEnvironment.UserDomainName
VS2017でテスト済み
SystemInformation.Username
特定のアプリケーションでは機能しません。私の場合、コードはSystemとして実行されていますが、Explorer.exeはDanielとして実行されています。 SystemInformation.Username
レポートシステム。