2011-11-29 50 views
0

好吧,所以我現在已經呆了好幾個小時了,我開始憤怒。Flash AIR:防止用命令+全屏退出

我正在閃光燈(空氣)一亭應用程序,它不應該允許用戶通過任何其他方式比在鍵入口令退出全屏模式。這已經證明是不可能的,因爲看起來你不能阻止用戶使用ctrl + alt + delete或command + alt + esc或者alt + tab。但至少我想阻止他們使用escape,alt + f4,command + q和command + w。

後google搜索我有逃逸,ALT + F4和命令+ Q下的公平位。基本上我只是在stage.nativeWindow和preventDefault()上設置CLOSE,CLOSING和EXITING事件的監聽器。在這種情況下,CLOSE和EXITING事件永遠不會發生,他們只是爲了好的措施。我只是通過監聽KEY_UP並防止它來處理ESC。但是:

Command + w拒絕合作。它似乎在分派CLOSING事件之前將全屏最小化。所以,問題是:

這是什麼,以及如何防止它?

回答

0

可以設置一個用於命令+ W監聽器,並且,殘酷:

如果(this.stage.displayState == StageDisplayState.NORMAL) { this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; //你需要玩這個,看看它是否適合你的需求,如果沒有,不要使用它。 this.stage.scaleMode = StageScaleMode.EXACT_FIT; }

如果應用程序失去焦點,它會讓keister感到痛苦,它不會聽按鍵。我的解決方案是建立一個經常竊取焦點的循環 - 但這對於可以在後臺運行的應用程序並不好。對於一個自助服務終端類型的應用程序,以及僅用於運行一個應用程序的系統,這是一個可接受的折衷方案。

所以在同一時間,你也可以設置,在這個循環中,像上面的一個,即恢復應用全屏幕的命令。你必須掌握計時器的頻率,這個頻率決定了這個循環運行的頻率和竊取焦點 - 每秒超過5次(取決於你的應用中的其他內容)是否真的可以是CPU和內存吸引。

的主要問題是:我不認爲有AIR要完全殺死Kiosk模式這些逃生按鍵的方式。這是一種安全「風險」。 (順便說一句,我認爲ESC鍵也從全屏調用窗口模式;請不要在此引用我)。

我猜,另一個解決辦法是定期踢應用到背景。這可以防止應用程序捕獲控件和westroke。但是我認爲,如果還有其他任何交互性,程序的行爲將會非常煩人。

+0

嘿,感謝您的回答! –

+0

哎呀,按下輸入... 你不能聽CMD + W,當這兩個鍵被按下時,他們不被視爲keyboardevent。至於從正常狀態恢復到全屏狀態,我確實嘗試了這一點,但是我發現我必須設置一個任意延遲才能工作,否則我會遇到層出不窮的CLOSING事件。幾乎不理想。 由於全屏模式有一個表格填寫,我不能踢它的背景。正如你所說,沒有辦法完全關閉逃脫鍵盤鎖定鍵盤,所以我最終只是把手放在空中唱着「我只是不在乎!」。 –

0

這是對我工作(雖然,在這個例子中,我打電話,明確捕獲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

是的,相反的事情是一個問題,因爲我一直在尋找的是什麼導致cmd + w退出全屏當我能夠趕上並阻止CLOSING事件:P –

0

AIR應用程序根本無法與系統/任務鍵干涉,然而,原生應用程序可以這意味着本機擴展。

e.g在Windows中,您可以調用SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,...)

+0

嗯,我不能真正干涉按鍵本身,但我可以控制程序如何響應它們。我的意思是我已經捕獲了由cmd + w派發的CLOSING事件,我的問題是在它退出全屏之前發生了一些事情。 –