プログラムがリモートデスクトップで実行されているかどうかを判断する

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

質問

プログラムがリモートデスクトップ(ターミナルサービス)で実行されているかどうかを判断する方法はありますか?

「無活動タイムアウト」を有効にしたいプログラムがリモートデスクトップセッションで実行されている場合。ユーザーはリモートデスクトップセッションを開いたままにしておくことで悪名高いため、指定された非アクティブ期間の後にプログラムを終了したいと思います。ただし、RD以外のユーザーに対して非アクティブタイムアウトを有効にしたくありません。

役に立ちましたか?

他のヒント

使用している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でもありません。


任意のセッションで実行される可能性のある任意のプロセスについて知りたい場合は、以下の方法を使用できます。

ProcessIdToSessionId 。セッション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