Windows TIPS
[User Interface]
  windows tips topへ
windows tips全リストへ
内容別分類一覧へ

[Power]キー、[Sleep]キーに注意

デジタルアドバンテージ
2000/04/29

 複数のアクションによる操作を行わなくても、典型的なPCの操作を初心者が簡単に行えるように、大手メーカー製PCなどを中心として、Webブラウザの起動用ボタンや電子メール アプリケーションの起動ボタン、音楽CDプレイヤーの再生ボタンなどをキーボードに追加する例が増えている。これらのボタンを操作することで、ユーザーはワン アクションで目的の操作を行えるようになる(マイクロソフトは、これらのボタンを総称して「ホットキー」と呼んでいるようだ)。特別なボタンなどなくても、目的の操作を行える経験豊富なユーザーにとっては、このようなボタンは無用の長物でしかなかったりするのだが、デスクトップのどこに何があるのか分からないような初心者にとっては便利な存在であろう。

 しかし中には、経験豊富なユーザーにとっても便利なホットキーがある。それはPCの電源をオン/オフしたり、サスペンド/レジュームしたりするための[Power]キーや[Sleep]キーである。ソフトウェア側のサポートも必要だが、これらのキーの役割はそれぞれ文字どおり、PCの電源をオフにする、PCをサスペンドするというものだ。つまりPC本体のスイッチを操作しなくても、手元にあるキーボードからこれらの操作を行えるわけだ。以下に示したのは、マイクロソフトが販売している「ナチュラルキーボード プロ」の例である。

マイクロソフト ナチュラルキーボード プロ

人間工学の専門家の意見を取り入れ、両手を自然な角度に保ったままキー入力を可能にしたキーボード。写真の上端にずらっと並んだ青い小さなスイッチが「ホットキー」群である。
 

ナチュラルキーボード プロの[スリープ]ボタン

ナチュラルキーボード プロでは、テンキー上の右端に[スリープ]ボタンを配置している。非常に押しやすい位置ではあるが、これを間違えて押してしまうと……。

 当初これらのボタン群は、メーカーの都合に応じて独自に追加されていたようだが、Microsoftが提唱するPCの標準仕様であるPC2001のVer.0.7では、[Power]や[Sleep]、[Wakeup]という3つのキーが標準キーとして追加され、スキャンコードが割り当てられた(このドキュメントは、MicrosoftのWebサイトからダウンロードすることができる)。

一見すると便利なキーだが……

 一見すると便利なようにも思えるが、これらのキーを誤操作すると致命的な事態が起こる。結論から言えば、このボタンを押すと、システムが強制的に終了され、電源がオフにされてしまうのである。最大の問題は、たとえ編集作業中のアプリケーションがあったとしても、作業ファイルを保存する間もなく、電源がオフにされてしまうことだ。

 さらに、クライアントPCなら自分の作業ファイルを失うだけですむが、ファイル共有などを行っているサーバPCでは、そのサーバ上のファイルを編集しているすべてのユーザーが未保存の作業データを失うことになる。残念ながら、うっかり触ってしまったからといって、途中で電源オフの処理を停止することはできない。

 どうしてこのようなことが起こるのか? 回避する方法はあるのか? 編集部で調査した結果を以下に簡単にまとめよう。

