Как я говорю, работает ли мое приложение на сессии RDP

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

18
задан Christopher Edwards 17 December 2009 в 00:53
поделиться

4 ответа

Принятие Вы находитесь, по крайней мере, на Платформе.NET 2.0, нет никакой потребности использовать P/Invoke: просто проверьте значение System.Windows.Forms.SystemInformation.TerminalServerSession ( MSDN).

20
ответ дан 30 November 2019 в 07:50
поделиться

Посмотрите подобный вопрос, который я задал: , Как проверить если we’re, работающий от батареи?

, поскольку, если Вы работаете от батареи, Вы также хотите отключить анимации.

/// <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;    
    }
}

И затем проверять, работаете ли Вы от батареи:

/// <summary>
/// Indicates if we're running on battery power.
/// If we are, then disable CPU wasting things like animations, background operations, network, I/O, etc
/// </summary>
public static Boolean IsRunningOnBattery
{
   get
   {
      PowerLineStatus pls = System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus;
      if (pls == PowerLineStatus.Offline)
      {
         //Offline means running on battery
         return true;
      }
      else
      {
         return false;
      }
   }
}

, Который можно просто объединить в одного:

public Boolean UseAnimations()
{
   return 
      (!System.Windows.Forms.SystemInformation.TerminalServerSession) &&
      (System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Offline);
}
<час>

Примечание: Этот вопрос уже задали (, Определяют, работает ли программа на Удаленном рабочем столе )

7
ответ дан 30 November 2019 в 07:50
поделиться

Используйте GetSystemMetrics () функция в user32.dll. Используйте PInvoke для вызова его. Следующее является кодом кода, предоставленным первой ссылкой. Вторая ссылка говорит Вам, как вызвать ее в.NET.

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

Полный код:

[DllImport("User32.dll")]
static extern Boolean IsRemoteSession()
{
 return GetSystemMetrics ( SM_REMOTESESSION);
}

существует также SystemInformation.TerminalServerSession Свойство, которое определяет, подключен ли клиент к сессии Терминального сервера. Эти код, если MSDN обширно, таким образом, я не копирую его здесь.

2
ответ дан 30 November 2019 в 07:50
поделиться

В дополнение к осуществлению начальной проверки, чтобы видеть, работает ли Ваш рабочий стол на сессии RDP, можно также хотеть обработать ситуацию, где удаленный сеанс соединен или разъединен, в то время как AP работает. У Вас могло быть приложение, работающее на консольной сессии, и затем кто-то мог инициировать соединение RDP с консолью. Если Ваше приложение периодически не выполняет вызов к GetSystemMetrics, это собирается предположить, что это не работает как сессия служб удаленных рабочих столов.

у Вас был бы свой регистр приложения для обновления сессии notificiations через WTSRegisterSessionNotification. Это позволит Вашему applicaiton быть сразу уведомленным, удаленное соединение, был открыт или закрыт для настольной сессии, под которой работает Ваше приложение. См. здесь для некоторого демонстрационного кода C#.

Для некоторого хорошего Delphi Win32 exampale код для использования WTSRegisterSessionNotification, посмотрите этот страница .

3
ответ дан 30 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: