找出当前用户的用户名 – 当多个用户login时

“用户A”login我的应用程序将Environment.Username识别为“用户A”

现在在Windows中,我点击切换用户…“用户B”login

“用户A”进程仍在运行由“用户A”运行的应用程序仍然说Environment.Username是“用户A”我希望应用程序识别当前login的用户(当前活动用户)是“用户B”

我该怎么做呢?

有没有这样的事情当前活跃的用户,因为可以有多个(终端服务器)

您可以使用GetSystemMetrics(SM_REMOTESESSION)来检查这是一个“本地”会话,并通过WTSGetActiveConsoleSessionId来获取控制台会话的会话标识(当前登录的用户在您调用它时)您可以使用WTSRegisterSessionNotification在此更改时得到通知。 ProcessIdToSessionId(GetCurrentProcess(),…)会得到你的进程所在的会话ID。最后,WTSQuerySessionInformation()会得到关于特定会话的信息。

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT UserName FROM Win32_ComputerSystem"); foreach (ManagementObject queryObj in searcher.Get()) { loggedOnUserName = queryObj["UserName"].ToString(); loggedOnUserName = loggedOnUserName.Substring(loggedOnUserName.LastIndexOf('\\') + 1); } 

当“用户B”登录时,在“用户A”下运行的应用程序在loggedOnUserName中报告“用户B”。

这就是我正在寻找的。 不管怎么说,多谢拉。

你绝对不会在这个级别上找到信息 – 你想去更低级别的API来登录登录的用户(其中​​可以有多个)。

就像在Windows XP中使用Visual Basic .NET或Visual Basic 2005编写支持快速用户切换功能的应用程序一样?

另请参见快速用户切换的体系结构