“用户A”登录 我的应用程序在Windows识别Environment.Username“用户A”找出当前用户的用户名 - 当多个用户登录
现在,我点击切换用户.. 。在
“用户B”日志“用户A”进程仍在运行 申请由“用户A”还称Environment.Username运行是“用户A” 我想申请认识到当前登录用户(当前活动用户)是“用户B”
我该怎么做?
“用户A”登录 我的应用程序在Windows识别Environment.Username“用户A”找出当前用户的用户名 - 当多个用户登录
现在,我点击切换用户.. 。在
“用户B”日志“用户A”进程仍在运行 申请由“用户A”还称Environment.Username运行是“用户A” 我想申请认识到当前登录用户(当前活动用户)是“用户B”
我该怎么做?
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,以使登录的用户(其中可以有多个)可用。
有作为当前活动的用户,因为不可能有这样的事不止一个(终端服务器)
您可以使用GetSystemMetrics的(SM_REMOTESESSION),以检查是否这是一个“本地“会话和WTSGetActiveConsoleSessionId以获取控制台会话的会话标识(当前登录的用户在您调用它时)您可以使用WTSRegisterSessionNotification在此更改时收到通知。 ProcessIdToSessionId(GetCurrentProcess(),...)会让你获得你的进程所在的会话ID。最后,WTSQuerySessionInformation()会为你提供关于特定会话的信息。
+1:的确如此。即使在单个会话或进程中(例如,服务器进程在进行用户模拟),也可能有多个用户标识。 – Richard 2009-08-07 13:33:28
呃,社区维基以某种方式得到检查,哦 – Anders 2009-08-07 13:35:37