JavaScriptでのキーボード判定

[6819]JavaScriptでのキーボード判定 | 投稿者:にゃす | 投稿日:2012/05/08(Tue) 19:54:19
Windows Vista+InDesign CS4の環境です。

JavaScript実行時にキーボード上のShiftキー、Ctrlキー、Altキーのいずれかが押されているか
どうかを以下の記述で判定してみました。

if(ScriptUI.environment.keyboardState.shiftKey == true) {
   alert("shiftKey");
}
if(ScriptUI.environment.keyboardState.ctrlKey == true) {
   alert("ctrlKey");
}
if(ScriptUI.environment.keyboardState.altKey == true) {
   alert("altKey");
}

ExtendScript Toolkitからはうまくいったのですが、.jsxで保存してスクリプトパネルから実行すると
・Shift→ExtendScript Toolkitが起動しデバッグ
・Ctrl→スクリプトフォルダが開く
・Alt→ExtendScript Toolkitが起動
となってしまいました。 .jsxbinではShiftがうまくいきましたがCtrlとAltがダメでした。

環境によるものなのか、あるいはどこかの設定で解決できるものなのか
ご存知でしたら教えていただきたいと思います。
どうぞよろしくお願いいたします。
» 1
[6820]Re: JavaScriptでのキーボード判定 | 投稿者:(z-) | 投稿日:2012/05/08(Tue) 20:11:05
どもども。これおもしろーい。最近CS4デビューしたので知りませんでした。

ご質問の件、InDesignのスクリプトパネルは特定のキーで特有の動作をします。
Shiftキーを押しながらスクリプトをカチカチするとESTKでデバッグ、
Alt(MacではOption)キーだとESTKで開く、
Ctrl(Mac:Command)キーだとスクリプトファイルを表示、
それらが優先されているわけです。

ScriptUIクラスのオブジェクトなので、元々は自作パレットに並べたボタンなどのコントロールを操作した際に反応させるのが本来の用途なのでしょうね。

例えばですけど、冒頭にalert("hoge"); など入れておき、アラートダイアログのOKボタンを各キーを押しながらカチしたらうまく反応しました。
 ダメですかね。ダメかもですねw
» 2
[6821]Re: JavaScriptでのキーボード判定 | 投稿者:にゃす | 投稿日:2012/05/08(Tue) 21:53:08
(z-)さん、ご回答いただきましてありがとうございます!

ExtendScript Toolkit等が優先される、というのが判ってスッキリとあきらめることができそうです。
...と書きながらもちょっとは未練が残っていますが。
» 3
[6822]Re: JavaScriptでのキーボード判定 | 投稿者:オメガ | 投稿日:2012/05/09(Wed) 02:04:54
同じく、とてもおもしろい試みだと思います。
>冒頭にalert("hoge"); など入れておき~
手元のMac版CS5ではなぜかInDesignごと落ちてしまいましたが、CS5.5では動作しました。

これを使うと、スクリプトからファイル選択ダイアログ経由で配置する際
Rectangle.place(fileName, ScriptUI.environment.keyboardState.shiftKey);
とすれば、Shiftキーを押した時だけ読み込みオプションを表示させることが可能ですね。
これは目からウロコでした。にゃすさんありがとうございます。
» 4
[6823]Re: JavaScriptでのキーボード判定 | 投稿者:(z-) | 投稿日:2012/05/09(Wed) 10:05:43
オメガさんの使用例、かなり有効ですね。今度わざとらしく使わせ頂きますw

スクリプトパネルをつっつくのではなくキーボードショートカットを充ててみたらどう動くかと思い、試してみました。MacOS10.6.8、CS4です。
alert(ScriptUI.environment.keyboardState.shiftKey+", "+ScriptUI.environment.keyboardState.altKey);
と一行だけ書いた物に対して、
・なにがし
・Shift+なにがし
・Option+なにがし
・Shift+Option+なにがし
の4種のショートカットを登録して、それぞれで実行してみたところ、
それぞれのキーにちゃんと反応した内容でアラートが出ました。

>にゃすさん
つまり、結論として
ストリプクパネルを使えば解決します"^;
*http://pub.ne.jp/ajabon/?entry_id=3336389
» 5
[6824]Re: JavaScriptでのキーボード判定 | 投稿者:にゃす | 投稿日:2012/05/09(Wed) 11:47:07
オメガさん、(z-)さん、いろいろとありがとうございます。
おかげさまで光が見えてきました!

「ストリプクパネル」。こんなこともできるんですね。もっと勉強しなくちゃですね。
有意義な情報をいただきまして本当にありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)