• 締切済み

ファンクションキー制御?

こんにちわです。 タイトル通りなのですが、 JSでは、 function kdown(e) {var msg =""; var flg = 1; switch(window.event.srcElement.tagName){ case "INPUT" :if(event.srcElement.type != "text" && event.srcElement.type != "password" && event.keyCode!=9 && event.keyCode!=16 && event.keyCode!=32){return false;}else{flg=0;}break; case "TEXTAREA" :flg = 0;break; case "SELECT" :flg = 0;break; case "A" :flg = 2;break; } switch(event.keyCode){ case 8 :msg = "BS";break; case 78 :if(event.ctrlKey){msg = "Ctrl+N";}break; case 82 :if(event.ctrlKey){msg = "Ctrl+R";}break; case 116 :msg = "F5";break; case 122 :msg = "F11";break; } if(event.altKey){msg = "Alt";} if (flg == 0 ){switch(event.keyCode){case 8 :msg = "";break;case 13 :msg = "";break;}} else if (flg == 2 && event.keyCode==13)msg = ""; if(msg != ""){event.keyCode = 0;return false;}else{return true;} } document.onkeydown = kdown; こんな感じに制御するのを、 アクションスクリプトで制御出来ますか? HTMLにこのJS埋め込んでも、FLASHの所クリックして、 各キー押すと意味なくなってしまうので・・ F5やF11など使用されたくないのですが・・・ 入れ替えなどでも良いのですが。。。 宜しくお願いします。

  • Flash
  • 回答数1
  • ありがとう数0

みんなの回答

noname#35109
noname#35109
回答No.1

