sside.net

Windowsでハイバネーション後、キーリピート間隔が初期設定に戻る問題について

ノートPCを持ち歩くとき、そんなに頻繁に開けたり閉めたりしないので、スリープの代わりにハイバネーションを使ってるんですが、これ復帰時にコントロールパネル > キーボードから設定してたキーリピート設定が、OSのデフォルトに置き換わるのな…。

症状自体は確かThinkPad X301でVista使ってた頃から存在してたし、その頃は「まあ仕方ねえか」で諦めてたんですが、Windows 10のこのご時世になっても全く直ってねえのには閉口する。

どうやって対処するんだよと軽く調べたら、世間では大体こんな感じの模様。

  • OSのキーリピートデフォルト値のレジストリを書き換える [HKEY_CURRENT_USER\Control Panel\Keyboard]
  • OSのアクセシビリティ設定でキーリピート間隔を設定する [HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response]
  • キーボード設定を更新してくれるユーティリティを常駐させる

んで、レジストリ書き換えてもいいんだけど、本来違う目的のアクセシビリティ設定変更するのもなんか抵抗あるなー、と思ったので別の方法調べてたら、Windowsには昔からmodeなるコマンドが存在しており、キーリピート間隔も普通にそこから設定できる模様。

mode con rate=32 delay=0

で、コントロールパネルのキーボード設定でリピートレートとリピート待ち時間を最速にしたのと同じ設定になる、というか設定できる段階数もキーボード設定と一致してる。実行後キーボード設定を開くと、値も書き換わってるので、実質的に同じ設定のCUI版っすね。

多分同じことで困ってる人もいるだろうから、ハイバネーション復帰時に実行させる場合は、上記に@echo off追加したうえで拡張子.batにして保存、タスクスケジューラで新規タスクを作成して以下の設定に。

  • 全般
    • ユーザーがログインしているときのみ実行
    • 表示しない(これ設定してもプロンプト出た気がするが、あんまり気にしてない)
  • トリガー
    • ワークステーション アンロック時
    • 特定のユーザ: 自分のアカウント
    • 停止するまでの時間: 30分(別に設定してもしなくてもいい)
  • 操作
    • プログラムの開始
    • プログラム/スクリプト
      • 保存した.batファイル
    • 開始
      • .batファイルの保存先のパスを指定しておく(不要かも知れないけど、ないと動かなかった)
  • 条件
    • 電源接続時のみ実行する類のオプションは外す
  • 設定
    • 既存のインスタンスの停止(別に設定しなくてもいい)

こんな感じでタスクを登録して、手動で設定して問題が起きなければ(実行結果はタスクスケジューラの表示のリフレッシュが必要)、実際にハイバネーションして適切にキーリピート間隔が設定されてるか確認したら終わり。

レジストリも弄らず、ノンプログラミングでできる対処法があるのに、何故か軽く検索しても日本語で紹介してる向きが見当たらなかったので、とりあえずエントリーに。にしても、同じ問題で困ってるケースってそんなにねえのかなあ。ハイバネーションが使われてないか、そもそもキーリピート間隔の設定とかそうそう弄られてないのか。