
(3)の□1で載せたスクリーンショットなんですが、「取得」を使ってウインドウからファイル名を得る(実行中のアプリのファイルパスが分からなくてもアプリをターゲットに指定できる)時、「クラス名」というチェックボックスがあります。今回はこれを使ってターゲットを指定してみます。この「クラス名」というモノを使うと、マウ筋はいわゆる「マウスジェスチャー」を超えて、マウス派にとって必要不可欠なツールへと変貌していくのです。
□1:クラス名指定

まず、何も言わずにOEのメール一覧カラム(とでも言うのでしょうか、メール一覧が表示されているエリア)を「取得」して欲しいのです。この時「ファイル名」だけでなく「クラス名」にもチェックを入れておくのを忘れずに。

すると、右のスクリーンショットに載せているような文字列が「ファイル名」「クラス名」に記述されるはずです。ファイル名が「msimn.exe」で、クラス名が「ATLSysListView32」。

OEメインウインドウの様々な部位を同様の方法で「取得」すれば分かると思うんですが、部位によって「クラス名」が異なる。「ファイル名」は全て「msimn.exe」でも、部位によってクラス名は右スクリーンショットのようになっています。・・・まぁ分かりにくいスクリーンショットですが、上記の方法で調べれば調べられるので・・・。
マウ筋を使いこなす、という連載なのであまり深くは触れませんが、「クラス名」というのはこういうモノです。あるアプリが提供するインターフェイスでも、部位によって「クラス名」は異なる。マウ筋のクラス名指定とは、「あるアプリ内で共通となるジェスチャーではなく、あるアプリのある部位でのみ共通となるジェスチャーを定義するためのターゲット指定方法」なのです。
と、いうことで、OEのメール一覧上でメールをホイールクリックするとそのメールに返信できる、という「ジェスチャー」を定義してみましょう。

OEにおける「返信」はホットキーが定義されています。「Ctrl + R」。なので、「ホイールクリックするとそのメールへの返信」を実現するには
- まず左ボタンをクリック(することによりマウスカーソル下のメールを選択状態にする)
- ホットキー「Ctrl + R」で「そのメールに返信」を行う
という手順を踏めば良い。

で、つまり、右のようなジェスチャーを定義すればよいのです。一番最初の「アクション終了後に実行」の意味が分からない人は(4)の□1を参照。
□2:ターゲットの優先順位
さて、せっかくOE(のメール表示欄)に対してジェスチャーを定義したので、OE全体にもジェスチャーを定義してみましょうか。例えば「メール送受信」をジェスチャー定義しておくと便利ですね。

もう深く書かなくてもこの程度のジェスチャーは定義できるはずなので、普通にターゲットを追加します。

で、普通にアクションとコマンドを定義します。
・・・この後、メール一覧ウインドウでメールをホイールクリックしてみて下さい。先ほど定義して有効に機能していたはずのジェスチャー「メール一覧でメールをホイールクリックすると返信」が無効になっているはずです。
実は、マウ筋の「Target」一覧に表示されているターゲットは、特に意味が無くこの順序で表示されているわけではない。これは、上から順に優先順位なんです。今メール一覧上でメールをホイールクリックした時何が起こっているかというと
- ホイールクリックされた場所は優先順位1位「explorer.exe」ではない
- ホイールクリックされた場所は優先順位2位「IEXPLORER.EXE」ではない
- ホイールクリックされた場所は優先順位3位「msime.exe」である
- 「msime.exe」にアクション「M」のジェスチャーは定義されていない
- 未定義アクション
と、いうことです。クリックされた場所が優先順位3位の「msime.exe」であるという時点で、優先順位4位の「msime.exe ATL:SysListView32」は候補にもなっていない。だから「msime.exe ATL:SysListView32」に対して定義したジェスチャーは完全に無視されている。
だから補足として書いておくと、□1で書いた
「ターゲット」を選択する。「Default」は「全てのアプリケーション」の意味。
というのは厳密には嘘です。正確には、「Default」とは「上位のターゲット以外の全てのアプリ」。

