Flash AIR: запретить выход из полноэкранного режима с помощью команды + w - PullRequest
0 голосов
/ 29 ноября 2011

ОК, так что я занимаюсь этим уже пару часов и начинаю злиться.

Я делаю приложение-киоск во flash (воздух), которое не должно позволять пользователямвыйти из полноэкранного режима любым другим способом, кроме ввода пароля.Это оказалось несколько невозможным, так как кажется, что вы просто не можете запретить пользователям использовать ctrl + alt + delete или команду + alt + esc или, в этом отношении, alt + tab.Но, по крайней мере, я хочу помешать им использовать escape, alt + f4, command + q и command + w.

После долгого поиска в Google у меня есть escape, alt + f4 и command +Q вниз.По сути, я просто устанавливаю прослушиватели для событий CLOSE, CLOSING и EXITING на stage.nativeWindow и предотвращении дефолта ().В этом случае события CLOSE и EXITING никогда не срабатывают, они просто существуют для хорошей меры.Я работаю с ESC, просто слушая KEY_UP и предотвращая его.Однако:

Command + w отказывается сотрудничать.Похоже, что он делает что-то, что минимизирует полноэкранный режим перед отправкой события CLOSING.Итак, вопрос:

Что это такое и как мне это предотвратить?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Это то, что сработало для меня (хотя в этом примере я вызываю функцию, которая явно захватывает Ctrl + W для перехода в оконный режим, в противоположность тому, что вы просили; я использовал этот код таким образом потому что у меня есть некоторые операции регистрации, встроенные в то, что я делаю, поэтому мне нужно было перехватывать и контролировать действие нажатия клавиш):

if (event.ctrlKey)
{
     //ctrl+F & ctrl+K -> go full screen;
     if(event.charCode == 102 || event.charCode == 107)
     {
          makeFullScreen();
     }
     //ctrl+S & ctrl+Q -> write to logfile, exit program;
     if(event.charCode == 115 || event.charCode == 113)
     {
          instrumentedExit();
     }
     //ctrl+W -> exit kiosk;
     if(event.charCode == 119)
     {
          windowedMode();
     }
}
0 голосов
/ 01 декабря 2011

Приложение AIR просто не может создавать помехи системным клавишам / клавишам задач, однако собственное приложение может означать собственное расширение.

Например, в Windows вы можете вызвать SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, ...)

0 голосов
/ 29 ноября 2011

Вы можете настроить прослушиватель для команды + w и, жестоко:

if (this.stage.displayState == StageDisplayState.NORMAL) {this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;// вам нужно поиграть с этим и посмотреть, соответствует ли он вашим потребностям или нет, если нет, не используйте его.this.stage.scaleMode = StageScaleMode.EXACT_FIT;}

Это своего рода боль в кейстере, если приложение теряет фокус, оно не может прослушивать нажатия клавиш.Мое решение для этого состояло в том, чтобы настроить цикл, который часто крадет фокус, но это не хорошо для приложения, которое может двигаться в фоновом режиме.Для приложения типа киоска и системы, которая предназначена для запуска только одного приложения, это приемлемый компромисс.

Таким образом, в то же время вы можете также установить в этом цикле команду, подобнуювыше, что восстанавливает приложение в полноэкранном режиме.Вам придется возиться с частотой таймера, которая определяет частоту выполнения этого цикла и кражу фокуса - более 5 или около того раз в секунду (в зависимости от того, что еще есть в вашем приложении) действительно может привести к потере ресурсов процессора и памяти.

Основная проблема заключается в следующем: я не думаю, что у AIR есть способ полностью убить эти escape-нажатия в режиме киоска.Это своего рода «риск» безопасности.(кстати, я думаю, что клавиша ESC также вызывает оконный режим из полноэкранного режима; не цитируйте меня об этом -).

Полагаю, еще один обходной путь - периодически пускать приложение вфон.Это предотвратит когда-либо контроль + w kestrokes приложением.Но я думаю, что поведение программы было бы довольно раздражающим, если бы требовалась какая-либо другая интерактивность.

...