2011-11-29 4 views
0

これで、数時間で済んできました。Flash AIR:コマンド+ wで全画面表示を終了させないようにします。

私はキオスクアプリケーションをフラッシュ(空気)で作っています。これは、ユーザーがパスワードを入力する以外の方法でフルスクリーンモードを終了できないようにすべきです。これは、ユーザーがCtrl + Alt + DeleteまたはCommand + Alt + Escを使用したり、Alt + Tabキーを使用してしまうことを防ぐことができないように見えるため、やや不可能であることが判明しました。しかし、少なくとも私はエスケープ、alt + f4、command + q、command + wを使用しないようにしたい。

グーグルではっきりした後、私はalt + f4とcommand + qをエスケープしています。基本的には、stage.nativeWindowおよびpreventDefault()でCLOSE、CLOSINGおよびEXITINGイベントのリスナーを設定しています。この場合CLOSEとEXITINGのイベントは発生しません。 KEY_UPを聞いてそれを防ぐだけでESCを処理しています。ただし、

Command + wは協力を拒否しています。 CLOSINGイベントをディスパッチする前にフルスクリーンを最小限にする何かをしているようです。だから問題は:

それは何ですか、それをどうやって防ぐのですか?

答えて

0

あなたは残酷、Wコマンド+のリスナーを設定し、可能性:

IF(this.stage.displayState == StageDisplayState.NORMAL) {this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE。 //これで遊んで自分のニーズに合っているかどうかを確認する必要があります。そうでない場合は使用しないでください。 this.stage.scaleMode = StageScaleMode.EXACT_FIT; }

アプリがフォーカスを失っても、キーストロークを聞くことはできません。これに対する私の解決策は、頻繁にフォーカスを奪うループを設定することでしたが、これはバックグラウンドで乗ることができるアプリには適していません。キオスクタイプのアプリと、1つのアプリのみを実行するシステムの場合、これは許容される妥協点です。

同時に、このループでは、上記のようなコマンドを設定して、アプリをフルスクリーンに戻すこともできます。このループがどのくらいの頻度で実行され、フォーカスを奪うかを決めるタイマーの周波数を混乱させる必要があります.1秒間に5回以上(他のアプリケーションに依存します)は本当にCPUとメモリーを奪うことができます。

主な問題は、キオスクモードでこれらのエスケープキーストロークをAIRが完全に終了させる方法はないと思います。それはセキュリティの「危険」のようなものです。 (ところで、私はESCキーもフルスクリーンからwindowed-modeを呼び出すと考えています;私はそれについて私に言わないでください)。

もう1つの回避策は、アプリを定期的にバックグラウンドに蹴ることです。これにより、コントロール+ w呪文がアプリによって捕らえられなくなります。しかし、他のインタラクティビティが必要な場合、プログラムの動作はかなり迷惑になると思います。

+0

を呼び出すことができます! –

+0

Oops、pressed enter ... cmd + wを聞くことができません。両方のキーが押されると、キーボードイベントと見なされません。通常からフルスクリーンに戻ってみると、私はこれを試みましたが、それを動作させるために任意の遅延を設定しなければならないことがわかりました。そうでなければ、CLOSINGイベントの無限ストリームが得られます。ほとんど理想的ではありません。 フルスクリーンモードには記入するフォームがありますので、バックグラウンドにキックバックすることはできません。あなたが言うように、エスケープ・キーストロークを完全にシャットダウンする方法はありません。キーボードをロックするのではなく、「私は気にしません!」と歌うように手を放ります。 –

0

これは私にとってはうまくいきました(この例では、ctrl + wを明示的にキャプチャしてwindowed-modeにする機能を呼び出しています。ただし、AIRアプリケーションは、単にシステム/タスクキーに干渉することはできません

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がフルスクリーンを終了させた原因であったためです。P –

0

:私は私がやっているものにして構築されたいくつかの伐採事業を持っているので仕方、ので、私はキーストローク活性)を傍受し、制御するために必要なネイティブアプリケーションは、ネイティブ拡張を意味します。ウィンドウ内の

例えば、あなたは、ちょっと答えに感謝してSystemParametersInfo(SPI_SETSCREENSAVERRUNNING、...)

+0

まあ、私は本当に干渉できませんキーストローク自体ですが、私はプログラムがそれらにどのように応答するかを制御できます。私はすでにcmd + wでディスパッチされたCLOSINGイベントをキャッチしていますが、私の問題は、フルスクリーンを終了する直前に何かが発生することです。 –

関連する問題