Определите, запущена ли программа на удаленном рабочем столе

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

Вопрос

Есть ли способ, которым моя программа может определить, когда она работает на удаленном рабочем столе (службы терминалов)?

Я хотел бы включить «тайм-аут бездействия» в программе, когда она работает в сеансе удаленного рабочего стола.Поскольку пользователи печально известны тем, что оставляют сеансы удаленного рабочего стола открытыми, я хочу, чтобы моя программа завершала работу после определенного периода бездействия.Но я не хочу, чтобы тайм-аут бездействия включался для пользователей, не являющихся пользователями 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 );
}

Но не для любого идентификатора процесса.


Если вы хотите узнать о любом произвольном процессе, который может выполняться в любом произвольном сеансе, вы можете использовать метод ниже.

Сначала вы можете преобразовать идентификатор процесса в идентификатор сеанса, вызвав Процессидтосессионид.Получив идентификатор сеанса, вы можете использовать его для вызова: Информация о 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