このページの本文へ

前へ 1 2 次へ

塩田紳二のWindows 8 IN-N-OUT 第25回

実は扱いがまったく異なるWindows 8でのタッチパネル

2012年11月16日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 ポインティングデバイスでもタッチデバイスでも、USBに接続される場合、USB側では「HID」(Human Interface Device)として扱われるのは同じだ。USBマウスやUSBキーボードもHIDの一種だが、歴史的な経緯からマウスとキーボードは、HIDの中でも特殊な扱いになっている。OSが起動する前のBIOSで、操作できる必要があるからだ。これができないと、USBキーボードではBIOS設定などができなくなってしまう。

 またWindows側も、歴史的な経緯からポインティングデバイスをまとめて扱っている。そうすることで、マウスでもタッチパッドでも同じように操作できるからだ。マウスポインターの表示やボタンのクリックの動作などは、すべてWindows側が解釈してくれ、適切なイベントに変換されてアプリケーションに送られる。またアプリケーションもAPIを使って、マウスの位置やボタンの状態を把握できる。

Windows 8がHIDデバイスを扱う仕組み。これはUSBの場合。HIDデバイスとして統一的に扱われたあと、マウスやタッチパッドは「MouHID.sys」「MouClass.sys」を経由してカーネルに座標が伝達される。一方、タッチパネルはHIDデバイスクラスのドライバーのあと、直接カーネルがこれを処理する

 これに対して、あとから登場したタッチデバイスは、複数ポイントを同時に指示するマルチタッチができて当然なのだが、座標をひとつだけしか報告しないポインティングデバイスとは相容れない性質を持つ。そのため、HIDデバイスとして認識したあと、Windows側で別途処理を行なう。このときに指の動きを解釈する「ジェスチャーレコグナイザー」によって、エッジスワイプ操作にチャーム表示やタスク切り替えを対応づけている。見た目は同じような操作と動作ではあるが、Windows 8内部での扱いはまったく異なるわけだ。

 こうした構造になっているため、ポインティングデバイスからの情報は、ジェスチャーレコグナイザーを通らない。逆に通ってしまうと、従来のマウスによる操作を解釈できなくなってしまうからだ。ただし、Windows 8では従来との互換性を崩さないように、画面の四隅にマウスポインターがあるかどうかを検出して、エッジスワイプ操作と同様の処理(例えばチャームの表示)を実現している。

タッチパッドはドライバー側で
エッジスワイプやピンチ操作を再現

 ポインティングデバイスではジェスチャリコグナイザーが使われないとなると、タッチパッド上でのジェスチャーはどうやって処理されているのだろうか? ポインティングデバイスの場合、大部分のドライバーはマイクロソフト自身が開発している。というのも、ポインティングデバイスのドライバー内でのエラーは、システムを操作不能にする可能性もあるからだ。

 パソコンが「フリーズ」するとよく言うが、これは特定のプロセスが暴走状態になり、CPUの処理時間を使い切ってしまったり、プログラム内で停止したまま、Windowsから制御が不能になることをいう。このような場合はマウスポインターも動かない。しかし、Windowsやアプリケーションには異常がないのに、マウスポインターが動かずボタンにも反応しなくなったとしたら、ユーザーには「フリーズ」と区別がつかない。そしてこうした状態は、マウス関連のドライバーのエラーでも起こりうる現象だ。そのためマイクロソフトはこれまで、Windowsのマウス関連のドライバーを自ら開発してきた。

 しかし信頼性向上のためとはいえ、サードパーティーによる拡張の可能性を閉ざすことはできない。例えば世の中には、ボタンが複数あるマウスやホイールなど多種多様なマウスが存在する。こうしたマウスを簡単に使えるようにするのも、Windowsの役目のひとつだ。

 そのために用意されたのが「フィルタードライバー」という仕組みだ。フィルタードライバーは、通常のドライバー階層の途中、マウスクラスドライバーとカーネルの間に配置されるデバイスドライバーの一種で、ここを流れる「コマンドパケット」(ドライバー間でやりとりされるデータ)を処理して、付加機能を実現する仕組みだ。

 USBのHIDデバイスは、デバイスとホストの間でやりとりする情報の形が決まっている。例えばボタンの数や座標形式が変わっても、一定の手順で扱える。そのため、マウスHIDドライバーでは最低限を処理して、他の情報には手を付けずに上位に流すようになっている。フィルタードライバーは、こうした情報(例えば4つめのボタンクリック)などを処理できる。

 マルチタッチ対応のタッチパッドでは、こうした付加情報をこのフィルタードライバーなどで処理し、システム側の対応するメッセージ、例えばチャームを表示するためのキーメッセージに変換する。これにより、タッチパッドで右端からのスワイプ操作が行なわれたことを検出したら、チャーム表示を行なうメッセージをWindows 8側へ送る。

 これに対して、タッチパネルからのタッチ情報(複数の座標の可能性がある)は、まずジェスチャーかどうかを判定する。ジェスチャーではない操作は、イベントとして該当のアプリケーションに通知される。スワイプやピンチなどのジェスチャーは先にシステム側で判別されて、必要に応じてアプリケーションにイベントが渡る。アプリケーションが受け取ったタッチ情報を元に、独自のジェスチャーを認識するといったことも可能だ。

 ちなみにデスクトップモードでは、必要に応じてタッチ操作がマウスやキー操作に置き換わる。例えば、メモ帳のようにタッチを考慮していないアプリに対しては、スクロールメッセージなどに変換されて通知される。このあたりのメカニズムは、マウスのホイール操作とほとんど同じである。


 Windows 8では、大きなタッチパッドを装備することを推奨しており、スペースに余裕のあるマシンでは、今後大きなタッチパッドの採用が増える可能性が高い。また最近では、タッチパッドの左右ボタン部分が、見た目上一体になったタッチパッドも増えている。

 Windows 8でタッチパッドでジェスチャーを使えるように推奨されていることから、タッチパッドでタップで使う傾向が増加するかもしれない。そうするとボタンの利用が減ってしまう可能性も出てきたわけだ。クラムシェル型ノートパソコンでも、液晶ディスプレーをタッチパネルにした製品も登場してきた(特集記事参照)。Windows 8の普及は小さいながらも、クラムシェル型ノートのデザインを変えていく可能性を持つといっていいだろう。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン