2012年9月10日月曜日

Windows でコントロールパネルの項目を設定するスクリプト – Windows Script Host を利用し JScript によるバッチ処理を行う

1. コントロールパネルの値を設定するためのスクリプト

Windows のコントロールパネルをスクリプト(バッチ処理)により設定したい。

SnapCrab_コントロール パネル_2013-3-1_9-37-52_No-00

コントロールパネルの項目は、設定したい項目を起動した後、キーボードの操作により設定できることが多い。以下は、そのための 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引数は、コントロールパネルの項目を起動するためのコマンドを与える。起動できる対象は、以下を参照。

各項目を起動するためには、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. ショートカットからスクリプトを起動する

コントロールパネルの項目を設定する各々のスクリプトは、独自に作成する必要はない。

  1. 以下のコードをを上記のスクリプトに追加し、
  2. そのショートカットを作成して、
  3. 引数を与えることによりスクリプトを起動できる。

SnapCrab_NoName_2013-3-1_10-1-57_No-00

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 であるファイルを当該アプリケーションに関連付けてしまった場合に起こる。

SnapCrab_NoName_2013-3-1_9-54-1_No-00例えば、Aptana をインストールし、.js ファイルをアプリケーションに関連付けると、以後、上記のスクリプトは Aptana で開かれてしまう。

このときは、必ず wscript.exe でスクリプトを起動するようにしておく。

 

4. スクリプトの内容について

コントロールパネルの項目が起動していることを確認するために、AppActive メソッドを利用した。

@IT:運用 Windows管理者のためのWindows Script Host入門 第5回 WshShellオブジェクトの詳細(1) 4.キー・ストロークの送信とプログラムのアクティベーション によると、

AppActivateメソッドは、実行に成功すればTrueを、失敗すればFalseを返す。この戻り値を利用して、成功するまで待つことができる。

ループについては、JScript のプログラム フロー制御 を参照。