2009-08-07 6 views
1

"사용자 A"에 로그온 할 때 내 응용 프로그램은 Windows에서 이제 "사용자 A"현재 사용자의 사용자 이름을 찾기 - 여러 사용자가

로 Environment.Username을 인식 에 기록됩니다, 나는 사용자 전환을 클릭합니다 .. .

에 "사용자 B의"로그 프로세스 여전히 "사용자 A"여전히 Environment.Username 말한다에 의해 운영 응용 프로그램을 실행하는

"A의 사용자"는 "사용자 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"를보고합니다.

그게 내가 찾고있는 것입니다. 어쨌든 고마워, .

1

당신은 분명히 그 수준에서 정보를 찾는 것을 못마땅합니다 - 당신은 로그온 한 사용자 (둘 이상있을 수 있음)를 대상으로하는 하위 수준의 API로 가고 싶습니다.

같은 것을 How to write an application that supports the Fast User Switching feature by using Visual Basic .NET or Visual Basic 2005 in Windows XP과 같습니까?

이 될 수 있기 때문에 현재 활성 사용자 같은 것은 없습니다 또한 Architecture of Fast User Switching

4

참조 (터미널 서버) 당신은 GetSystemMetrics (SM_REMOTESESSION)를 사용할 수 있습니다

이 "로컬 있는지 확인하기 위해 하나 이상의 "세션 및 WTSGetActiveConsoleSessionId를 사용하여 콘솔 세션의 세션 ID를 가져옵니다 (사용자가 호출 할 때 현재 로그온 한 사용자). WTSRegisterSessionNotification을 사용하면이 변경 사항을 알릴 수 있습니다. ProcessIdToSessionId (GetCurrentProcess(), ...)는 프로세스가 속한 세션 ID를 가져옵니다. 마지막으로 WTSQuerySessionInformation()은 특정 세션에 대한 정보를 얻습니다.

+1

+1 : 정확합니다. 단일 세션 또는 프로세스 (예 : 사용자 가장을 수행하는 서버 프로세스) 내에서도 여러 사용자 ID가있을 수 있습니다. – Richard

+0

Ugh, 커뮤니티 위키가 어떻게 든 확인되었습니다. 오 잘 – Anders

관련 문제