入力システムを列挙する WSH スクリプト
タイトルの通りです。「テキスト サービスと入力言語」コントロールパネルでいうと、
- 規定の言語
- HKCU\Keyboard Layout\Preload\1
- インストールされているサービス
- HKCU\Keyboard Layout\Preload 以下の値のリスト
- [追加] ボタンより追加可能な全IME
- HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts 以下のサブキーのリスト
と言う具合に、レジストリに情報が格納されているのでこれらを取得します。お蔵入りスクリプトになってしまい、もったいないのでアップします。
// // enumIme.js // // 定義済み HKEY var HKEY_CLASSES_ROOT = 0x80000000; var HKEY_CURRENT_USER = 0x80000001; var HKEY_LOCAL_MACHINE = 0x80000002; var HKEY_USERS = 0x80000003; var HKEY_CURRENT_CONFIG = 0x80000005; var HKEY_DYN_DATA = 0x80000006; // WMI の StdRegProv を使用する var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); var service = locator.ConnectServer (null, "root\\default"); var stdRegProv = service.Get ("StdRegProv"); // スクリプト ランタイム関連 var fileSystemObject = new ActiveXObject ('Scripting.FileSystemObject'); var wsShell = new ActiveXObject ('WScript.Shell'); var desktopPath = wsShell.SpecialFolders ('Desktop'); // ログファイル、Layout Text 等が SJIS では表示できない可能性があるため、ユニコードテキストで var logFile = fileSystemObject.CreateTextFile (fileSystemObject.BuildPath (desktopPath, "imecheck.txt"), true, true); // すべてのキーボードレイアウト // HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts var lmImeList = new SubKey (stdRegProv, HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control", "Keyboard Layouts"); lmImeList.getSubKeys (); // 言語バーより選択可能なキーボードレイアウト // HKCU\Keyboard Layout\Preload var preload = new SubKey (stdRegProv, HKEY_CURRENT_USER, "Keyboard Layout", "Preload"); for (var item in preload.getRegValues ()) { logFile.Write (item); // 値名は番号 logFile.Write (":"); // 値はキーボードレイアウトの番号 logFile.WriteLine (preload.regValues [item].value); // キーボードレイアウトの番号より、情報を取り出す var keyObj = lmImeList.subKeys [preload.regValues [item].value.toUpperCase ()]; if (keyObj == null) keyObj = lmImeList.subKeys [preload.regValues [item].value.toLowerCase ()]; // 情報あり if (keyObj != null) { for (var item2 in keyObj.getRegValues ()) { // 値名 "layout text" を探す if (-1 != item2.search (/layout text/i)) {// 見つかった logFile.Write (" "); logFile.Write (item2); logFile.Write ("(" + keyObj.regValues [item2].typeName + ")"); logFile.Write ("\t:"); logFile.WriteLine (keyObj.regValues [item2].value); } } } } logFile.WriteBlankLine (); // Keyboard Layouts のリスト logFile.WriteLine (lmImeList.path); writeImeList (logFile, lmImeList, ""); // ファイルを閉じる logFile.Close (); // 終了 WScript.echo ("完了しました"); // // キーボードレイアウトのリストを出力する // function writeImeList (file, keyObj, padding) { var item; var pad = padding + " "; for (item in keyObj.getSubKeys ()) { file.WriteLine (pad + keyObj.subKeys[item].name); writeImeList (file, keyObj.subKeys[item], pad); } for (item in keyObj.getRegValues ()) { file.Write (pad); file.Write (item); file.Write ("(" + keyObj.regValues[item].typeName + ")"); file.Write ("\t:"); file.WriteLine (keyObj.regValues[item].value); } file.WriteLine (); } // レジストリキーオブジェクトのコンストラクタ function SubKey (regProv, hDefKey, parentSubKey, name) { // // メンバの初期化 // this.regProv = regProv; this.hDefKey = hDefKey; this.parentSubKey = parentSubKey; this.name = name; this.path = parentSubKey + "\\" + name; this.subKeys = null; this.regValues = null; // // メソッドの定義 // // サブキーのコレクションを取得 this.getSubKeys = function () { if (!this.subKeys) { var method = this.regProv.Methods_.Item ("EnumKey"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = this.hDefKey; inParameter.sSubKeyName = this.path; var outParameter = this.regProv.ExecMethod_ (method.Name, inParameter); this.subKeys = new Array (); if (outParameter.sNames != null) { var subKeys = outParameter.sNames.toArray (); for (var i = 0; i < subKeys.length; i ++) { this.subKeys [subKeys [i]] = new SubKey (this.regProv, this.hDefKey, this.path, subKeys [i]); } } } return this.subKeys; } // キー内の値の取得 this.getRegValues = function () { if (!this.regValues) { var method = this.regProv.Methods_.Item ("EnumValues"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = this.hDefKey; inParameter.sSubKeyName = this.path; var outParameter = this.regProv.ExecMethod_ (method.Name, inParameter); this.regValues = new Array (); if (outParameter.sNames != null) { var names = outParameter.sNames.toArray (); var types = outParameter.Types.toArray (); var typeNames = new Array ( "" , // 0 "REG_SZ" , // 1 "REG_EXPAND_SZ" , // 2 "REG_BINARY" , // 3 "REG_DWORD" , // 4 "REG_DWORD_BIG_ENDIAN" , // 5 "REG_LINK" , // 6 "REG_MULTI_SZ" , // 7 "REG_RESOURCE_LIST" , // 8 "REG_FULL_RESOURCE_DESCRIPTOR" , // 9 "REG_RESOURCE_REQUIREMENTS_LIST", // 10 "REG_QWORD" ); // 11 var getTypeValues = new Array ( null, getStringValue, getExpandedStringValue, getBinaryValue, getDWORDValue, getDWORDValue, null, getMultiStringValue, null, null, null, getQWORDValue); for (var i = 0; i < names.length; i ++) { this.regValues [names [i]] = new Object (); this.regValues [names [i]].name = names [i]; this.regValues [names [i]].type = types [i]; this.regValues [names [i]].typeName = typeNames [types [i]]; this.regValues [names [i]].value = ""; var fn = getTypeValues [types [i]]; if (fn) { this.regValues [names [i]].value = fn (this.regProv, this.hDefKey, this.path, names [i]); } } } } return this.regValues; } return this; } // 文字列値取得 function getStringValue (regProv, hDefKey, sSubKeyName, sValueName) { var method = regProv.Methods_.Item ("GetStringValue"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = hDefKey; inParameter.sSubKeyName = sSubKeyName; inParameter.sValueName = sValueName; var outParameter = regProv.ExecMethod_ (method.Name, inParameter); return outParameter.sValue; } // 展開済み文字列値取得 function getExpandedStringValue (regProv, hDefKey, sSubKeyName, sValueName) { var method = regProv.Methods_.Item ("GetExpandedStringValue"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = hDefKey; inParameter.sSubKeyName = sSubKeyName; inParameter.sValueName = sValueName; var outParameter = regProv.ExecMethod_ (method.Name, inParameter); return outParameter.sValue; } // バイナリ値取得 function getBinaryValue (regProv, hDefKey, sSubKeyName, sValueName) { var method = regProv.Methods_.Item ("GetBinaryValue"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = hDefKey; inParameter.sSubKeyName = sSubKeyName; inParameter.sValueName = sValueName; var outParameter = regProv.ExecMethod_ (method.Name, inParameter); var str = ""; var ary = outParameter.uValue.toArray (); for (var i = 0; i < ary.length; i ++) { str += ary [i].toString (16) + ((i + 1) % 8)? " ": "\n"; } return str; } // DWORD 値取得 function getDWORDValue (regProv, hDefKey, sSubKeyName, sValueName) { var method = regProv.Methods_.Item ("GetDWORDValue"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = hDefKey; inParameter.sSubKeyName = sSubKeyName; inParameter.sValueName = sValueName; var outParameter = regProv.ExecMethod_ (method.Name, inParameter); return outParameter.uValue.toString (16); } // QWORD 値取得 function getQWORDValue (regProv, hDefKey, sSubKeyName, sValueName) { var method = regProv.Methods_.Item ("GetQWORDValue"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = hDefKey; inParameter.sSubKeyName = sSubKeyName; inParameter.sValueName = sValueName; var outParameter = regProv.ExecMethod_ (method.Name, inParameter); return outParameter.uValue.toString (16); } // マルチ文字列値取得 function getMultiStringValue (regProv, hDefKey, sSubKeyName, sValueName) { var method = regProv.Methods_.Item ("GetMultiStringValue"); var inParameter = method.InParameters.SpawnInstance_ (); inParameter.hDefKey = hDefKey; inParameter.sSubKeyName = sSubKeyName; inParameter.sValueName = sValueName; var outParameter = regProv.ExecMethod_ (method.Name, inParameter); return outParameter.sValue.toArray ().toString (); }
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/1936
コメント