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

Я не смог найти лучший способ обойти диалоговое окно с помощью p4vc. Из ответа, полученного на форуме Perforce https://forums.perforce.com/index.php?/topic/5990-bypass-dialog-during-p4vc-diff/ , пользователь предложил использовать p4merge.

Шаги:

  • p4 print -o fA fileA#1

  • p4 print -o fB fileB#2

  • p4merge fA fB

Это вызовет инструмент сравнения p4 для сравнения. Ограничение с помощью p4merge состоит в том, что он может сравнивать только локальные файлы, которые требуют, чтобы файлы p4 печатались в локальные файлы, и сравнивать их. Пропускная способность сети может вызвать небольшие задержки при загрузке файлов с p4.

23
задан Kluge 1 October 2008 в 21:49
поделиться

3 ответа

GetSystemMetrics (SM_REMOTESESSION) (как описано в http://msdn.microsoft.com/en-us/library/aa380798.aspx )

19
ответ дан 29 November 2019 в 02:16
поделиться

Вот управляемый код 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;
    }
}
13
ответ дан 29 November 2019 в 02:16
поделиться

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

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);
}
5
ответ дан 29 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

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