Windowsで何かのアプリの作業中、ウィンドウタイトルに「応答なし」と表示され、マウスやキーボードの入力に全く反応しないという状況は、誰もが経験したことがあるでしょう。この「応答なし」ウィンドウ、実は“偽物”だって知っていましたか?
Windows上で実行されるアプリケーションのウィンドウは、応答がない状態になると、ウィンドウタイトルに「(応答なし)」と表示してユーザーに知らせます。
「応答なし」のウィンドウを操作しようと繰り返していると、今度は「<アプリケーション名>は応答していません。プログラムを閉じると、情報が失われる可能性があります」というダイアログボックスが表示され、「プログラムを再起動します」「プログラムを終了します」「プログラムの応答を待ちます」の選択を求められます(画面1)。
この選択に答えなくても、アプリケーションが応答するようになれば、ダイアログボックスは勝手に消え、応答するようになったウィンドウに戻ります。
もう少し詳しく説明すると、“応答がない状態”とは、アプリケーションのプロセスが持つウィンドウオブジェクトが「ウィンドウメッセージ(Window Message)」に5秒(既定)以上、応答しなくなる状態を指します。マウスの左右クリック操作やキー入力操作は、ウィンドウメッセージとしてアプリケーションに送信されます。
Windowsのこの仕様は(最後の「少し詳しい」の説明を除いて)、経験上、皆さんも何となく分かっていると思います。応答しない状態であっても、クリックしてあげれば「大丈夫ですかぁー」と声を掛けているような気がしませんか。そうしてあげることで、応答が返ってくる“かもしれない”という期待も込めて。でも、その行為は、全く無駄です。症状を起こしているアプリケーションにあなたの声(クリック操作やキー入力)は届いていません。なぜなら、相手は今、そこにはいないのですから。
マイクロソフトが無料公開しているユーティリティー群「Windows Sysinternals」について、調べものをしているときに、応答なしウィンドウについて説明している公式ブログの古い記事を見つけました。
応答なしウィンドウは「ゴーストウィンドウ(Ghost Window)」と呼ばれるもので、Windows Vistaから実装された機能です。
Windowsは、ウィンドウの応答なし状態を検出すると、応答なしウィンドウを隠し、同じ場所に新しいウィンドウを作成して表示します。これがゴーストウィンドウであり、もともとのウィンドウの前回正常実行状態(last known good state)のビットマップを描画したものです。ゴーストウィンドウのウィンドウタイトルは、応答なしウィンドウのウィンドウタイトルに「(応答なし)」を追加したものになります。
そして、このゴーストウィンドウは、もともとのアプリケーションのプロセスのものではなく「デスクトップウィンドウマネージャー(dwm.exe)」の持ち物であり、“応答性がある”(Responsive)ウィンドウだということです。
Word 2013やWord 2016のウィンドウタイトルには背景があり、ウィンドウタイトルのテキストは中央に表示されますが、応答なしウィンドウのウィンドウタイトルには背景がなく、テキストが左側に表示されるのは、そういう理由です(画面2)。
また、応答なしを検出する5秒(既定)までは、ウィンドウは全く反応しませんが、5秒後にウィンドウタイトル「(応答なし)」のゴーストウィンドウに切り替わった瞬間、ウィンドウの移動が可能になります。そして、ウィンドウ内でクリックすると、「再起動」「終了する」「応答を待つ」の選択肢を提供するダイアログボックスが表示されるようになります。つまり、「(応答なし)」のゴーストウィンドウが「応答している」のです。
Copyright © ITmedia, Inc. All Rights Reserved.