>> こんな感じに制御するのを、 >> アクションスクリプトで制御出来ますか? 実際にHTMLに書かれている JavaScript を書き込んで,実験してみました。 たしかに,「F5(リロード)」も「F11(ウィンドウの最大化)」も阻止できますね。 >> HTMLにこのJS埋め込んでも、FLASHの所クリックして、 >> 各キー押すと意味なくなってしまうので・・ これも,実際に検証できました。 上で作った HTML に 何でもない Flash を貼り付けて, Flash をクリックして Flash に フォーカス を移した場合,上の制御は無効になります。 しかし, どのような仕組みで,F11 などを無効にしているのでしょうか。 その原理がわかりません。 変数 msg に適当な値を入れるようにスクリプトを組んでおくと, そのスクリプトが優先されるので,自動的に F11 が無効になるのでしょうか? もし,そういう原理だと Flash には通用しないと思います。 ステージ上に msg という変数名のダイナミックテキストを作成し, ステージ上に適当な ムービークリップ を別に作って, そのムービークリップに次のようなスクリプトを書くと,変数名 msg のダイナミックテキストには "F11" が表示されるのですが, F11キーは無効にはなりません。 ------------------------------------ onClipEvent (enterFrame) { // 押したキーが "F1" のとき if (Key.getCode() == 122) { _root.msg = "F11"; } } ------------------------------------ また,次のように書いた場合は, 他のキーでは大丈夫ですが, F5 や F11 には全く通用しません。 つまり "F11" すら表示されません。 ------------------------------------ onClipEvent (keyDown) { // 押したキーが "F1" のとき if (Key.getCode() == 122) { // _root.msg = "F11" } } ------------------------------------ まず,優先されるのは, ブラウザのキー操作だと思います。 onClipEvent (enterFrame) のときは, Flash からも 後からキーを拾えるので,表示だけは可能なようです。 Flash で キー は拾えますが, それと,キー操作を無効にするのとは別なようです。 JavaScript は詳しくないもので,よくわからないのですが, 何か特殊な仕掛けをつくられているのでしょうか, それとも, キーを押したときに JavaScript で無意味な動作をするようにしておけば, 勝手に ブラウザ直 より JavaScript の方が優先されるので, ブラウザに対してのキー操作が無効になるのでしょうか。 Flash は Flash 内に関してのみ色々できますが, Flash 外のことに関しては,ブラウザやJavaScriptを優先するようにできているので, ActionScript ではできないような気がします。 Flash には Windowクラスも,(HTMLをdocmentとした場合の)Docmentクラスもありません。 おかげで,Flash自体の大きさを変えたり,Flashの背景色を変えることすら,ActionScript では不可能です。 逆に,Flash自体の大きさを変えたり,Flashの背景色を変えることは JavaScript ではできます。 Flash は内弁慶なのです。 だから,なんとなく,要望されていることは不可能なような気もします。 自信はありませんが一応,回答の一種を書かせていただきました。

参考URL:
http://hakuhin.hp.infoseek.co.jp/main/as/key.html
sanchan77
質問者

補足

こんばんわです。 大切な時間割いて頂きありがとうございます。 JSで書いてるのは、sassakunさんが言うような原理でだいたい合ってます。 私はまだFLASHについて、まだまだ勉強不足なので、 難しい事は言ったり出来ませんが・・・ 質問してから、色々自分なりに調べた所、 あるサイトで、HTMLにFLASH埋め込んでるにも関わらず、 FLASHの所クリックしてF11やF5など押した場合は無効化されてるようなサイト発見したのですが、 原理的に? 一致しないキー?は無効化。 みたいな判定してるのではないかと思ったのですが・・・ 私の無いに等しい知識では、特定までは出来なかったので・・・ 例のサイト下記になります http://homepage3.nifty.com/j_town/flashtype/1-1.html 大変申し訳ないですが、また助言頂けたら助かります。 宜しくお願いします。

関連するQ&A

  • キーボードショートカットでthickboxなどを起動したいのですが・・・・

    よろしくお願いいたします。 Webアプリのデザインを作成中なのですが、 javascriptでキーボードのショートカットキーを押してログイン画面を出したいと思い、できれば特定のキーを押したときにthickboxやlightboxでHTMLを表示できないかなと思っているのですが可能でしょうか? 以下のソースで一応Fキーを押すとリンクだけはできるのですが、 thickboxを定義するとなるとclassnameをどのように定義すればよいのでしょうか。 あまりJSの知識がないので、ご助力いただければ幸いです。 どうぞよろしくお願いいたします。 function shouldIgnoreInput(e) { var el = e.target || e.srcElement return el && el.tagName && (el.tagName.toUpperCase() == "INPUT" || el.tagName.toUpperCase() == "SELECT" || el.tagName.toUpperCase() == "TEXTAREA"); } function hotkey(e) { var nav4 = window.Event ? true : false; if(shouldIgnoreInput(e)) { return true; } if ((typeof e.ctrlKey != 'undefined') ? e.ctrlKey : e.modifiers & Event.CONTROL_MASK > 0) { return true; } if ((typeof e.altKey != 'undefined') ? e.altKey : e.modifiers & Event.ALT_MASK > 0) { return true; } if ((typeof e.metaKey != 'undefined') && e.metaKey) { return true; } else if((typeof Event != 'undefined') && (e.modifiers & Event.META_MASK > 0)) { return true; } if (nav4) var whichCode = e.which else if (e.type == "keypress") var whichCode = e.keyCode else var whichCode = e.button; if( whichCode == 114) { cancelEvent(e); window.location.reload(); return false; } else if( whichCode == 102 ) { cancelEvent(e); url = "login.html"; window.location.href = url; return false; } return true; } function cancelEvent(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; } }

  • Altキー+○キーでのショートカットの制御

    お世話になります。 papillon68と申します。 Windows 2000、XP IE6以降限定 ブラウザでAlt+○キーを押すことで様々な操作をキーボードのみで 行うことができます。 (参考:http://www.clubqa.com/weekly/qa020403.htm) 今回行いたいことはこのキーボードのみでの操作の 一部を制限したいというものです。 例えば、 ・Altキー+←キーで一つ履歴が戻ります。[history.back(-1)] ・Altキー+→キーで一つ履歴が進みます。[history.back(1)] これを制限するために ----------------------------------------- // Altキー+←キーの制限 if((event.altKey) && (event.keyCode==37)) { // チェック用 //alert('通った'); event.keyCode = 0; return false; } ----------------------------------------- としていますが、一つ前の画面に戻ってしまいます。 alert()を使って実際にif内を通っているかを チェックしてみると通っていないようです。 同じようにCtrlの場合だと同じ方法で制限することができました。 ----------------------------------------------- // 更新の制限(Ctrl+R) if((event.ctrlKey) && (event.keyCode==82)) { // チェック用 // alert('通った'); event.keyCode = 0; false; } ----------------------------------------------- こちらはアラートが表示され、ページが更新されません。 Altキーの場合もCtrlキーと同じように制限することはできないでしょうか。 お手数をお掛け致しますが、ご教授よろしくお願い致します。

  • ファンクションキーの使用制御について

    こんばんわ。 VB6にて、2つのボタンに対してファンクションキー(F5とF7)を割り当てているのですが、 1回押したらプログラムが1サイクル終了するまで使用禁止にしたいのですが、わかりません。 ボタンの方は、EnableをTrue/Falseでできましたが、ファンクションキーはできません。 ちなみに今のファンクションキー割り当てのコードです。 Select Case KeyCode Case vbKeyF5 Call Command1_Click Case vbKeyF7 Call Command2_Click Case Else End Select です。 どなたかよろしくお願いいたします!

  • firefoxでfunction(e){}の e を省略するには?

    <html> <body> <input type="text" onkeydown="test()"> <script> function test(){ var e=getEvent()||window.event; o=e.target||e.srcElement; o.style.backgroundColor='#f00'; alert(e.keyCode); } function getEvent(){ var ob, c = arguments.callee; while(c = c.caller) if(ob = c.arguments[0]) return ob; } なんとなく取得できているようなのですが、 バグがありそうで、ご意見を! </script> </body></html>

  • 自作関数から WndProc( ) を止める

    自作関数から WndProc( ) を止めるにはどうしたらいいんですか? LRESULT CALLBACK WndProc(…){  switch(msg){  case WM_COMMAND:   if(function f( ) == "END")return 0;   処理A;  break;  } } function f( ){  return "END" } こんな流れにしたいけど、WndProc( ) 内からでなく、 外から WndProc( ) を止めたいんです。 LRESULT CALLBACK WndProc(…){  switch(msg){  case WM_COMMAND:   function f( );   処理A;  break;  } } function f( ){  ? // WndProc( ) に return 0 とさせて 処理A を実行させない }

  • IE8におけるショートカットキーの無効化方法

    タイトルの通り、現在IE8環境で、ショートカットキーを無効にする方法を模索しています。 ネットで調べた結果、イベントを受け取ることまでは成功するのですが、 それを無効化することができません(一部のショートカットキー)。 現在試しているのが Ctrl++→拡大 Ctrl+-→縮小 の二つです。 htmlのバージョンは4.01 Strictを使用しています。 以下ソース window.document.attachEvent('onkeydown', onKeyEvent); window.document.attachEvent('onkeyup', onKeyEvent); function onKeyEvent(e){ if(!e) e = window.event; //確認用 //console.log("Key Code : " + e.keyCode); //console.log("Event Type : " + e.type); //console.log("Ctrl Key : " + e.ctrlKey); if(e.keyCode != 17){ if(e.ctrlKey){ switch(e.keyCode){ case 187: case 189: //e.keyCode = 0; e.returnValue = false; e.cancelBubble = true; //window.event = e; return false; } } } return true; } alert()をいれると無効化できるといった記述も見たのですが、 今回はその方法は使わずに実装する予定です。 どなたか方法をご存知でしたら、ご教授ください。 (コメントアウトしているものも試しましたが、うまくいきませんでした)

  • Altを使ったショートカットキー無効の方法

    いつもお世話になってます。 javascriptで、IEのショートカットキーのいくつかを無効にしているのですが、 Altと組み合わせて使うショートカットキーの無効化ができずに困ってます。 例えば、Ctrl+Iでお気に入りを開く処理の無効化はこう実現できました。 function keydown() { if(event.ctrlKey & event.keyCode == 73){ event.keyCode = 0; return false; } } document.onkeydown = keydown; ですが、Alt+Dでアドレスバー選択の無効化は以下では実現できませんでした。 function keydown() { if(event.altKey & event.keyCode == 68){ event.keyCode = 0; return false; } } document.onkeydown = keydown; どうすれば実現できるのか、教えてください。

  • その時によって異なる戻り値を返したい

    例えばですが Num() { ----count++; ----if( count == 6 ) count = 0; ----switch( count ) ----{ --------case 0: ------------return 0; ------------break; --------case 1: ------------return 1.0f; ------------break; --------case 2: ------------return 2.0; ------------break; ----} } のように、その時によって返す値(実際にはそれぞれ違う構造体を返したい)の違う関数を作る方法はないでしょうか?

  • ASP.Net Enterキーで移動したいイベント

    大変お世話になっております。 Windowsフォームでの動作のようにASP.Net でも Enterキーにて次項目に移動したいと思い、いろいろと調べてみました。 <script language="javascript" type="text/javascript">   function ChgKeyCode() {     if (!(event.srcElement.type == "button" || event.srcElement.type == "submit")) {       if (event.keyCode == 13) {         event.keyCode = 9;       }     }   } </script> 上記スクリプトにて、EnterキーのコードをTabキーに変換してEnterでも次項目に移動できるようにしたのですが、これですと、TextBox にTextChangedイベントがあった場合にイベントが無視されてしまうのですが、どうすればよいでしょうか? Enterキーで次項目に移動しつつ、イベントも適応したいのですが、お知恵を拝借できればと存じます。 何卒よろしくお願いいたします。

  • ファンクションキーで命令を実行させたい

    よろしくお願いします。 ACCESS2000を使用しています。 ファンクションキーで命令を実行したく、下記のコマンドを書いて実行しましたが動作しません。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Me.メインsub.Form.SetFocus Select Case KeyCode Case vbKeyF5 Me.btn帰社.SetFocus Call btn帰社_Click Case Else KeyCode = 0 End Select End Sub Private Sub Form_Load() Me.KeyPreview = True End Sub フォームプロパティのキーボードイベント取得は「はい」で設定してあります。 2週間位、いろいろやってみましたがうまくいきません。はまっています。回答・ヒントをよろしくお願いします。

専門家に質問してみよう