2009-08-07 86 views
1

“用户A”登录 我的应用程序在Windows识别Environment.Username“用户A”找出当前用户的用户名 - 当多个用户登录

现在,我点击切换用户.. 。在

“用户B”日志

“用户A”进程仍在运行 申请由“用户A”还称Environment.Username运行是“用户A” 我想申请认识到当前登录用户(当前活动用户)是“用户B”

我该怎么做?

回答

3
  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”。

这就是我一直在寻找的。 无论如何感谢。

4

有作为当前活动的用户,因为不可能有这样的事不止一个(终端服务器)

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

+1

+1:的确如此。即使在单个会话或进程中(例如,服务器进程在进行用户模拟),也可能有多个用户标识。 – Richard 2009-08-07 13:33:28

+0

呃,社区维基以某种方式得到检查,哦 – Anders 2009-08-07 13:35:37