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