원격 데스크탑에서 프로그램이 실행 중인지 확인
-
03-07-2019 - |
문제
내 프로그램이 원격 데스크탑 (터미널 서비스)에서 언제 실행되는지 판단 할 수있는 방법이 있습니까?
원격 데스크탑 세션에서 실행될 때 프로그램에서 "비활성 타임 아웃"을 활성화하고 싶습니다. 사용자는 원격 데스크탑 세션을 열어 두는 것으로 유명하기 때문에 지정된 비활성 기간 후에 내 프로그램이 종료되기를 원합니다. 그러나 RD 사용자가 비 활동 시간 초과를 활성화하는 것을 원하지 않습니다.
해결책
getsystemmetrics (sm_remotesession) (설명대로 http://msdn.microsoft.com/en-us/library/aa380798.aspx)
다른 팁
다음은 내가 사용하는 C# 관리 코드입니다.
/// <summary>
/// Indicates if we're running in a remote desktop session.
/// If we are, then you MUST disable animations and double buffering i.e. Pay your taxes!
///
/// </summary>
/// <returns></returns>
public static Boolean IsRemoteSession
{
//This is just a friendly wrapper around the built-in way
get
{
return System.Windows.Forms.SystemInformation.TerminalServerSession;
}
}
세션에서 실행중인 응용 프로그램에 대해 알고 싶다면 다음이 작동합니다.
BOOL IsRemoteSession(void)
{
return GetSystemMetrics( SM_REMOTESESSION );
}
그러나 일반적으로 프로세스 ID는 아닙니다.
임의의 세션에서 실행될 수있는 임의의 프로세스에 대해 알고 싶다면 아래 방법을 사용할 수 있습니다.
먼저 프로세스 ID를 호출하여 세션 ID로 변환 할 수 있습니다. ProcessIdTossessionID. 세션 ID가 있으면 호출 할 수 있습니다. wtsquerysessionInformation. 지정할 수 있습니다 WTSInfoClass
가치로 WTSIsRemoteSession
그리고 해당 응용 프로그램이 원격 데스크탑 연결인지 아닌지에 대한 정보를 제공합니다.
BOOL IsRemoteSession(DWORD sessionID)
{
//In case WTSIsRemoteSession is not defined for you it is value 29
return WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionID, WTSIsRemoteSession, NULL, NULL);
}
제휴하지 않습니다 StackOverflow