В API объекта клиента ICA для Citrix Receiver / Workspace действительно работает настройка OutputMode? - PullRequest
3 голосов
/ 29 января 2020

Я следую спецификации Спецификация API-интерфейса Citrix ICA Client Object

В соответствии с этой документацией вы можете установить свойство OutputMode, которое имеет следующее значение:

  • OutputMode: режим вывода для клиентского движка.

Допустимые значения

  • 0 (без заголовка),
  • 1 (нормальный),
  • 2 (без рендеринга),
  • 3 (без окон)

Поэтому я установил в своем коде значение 3, которое имеет следующее значение:

OutputModeWindowless = 3 Клиент работает как нормально, но не отображается в окне сеанса. Поддерживает внутреннюю поверхность растрового изображения для снимков экрана. Выберите этот режим, чтобы клиент не отображал изображение на экране, если использование ЦП клиента является узким местом. Рендеринг по-прежнему происходит в фоновом режиме на поверхность вне экрана, что позволяет при желании получать снимки экрана сеанса.

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

Я установил его перед подключением согласно этой документации :

OutputMode должен быть определен только во время загрузки; то есть до запуска соединения.

Я видел эту проблему, с которой сталкиваются другие разработчики:

Итак, вопрос:

  • Действительно ли этот метод реализован?
  • Если да Что нужно сделать, чтобы заставить его работать?

Вот пример кода, который я использовал:

[system.Reflection.Assembly]::LoadFile("c:\Users\<user>\AppData\Local\Citrix\ICA Client\WfIcaLib.dll")
$icaClient = New-Object WFICALib.ICAClientClass
$icaClient.CacheICAFile = $false
$icaClient.ICAFile = $icapath
$icaClient.OutputMode = [WfIcaLib.OutputMode]::OutputModeWindowless
$icaClient.Launch = $true
$icaClient.TWIMode = $true
$icaClient.Connect()

sleep 10

$enumHandle = $icaClient.EnumerateCCMSessions()
$sessionid = $icaClient.GetEnumNameByIndex($enumHandle, 0)
$icaClient.StartMonitoringCCMSession($sessionid, $true)
#$icaClient.session.ReplayMode = $true

$icaClient.session.Keyboard.SendKeyDown(16) # shift key
$icaClient.session.Keyboard.SendKeyDown(53) # number 5 key

$screenShot = $icaClient.session.CreateFullScreenShot()
$screenShot.Save()
$icaClient.Logoff()

sleep 10

$icaClient.StopMonitoringCCMSession($sessionid)
$icaClient.CloseEnumHandle($enumHandle)

Я использую:

  • Citrix Версии Receiver / Workspace, которые я пробовал: 4.12, 4.9, Workspace 19.11
  • Citrix StoreFront версия: 3.12.5000
...