「Target」の下にある↑↓のボタンを使えば、ターゲットの優先順位を入れ替えることが出来ます。これを使って優先順位を変えてみる。
・・・補足として書いておくと、「Default」に関しては↑↓のボタンを使っても優先順位が変更できないはずです(最下位以外の順序には設定できない)。故に、本当に正確に書くと「Default」とは「その他のターゲット以外の全てのアプリ」。
で、優先順位を変えると、今度はメール一覧上で「送受信」のジェスチャーを起動することが出来なくなります。理由は省略しますが、上で書いたことの逆が起きている。

と、いうことで、正解は右スクリーンショットです。
- まず、「msime.exe ATL:SysListView32」を「msime.exe」から継承させる
- その上で優先順位は「msime.exe ATL:SysListView32 > msime.exe」
このように設定しておけば、ここまで書いた両方の問題が同時に解決されます。実際に手を動かしていないと(スクリーンショットを見ているだけでは)分かりにくいかもしれないです。ここまでの話は実際に設定しておいて貰えると理解が早いと思います。
□3:タスクトレイに対する制御

で、オマケですが、「クラス名」というモノを使えるようになると、意外な場所にも「ジェスチャー」を定義することが出来るようになります。例えばタスクトレイ。MSNメッセンジャーは、タスクトレイのアイコンを右クリックして「状態」→「取り込み中」をクリックすると「取り込み中」になるんですけど、取り込み中にしなくちゃいけないくらい忙しい時にこんな作業をするのは面倒なので、アイコンをホイールクリックしただけで「取り込み中」になるようジェスチャーを定義してみましょう。

例によって「取得」でタスクトレイのMSNメッセンジャーアイコンをクリックします。

ファイル名が「Explorer.EXE」で、クラス名が「ToolbarWindow32」。勘がいい人なら分かったと思いますが、実は、Windowsのタスクトレイとはエクスプローラが提供するインターフェイスの一部なんです。ここらへんの解説は本筋と離れるので一瞬で終わらせますが、エクスプローラとはただのファイラーではなく、Windowsの各種インターフェイスを提供する「シェル」である。ただ「シェル」としてどうかと考えるとメモリー消費量が多いし機能は低いし、他の代替シェルに変えた方が良いんでない?と思い始めるとLitestepとかBlackboxとかになるんですがそこらへんはネットランナーでも良く扱うネタなので、まぁ興味のある方は調べてみて下さい。
要は、意外なモノが意外なアプリの「一部」だったりすることもある(が故に「クラス名」指定でジェスチャーのターゲットに出来る場合もある)、という話です。

ということで、ここまでの内容を踏まえた上で右のようなジェスチャーを定義すれば、タスクトレイのMSNメッセンジャーアイコンをホイールクリックしただけでMSNメッセンジャーが「取り込み中」になるはずです。
ただ、ここまで書いておいてこんなことを書くのは酷いんですが、タスクトレイアイコンに対してジェスチャーを定義するのは推奨しません。何故かというと、まぁこれも勘がいい人は気づいたと思いますが、今やったことは
- 「Explorer.EXE ToolbarWindow32」に対して
- ホイールクリックすると「右クリック→M→B」を送る
ジェスチャーを定義した、ということです。問題はターゲットで、これって「タスクトレイのMSNメッセンジャーアイコン」ではなく、「タスクトレイ」なんです。早い話、他のアイコンをホイールクリックしても同じジェスチャーが発動します。故に
- 「M」が何らかの機能に定義されているアイコンをホイールクリックした場合は思わぬ動作が起こります
- 他のアイコンに対して似たようなジェスチャーを定義することは不可能になりました
なので、タスクトレイに対してはなるべくジェスチャーを定義しない(誤動作を防ぐ意味で)・仮に定義するにしても、何か一つしか定義できない(例えばMSNメッセンジャーアイコンを想定してジェスチャーを定義してしまうと、他のアイコンに対する同アクションでのジェスチャーは定義不能になる)ことを念頭において、「どうしても定義したいジェスチャー」を慎重に選ぶべきです。
一般化して書くと、ある「場所(例えばタスクトレイ上のMSNメッセンジャーアイコン)」に対してクラス名取得でジェスチャーを定義しようと思った場合は、そのジェスチャーが適用されて欲しくない別の場所(例えばタスクトレイ上の別のアイコン)を「取得」し、双方のクラス名が一致しないかどうかを確認する癖をつけるべきです(で、一致してしまった場合は上記のような思考を行うべきです)。
次回は中級編の最後。