1. コントロールパネルの値を設定するためのスクリプト
Windows のコントロールパネルをスクリプト(バッチ処理)により設定したい。
コントロールパネルの項目は、設定したい項目を起動した後、キーボードの操作により設定できることが多い。以下は、そのための JScript による関数。
var setControlPanel = function(cmd, title, keystrokes){ var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run(cmd); do { WScript.Sleep(100); } while(!WshShell.AppActivate(title)); WshShell.SendKeys(keystrokes); };
関数の説明
関数 setControlPanel の第1引数は、コントロールパネルの項目を起動するためのコマンドを与える。起動できる対象は、以下を参照。
- @IT:Windows TIPS -- Knowledge:コントロール・パネル・アイテムをコマンドラインから呼び出す
- Windowsで覚えておくと便利な117のコマンド | IDEA*IDEA
- 117 Run Commands In Windows Xp
各項目を起動するためには、control を付ける必要がある。
第2引数は、起動したコントロールパネルの項目の、ウィンドウタイトルを与える。
第3引数は、起動したコントロールパネルの項目に対して、キーボードの操作により設定を行うための一連のキー入力を与える。キー入力の方法については、SendKeys メソッド を参照。
上記を setControlPanel.js と名前を付けて保存する。
2. スクリプトの使い方
例えば、マウスの左右のクリックを入れ替えるには、
setControlPanel("control main.cpl", "マウスのプロパティ", "{+}^{TAB}{HOME}{DOWN}{ENTER}");
サウンドのデバイスを切り替えるには、
setControlPanel("control mmsys.cpl", "サウンド", "{DOWN 2}%{s}{TAB 3}{ENTER}");
電源のプロファイルを変更するには、
setControlPanel("control powercfg.cpl", "電源オプション", "^{f}{TAB 11}{DOWN}%{F4}");
この例の場合、最初に、検索フィールドをアクティブにしないと、正常にキー入力がされなかった。
3. ショートカットからスクリプトを起動する
コントロールパネルの項目を設定する各々のスクリプトは、独自に作成する必要はない。
- 以下のコードをを上記のスクリプトに追加し、
- そのショートカットを作成して、
- 引数を与えることによりスクリプトを起動できる。
setControlPanel(WScript.Arguments.item(0), WScript.Arguments.item(1), WScript.Arguments.item(2));
ショートカットのプロパティを開き、リンク先には、
C:\Windows\System32\wscript.exe [スクリプトへのパス] [引数...]
を入力する。
ショートカットアイコンのカスタマイズ
ショートカットに独自のアイコンを設定したい場合は、以下を参照。
wscript.exe で起動しないときの注意点
追記(2013/03/01): 上記で作成したショートカットは、wscript.exe で起動しなくてもスクリプトは実行される。
ただし、JScript ファイルを実行すると、スクリプトが実行されず、スクリプトを編集するためのアプリケーションが起動することがある。それは、拡張子が .js であるファイルを当該アプリケーションに関連付けてしまった場合に起こる。
例えば、Aptana をインストールし、.js ファイルをアプリケーションに関連付けると、以後、上記のスクリプトは Aptana で開かれてしまう。
このときは、必ず wscript.exe でスクリプトを起動するようにしておく。
4. スクリプトの内容について
コントロールパネルの項目が起動していることを確認するために、AppActive メソッドを利用した。
@IT:運用 Windows管理者のためのWindows Script Host入門 第5回 WshShellオブジェクトの詳細(1) 4.キー・ストロークの送信とプログラムのアクティベーション によると、
AppActivateメソッドは、実行に成功すればTrueを、失敗すればFalseを返す。この戻り値を利用して、成功するまで待つことができる。
ループについては、JScript のプログラム フロー制御 を参照。