WindowsアプリケーションとWindowsメッセージ

 Windowsアプリケーションは、Windowsシステムから逐一送られてくるメッセージを処理し続けることで、アプリケーションとしての処理を行うようになっている。たとえば『「a」のキーが押された』、[編集]−[コピー]メニューが実行された、ウィンドウ上でマウスが移動されたなど、ユーザーが行った操作内容やシステムからの制御情報は、メッセージとしてアプリケーションに通知される。そしてWindowsアプリケーション側では、送られたメッセージのうち必要なものは処理し、不要なものは無視しながら、処理を進めていく。

 たとえば、[スタート]メニューから[シャットダウン]を実行すると、そのとき実行されているすべてのWindowsアプリケーションに対し、WM_DESTROYというメッセージが送られる(WMはWindows Messageの略)。このメッセージを受け取ったアプリケーションは、アプリケーションの強制終了要求を受けていることを知り、必要な処理にとりかかる。具体的には、まだディスクに保存していない作業中のデータがあるときには、これを保存するかどうかをユーザーに問い合わせるダイアログ ボックスを表示する。このため万一間違ってシャットダウン処理を開始してしまったときでも、作業中のデータを保存するチャンスがユーザーに与えられるわけだ。

 これに対し、前出の[Sleep]ボタンを押すと、PBT_APMQUERYSUSPENDという属性を持つWM_POWERBROADCASTメッセージがその時点で実行されているすべてのアプリケーションに送られる。名前からして、これは「サスペンド要求が発生している」という情報をアプリケーションに伝えるメッセージだと考えられる。プログラマ向けのドキュメントによれば、このメッセージに対し、BROADCAST_QUERY_DENY(「要求を拒否する」の意味だと思われる)という応答を返すアプリケーションが存在しなければ、その後Windows 2000システムは全アプリケーションにPBT_APMSUSPEND属性を持つWM_POWERBROADCASTメッセージ(「サスペンドを実行する」という最後通告だろう)を送り、システムの電源をオフにする。この際、ACPI対応のシステムなら、コントロールパネルの[電源オプション]−[詳細]タブで、[Sleep]ボタンを押されたときの処理を電源オフまたはサスペンドのいずれかから選択可能である(ただしこれはProfessional版でのみ可能。Server版では、スリープはできず、電源オフしか選択できない)。

コントロールパネルの[電源オプション]−[詳細]タブ

ACPI対応のWindows 2000 Professionalシステムでは、[詳細]タブにこのような[電源ボタン]グループが表示され、[Sleep]ボタンや[Suspend]ボタンを押したときの処理を選択できる。ただし選択できるのは[電源オフ]か[スタンバイ]のいずれかであって、[無視]という選択肢は用意されていない。
  [Sleep]ボタンが押された際の処理を[電源オフ]または[スタンバイ]のいずれかから選択する。
  [Suspend]ボタンが押された際の処理を[電源オフ]または[スタンバイ]のいずれかから選択する。

 このように、理論的には、アプリケーションがサスペンド要求を拒否することが可能だが、WM_PWERBROADCASTメッセージは、電源管理機能の追加に伴って比較的最近になって加えられたWindowsメッセージであり、(MicrosoftのOfficeアプリケーションを含めて)ほとんどのアプリケーションはこのメッセージを無視する。したがって現実には、[Sleep]キーを間違って押すと、作業中のデータは露と消える羽目になるのである。

回避策は、[Sleep]ボタンを持つキーボードを使わないこと

 ここまで読み進んだ読者の中には、「レジストリの適当な部分を編集して、[Sleep]ボタンを無効化できるのでは?」とお考えの人がいるかもしれない。しかし残念ながら、少なくとも現在のWindows 2000ではこれは不可能なようである。調査したところ、[Sleep]や[Suspend]ボタンの処理は、すべてのキーボード ドライバが共通で使用するキーボード ミニ ドライバの中で直接コーディングされており、レジストリなどでこの役割を変えたり、無効にしたりはできないようだ。理屈では、キーボード ドライバのソース プログラムをカスタマイズすれば可能であるが、そこまでするユーザーはほとんどいないだろう。

 さらに理屈を言えば、PBT_APMQUERYSUSPEND属性のWM_POWERBROADCASTメッセージを受け取ったら、BROADCAST_QUERY_DENYを返すようなWindowsアプリケーションを常に実行しておけば問題を回避できる。しかしこれも本末転倒だろう。

 残念ながら現時点での結論は、誤操作を起こすと困るような用途のWindows 2000マシンには、[Sleep]ボタンなどを持つキーボードは使わない、ということしかないようだ。 End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間