2008-10-01 2 views
22

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

Я хотел бы включить «таймаут бездействия» в программе, когда он запущен на сеансе удаленного рабочего стола. Поскольку пользователи, как известно, оставляют сеансы удаленного рабочего стола открытыми, я хочу, чтобы моя программа завершилась после определенного периода бездействия. Но я не хочу, чтобы тайм-аут бездействия был включен для пользователей, не относящихся к RD.

ответ

10

Вот 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; 
    } 
} 
5

следующие работы, если вы хотите знать о приложении, которое работает в сеансе :

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

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

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

Вы можете сначала преобразовать идентификатор процесса в идентификатор сеанса, вызвав ProcessIdToSessionId. Когда у вас есть идентификатор сеанса, вы можете использовать его для вызова: 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); 
} 
+0

Каковы ситуации, которые могут вызвать процесс в другой сессии? Это, если я спрашиваю о сервисах или работает с другими пользователями? – 2010-08-16 17:56:52

Смежные вопросы