Xcrawlってホイールだよね、と、Xcrawlのイベントをマウスのホイールイベント(WM_MOUSEWHEEL)に置き換えて見ました。アプリケーションが誰も反応してくれないという悲しい目にあいました。
ただ一つ、GSFinder+W03だけが変な反応を示したので、ソースコードを眺めてみると、マウスホイールを問答無用で1ページ上下キーに置き換えています。コメントにはEM・ONEのホイール対応と書かれています。調べてみるとEM・ONEには本体横にスクロールホイールが付いているんですね。WM_MOUSEWHEELを投げるのでしょうか? 誰も反応しないでしょうに(笑)。
マウスイベントは送出が簡単なのですが、使えないんじゃ仕様が無い。スクロールイベントでも送りますか。スクロールイベント送るのって、ものすご~く面倒靴下臭いんですが。
Xcrawlを時計回りになぞると次のようなキー・イベントを発生します。
VK_UP WM_KEYDOWN
VK_F20 WM_KEYDOWN
VK_UP WM_KEYUP
VK_F20 WM_KEYUP
これって、最初の二つのイベントの順番が逆だろ? と思ってしまいそうです。よくよく調べてみると、VK_F20というのは別名VK_ROCKERとあって、これはMotorolaのROKRに搭載されている、サム・ホイールだとか呼ばれるものが出力するコードみたいです。下のリンクは、MSDNでの言及個所と、モトローラからのプログラミング指南書(PDF)です。
D-pad Virtual Key Code Support
Programming the Motorola Q Windows Mobile Smartphone
アプリケーションは VK_ROCKER を受け取ったら、直前の VK_UP または VK_DOWN を、サム・ホイールからの入力だと思え、と。う~む。WM_LBUTTONDOWN → WM_LBUTTONDBLCLK みたいな流れで処理しろって言うんですかね。アプリケーションならまだしも、キー・フックにとっては、非常に非常~にやり辛いんですけど。
さて、Xcrawlをいじると、たいていのアプリケーションは、VK_ROCKERを無視して、上下キーとして扱います。でも、アドエス搭載ソフトの中で、XcrawlというかROKRのサム・ホイールをサポートしているソフトウェアが、2つだけあります。一つは、Rich Edit(DLL)です。Pocket Wordはこの上で動いています。Rich EditはROKRサム・ホイールのイベントに対して、ページ上下動作をします。もう一つはOpera 8.7。こちらはROKRサム・ホイールで120ドットの上下スクロールをします。じゃあ、これらのソフトウェアはどのようにROKRイベントを判別しているのだろうと思って、Xcrwalと同じスキャンコード(0)で VK_ROCKER つきの VK_UP/VK_DOWN と、ただの VK_UP/VK_DOWN を送ってみました。すると、VK_ROCKER なしの、ただの VK_UP/VK_DOWN には、普通の上下キーとして反応します。うん、きちんとしてますね。スキャンコードが0の時はXcrawl、じゃだめか。スキャンコード0は、ユーティリティがキー・イベントを送出するときに普通に使いますから、これで判別すると、そのようなユーティリティと干渉しちゃいますものね。
キー・フックで判別するには、タイマー使うしかないかなあ。