문제

내 프로그램이 원격 데스크탑 (터미널 서비스)에서 언제 실행되는지 판단 할 수있는 방법이 있습니까?

원격 데스크탑 세션에서 실행될 때 프로그램에서 "비활성 타임 아웃"을 활성화하고 싶습니다. 사용자는 원격 데스크탑 세션을 열어 두는 것으로 유명하기 때문에 지정된 비활성 기간 후에 내 프로그램이 종료되기를 원합니다. 그러나 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top