プログラムがリモートデスクトップで実行されているかどうかを判断する
-
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でもありません。
任意のセッションで実行される可能性のある任意のプロセスについて知りたい場合は、以下の方法を使用できます。
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);
}
所属していません StackOverflow