如何获取Windows 7中当前登录的用户名(即物理登录到我正在启动的程序正在运行的控制台的用户)。
例如,如果我以“MainUser”身份登录并运行我的控制台应用程序(将显示已登录的用户名)作为“SubUser”,则程序仅返回“SubUser”作为当前登录的用户。 / p>
我使用以下两种技术来获取用户名。两者都没有让我得到我想要的东西。
System.Environment.GetEnvironmentVariable("USERNAME")
System.Security.Principal.WindowsIdentity.GetCurrent().User;
但请注意,无论运行此脚本的用户帐户如何,此VBScript代码都会返回登录的用户名:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set compsys_arr = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each sys in compsys_arr
Wscript.Echo "username: " & sys.UserName
Next
任何方式都可以在C#中使用?
答案 0 :(得分:6)
我认为只需将WMI调用转换为c#就可以了。
ConnectionOptions oConn = new ConnectionOptions();
System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\\\localhost", oConn);
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select * from Win32_ComputerSystem");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
foreach (ManagementObject oReturn in oReturnCollection) {
Console.WriteLine(oReturn["UserName"].ToString().ToLower());
}
答案 1 :(得分:5)
我认为你必须走P / Invoke路线。您需要找出您的进程在哪个WindowStation中运行,然后确定该WindowStation的所有者。我认为没有用于确定这些内容的.NET API。
您需要查看的Win32 API,可能需要GetProcessWindowStation和GetUserObjectSecurity才能找到所有者。
答案 2 :(得分:2)
Altough我不明白你是否想要获取用户名,登录系统的用户名或运行控制台的用户名 - 也许你可以尝试使用System.Environment.UserName - MSDN声称它显示登录的用户名。
答案 3 :(得分:1)
您需要会话的用户名。您可以致电ProcessIdToSessionId找到您的会话ID。然后使用WTSQuerySessionInformation找出用户名。