Определите, запущена ли программа на удаленном рабочем столе
-
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 );
}
Но не для любого идентификатора процесса.
Если вы хотите узнать о любом произвольном процессе, который может выполняться в любом произвольном сеансе, вы можете использовать метод ниже.
Сначала вы можете преобразовать идентификатор процесса в идентификатор сеанса, вызвав Процессидтосессионид.Получив идентификатор сеанса, вы можете использовать его для вызова: Информация о 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);
}