2012年1月12日木曜日

Windows7 64bitではIntel製のCPUを使っていてもAMD用のDevConを使う

私のPCは起動時にUSBマウスが正常に動かないことがあります。 ボタンは認識しているけどカーソルが動かない状態。 USBケーブルを抜き差しすれば直ります。 今までそうしてました。 しかし、PC本体を机の下に置いてるので「PC起動→マウス不具合→抜き差し」が微妙に面倒でした。

「何とかならんかなぁ」と色々やってみたらデバイスマネージャで「無効→有効」とすれば直るのを発見。 さらにコマンドラインでデバイスマネージャの一部機能を扱えるDevConというソフトも発見しました。

「これでバッチファイル1発でマウスの誤認識を直せる」と喜んでたらこのアーカイブにはi386版とIA-64版しか入っていない模様。 Core i7などのx64 CPUを積んだPCでこの2つの実行ファイルは正常に動きません。

IA-64版は起動しないのですぐ使えないのが分かります。 i386版は一部機能しか動きません。 デバイスの検索とかはできるんですよ。 しかし肝心の「デバイス無効→有効」の切り替えができない。 この「一部機能しか動かない」ってのが分かりづらいので注意です。 私はそこに気付かずに少し時間を無駄にしてしまいました。

結論から言うと、Intel製のx64 CPUを積んだPCで「デバイス無効→有効」を切り替えるにはamd製の64bit CPU向けのDevConを使うといいらしいです。 他の機能が全部動くかは試してませんが「無効→有効」の切り替えは機能しました。 amd64版のDevConはWDKに含まれています。

なんでそんなことになっているのかは不明。 DevConで色々検索したけど、このことが明記されているページって見当たらなかったんですよね。 どこかに明記されてて詳しい人にとっては当たり前なのかもしれませんが、「マウスの認識直したい」ってだけの私が見つけることは出来ませんでした。 amd64用のDevConを使ってみたのは偶然なんです。 他の人のサイトを見て「i386向けのDevConのバージョンが違うな? WDKに最新のDevConが入ってるんだ。こっちのi386版のヤツなら動くかなぁ。動かないなぁ。amd向け? まさかね... 」で発見。 ええ!?

...そんな経緯はどうでもいいですよね。 いつも通りダラダラな文章になってきたのを反省して、以下「DevConを使ったUSBマウスの認識のやり直し」について書きます。 備忘録です。

環境はこんな感じ。

  • OS : Windows7 home 64bit SP1
  • CPU : Intel Core i7-2600
  • マウス : AOpen Optical Mouse O-23G

まずはWDKの入手です。

さらっと説明を読んだら「WDKの入手方法」からリンクをたどってWDKをダウンロードします。 見ての通り、WDKはデバイスドライバーの開発キットです。 そんな開発をする気は全くないのでToolsだけインストールします。 isoイメージをマウントしたりアーカイバで開いたりしてKitSetupを実行。 「Tools」をチェックしてインストール。

DevConはコマンドラインツールなのでインストール先のメモを忘れずに。 デフォルトのDevConのパスは「C:\WinDDK\バージョン\Tools\devcon」です。 その下に各環境向けのフォルダがあります。 今回使うのはamd64向けの実行ファイルなので、

C:\WinDDK\バージョン\Tools\devcon\amd64\devcon.exe

を使います。

DevConは管理者用コマンドプロンプトで呼び出します。 キーボードのウィンドウズキーを押すとスタートメニューの「プログラムとファイルの検索」にフォーカスがあっているのでそのまま「cmd」→「Ctrl+Shift+Enter」と入力。 これで管理者権限のcmd.exeが起動できます。 普通に起動するときと違って、起動時にユーザーアカウント制御のダイアログが出ます。 そしてウィンドウのタイトルに「管理者: C:\Windows\system32\cmd.exe」と「管理者」の文字が付きます。

一応、マウスカーソルが動かないときの操作ということでこう書きましたが、cmd.exeにマウスカーソルをあわせて「Ctrl+Shiftを押しながらクリック」でもOKです。 ただし、起動するのはcmd.exeでなくてはならず、「アクセサリ/コマンドプロンプト」では管理者権限にならないので注意。 「プログラムとファイルの検索」でcmd.exeを探して実行します。

コマンドプロンプトで次のコマンドを打てば「高確率で」マウスが正しく認識しなおされました。

cd %WinDDKインストール先%\Tools\devcon\amd64
devcon disable "ハードウェアID"
devcon enable "ハードウェアID"

「必ず」ではないのが残念です。 正常なときに試したらカーソルが動かなくなってしまったこともありました。 まぁ、何度かやれば動くのでいいんですけどね。

ハードウェアIDは前もって調べておきます。 ハードウェアIDを調てクリップボードにコピーする方法は次の通りです。

  1. スタートメニューの「デバイスとプリンター」をクリック。 スタートメニューにない場合はコントロールパネルの「ハードウェアとサウンド」から選択できる。
  2. 認識させたいマウスを右クリック→「プロパティ」メニューをクリック。 「マウス設定」メニューを選んでしまうと、「ハードウェア」タブに全てのポインティングデバイスが出てきてしまうので「プロパティ」の方が良さそう。
  3. マウスのプロパティダイアログで「ハードウェア」タブを選択。 「HID準拠マウス」と「USB入力デバイス」が表示されるが、どちらからでもIDが取れる。 どちらかを選んで「プロパティ」ボタンをクリック。
  4. デバイスのプロパティダイアログで「詳細」タブを選択。 プロパティ選択リストで「ハードウェアID」を指定。 値がいくつか表示されるが、VIDとPIDを含んだ一番長いヤツが必要な値。 右クリック→「コピー」メニューをクリック。

さっきのコマンドのハードウェアIDのところを埋めるとこうなります。

cd %WinDDKインストール先%\Tools\devcon\amd64
devcon disable "USB\VID_09DA&PID_0006&REV_0001"
devcon enable "USB\VID_09DA&PID_0006&REV_0001"

とりあえずこれでUSBマウスを再認識するところまで確認しました。

今は「こういうバッチファイルを作ればいいかなぁ」とか、「disable → enableの代わりにrestartだけでもいいんじゃ? ならショートカットだけでも良さそう。ショートカットはスタートメニューに登録して...」とか考えているところです。 ただまぁ、最近マウスの認識率が高いのでバッチファイルとかショートカットとかの動作確認はしていなかったり。

...1/13追記

スタートメニューに次のようなショートカットを作成して実行するとマウスの認識をやり直すことができました。

  • 「C:\Users\All Users\Microsoft\Windows\Start Menu\Programs」にショートカットを作成。
  • ショートカットのプロパティを開き、ショートカットタブでリンク先を「%WinDDKインストール先%\Tools\devcon\amd64\devcon.exe restart "USB\VID_09DA&PID_0006&REV_0001"」に設定。
  • ショートカットタブでショートカットキーを「Ctrl + Alt + M」に設定。
  • 互換性タブで「管理者としてこのプログラムを実行する」をチェック。

ショートカットキーを設定したおかげでキーボードだけでマウスを直せるように。 根本的な解決ではありませんが、USBの抜き差しに比べてかなりの改善です。