RDP 세션에서 내 응용 프로그램이 실행 중인지 어떻게 알 수 있습니까?

StackOverflow https://stackoverflow.com/questions/295415

  •  08-07-2019
  •  | 
  •  

문제

몇 가지 애니메이션 효과, 페이드 INS 및 스크롤 애니메이션 등의 .NET WinForms 앱이 있습니다. 그러나 원격 데스크톱 프로토콜 세션에 있으면 애니메이션이 화격하기 시작합니다.

누군가 앱이 RDP 세션에서 실행 중인지 여부를 결정하는 방법을 제안 할 수 있으므로이 경우 효과를 끄질 수 있습니까?

도움이 되었습니까?

해결책

최소한 .NET Framework 2.0에 있다고 가정하면 p/invoke를 사용할 필요가 없습니다. 값을 확인하십시오. System.Windows.Forms.SystemInformation.TerminalServerSession (MSDN).

다른 팁

내가 요청한 비슷한 질문을보십시오. 배터리로 실행 중인지 확인하는 방법은 무엇입니까?

배터리에서 실행중인 경우 애니메이션을 비활성화하려고합니다.

/// <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;    
    }
}

그런 다음 배터리로 실행 중인지 확인하십시오.

/// <summary>
/// Indicates if we're running on battery power.
/// If we are, then disable CPU wasting things like animations, background operations, network, I/O, etc
/// </summary>
public static Boolean IsRunningOnBattery
{
   get
   {
      PowerLineStatus pls = System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus;
      if (pls == PowerLineStatus.Offline)
      {
         //Offline means running on battery
         return true;
      }
      else
      {
         return false;
      }
   }
}

하나로 결합 할 수 있습니다.

public Boolean UseAnimations()
{
   return 
      (!System.Windows.Forms.SystemInformation.TerminalServerSession) &&
      (System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Offline);
}

메모: 이 질문은 이미 묻습니다 (원격 데스크탑에서 프로그램이 실행 중인지 확인)

RDP 세션에서 데스크탑이 실행 중인지 확인하기 위해 초기 확인 외에도 AP가 실행중인 동안 원격 세션이 연결되거나 분리 된 상황을 처리 할 수도 있습니다. 콘솔 세션에서 앱을 실행 한 다음 누군가가 콘솔에 RDP 연결을 시작할 수 있습니다. 응용 프로그램이 주기적으로 GetSystemMetrics를 호출하지 않는 한, 터미널 서비스 세션으로 실행되지 않는다고 가정합니다.

WtsregistersessessionNotification을 통해 세션 업데이트 알림에 대한 앱 레지스터가 있습니다. 이를 통해 응용 프로그램이 실행중인 데스크탑 세션에 원격 연결이 열리거나 닫혀 있음을 즉시 알릴 수 있습니다. 보다 여기 일부 샘플 C# 코드의 경우.

WtsregistersSessionNotification을 사용하기위한 좋은 Delphi Win32 Exampale 코드의 경우이 참조를 참조하십시오. 페이지.

사용 getsystemmetrics () user32.dll에서 함수. 사용 핀 보크 그것을 부르기 위해. 다음은 첫 번째 링크에서 제공하는 샘플 코드입니다. 두 번째 링크는 .NET에서 호출하는 방법을 알려줍니다.

 BOOL IsRemoteSession(void){
      return GetSystemMetrics( SM_REMOTESESSION );
   }

완전한 코드 :

[DllImport("User32.dll")]
static extern Boolean IsRemoteSession()
{
 return GetSystemMetrics ( SM_REMOTESESSION);
}

또한 있습니다 SystemInformation.TerminalServerSession 클라이언트가 터미널 서버 세션에 연결되어 있는지 여부를 결정하는 속성. 그만큼 제공된 코드 MSDN은 광범위하기 때문에 여기서 복제하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top