Определить citrix "режим приложения"?
Простите, что, возможно, я использовал неправильный термин для этого "режима приложения".
У нашего приложения во время запуска возникает проблема, заключающаяся в том, что оно не отображает значок панели задач до тех пор, пока не откроется главное окно, даже если до этого на экране присутствовали окна выполнения загрузки, окна входа в систему и т. Д.
Мы изменили код, чтобы исправить это, но, к сожалению, это исправление, при запуске приложения через citrix, теперь показывает две иконки, одна с иконкой и без текста.
Есть ли способ для меня, чтобы обнаружить, что приложение работает через Citrix? Я не знаю правильного термина для этого, но на рабочий стол пользователя выводится только окно приложения, а не весь удаленный рабочий стол.
Если это имеет значение, приложение написано на Delphi.
3 ответа
Не уверен, как именно это сделать в Delphi, но если вы можете вызвать user32.dll и вызвать функцию:
if (GetSystemMetrics(SM_REMOTESESSION) != 0)
{
// We are in a remote session
}
Это должно сказать вам, если вы работаете в среде Citrix или Terminal Services. SM_REMOTESESSION определяется как:
#define SM_REMOTESESSION 0x1000
Больше информации о API GetSystemMetrics здесь: Ссылка на msdn
Редактировать На следующей странице описано, как сделать именно то же самое в Delphi. То, что работает для служб терминалов, должно также работать для Citrix:
Ваше приложение Delphi работает под терминальными службами как удаленный сеанс
Это работает для меня:
return System.Windows.Forms.SystemInformation.TerminalServerSession;
Заметка для любопытных: решение, предложенное open-collar, - это просто оболочка.NET для решения, предложенного Джоном Сибли. Они должны возвращать один и тот же результат в каждом случае. Я подтвердил это, разобрав класс System.Windows.Forms.SystemInformation.