ビジネス向けのシステムで利用するActiveXコントロールを
Vista対応する仕事をしていたのですが、1つ問題が・・・。
F10キーをキーボードフックできないのです。
Vista + IE7.0の環境で、Webページ上のテキストボックスにフォーカスがある時だけ、
フックが有効にならず、Altキーを押したときのように、メニューバーが表示されてしまいます。
Vistaは、このあたりはちょっと荒い実装になっているのでしょうか。。。
しばらく悩んであれこれ試した結果、キーボードフックではなくメッセージフックで
キー操作を取得できることがわかりました。対象のメッセージはWM_SYSKEYDOWN。
概ねのポイントは以下のとおりです。
・メッセージフックの開始はもちろん::SetWindowsHookEx API。(WH_GETMESSAGEを指定します。)
・GetMessageProcを実装して、対象のWM_SYSKEYDOWNで
VK_F10のときにキー操作時に行いたい処理を実行。
あとは、標準の動作を止めるために上記のタイミングで
メッセージ構造体をクリアします。
上記の調整で見込み通り動くことが確認できました。
さて、あとはテスト!テスト!
追伸:Windows Vistaについて
新世代プレミアム Windows Vista(←かっこいいキャッチですよね。)は、
上記のような互換性や、XPの使い勝手の継承など、
注文をつけたくなるところはありますけど、
OSのあるべき姿を目指した素晴らしいOSだと思います。
ところで、コンポーネントデザイン社内では、
Vista発売開始時に社内標準OSの位置づけにしました。
ビジネス用途だと、XPでも十分と評価されることも多いと思いますが、
技術者が新しいOSをいち早く使うのは当然のことですよね。
システム開発を担う方ははやめに使っておくことをお勧めします。