よく使うレジストリの読み書きはJScriptで書きためていたりする。
その中から必要なことをまとめた。
レジストリの種類
名前空間がある。名前空間でレジストリを管理されている。ユーザー・システム毎に管理されている。
RegRead、RegWriteで指定する。
http://www.atmarkit.co.jp/fwin2k/win2ktips/453regaccess/regaccess.html
ルート・キー 省略名 概要 HKEY_CURRENT_USER HKCU 現在ログイン中のユーザーに関する諸設定 HKEY_LOCAL_MACHINE HKLM システム全体、全登録ユーザーに関する設定情報 HKEY_CLASSES_ROOT HKCR 拡張子やアイコン情報など、Windowsで扱うファイル全般に関する情報を管理 HKEY_USERS HKU ユーザー別の設定を管理 HKEY_CURRENT_CONFIG HKCC ハードウェア設定などの設定
レジストリ用語
レジストリで使う用語。「型」に関するものは最初は戸惑う。レジストリに格納されるデータは専用の名称を持つ。
データ型 概要 REG_SZ 文字列 REG_DWORD 整数 REG_BINARY 2進数(VBArray) REG_EXPAND_SZ 展開可能な文字列(例:%JAVA_HOME%\bin) REG_MULTI_SZ 文字列配列(VBArray) 値エントリのデータ型
http://www.atmarkit.co.jp/fwin2k/win2ktips/453regaccess/regaccess.html
ま、別に知らなくても良いけど。
レジストリを読み込む
//壁紙を読み込む var WshShell=new ActiveXObject("WScript.Shell") key = "HKCU\\Software\\Microsoft\\Internet Explorer\\Desktop\\General\\Wallpaper" value = shell.RegRead(key) WScript.Echo(value) //壁紙パス
レジストリに書き込む
//壁紙を読み込む var WshShell=new ActiveXObject("WScript.Shell") path = "%USERPROFILE%\\Pictures\\壁紙\\201004_b_1280.jpg" key = "HKCU\\Software\\Microsoft\\Internet Explorer\\Desktop\\General\\Wallpaper" shell.RegWrite( wallpaper_key_path, paths[0], "REG_EXPAND_SZ" )//書き込み //UpdatePerUserSystemParameters を実行して反映させる。 shell.Run( "RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters ",1,true)
レジストリが簡単に変更できることが分かる。
レジストリを反映させる
//UpdatePerUserSystemParameters を実行して反映させる。 shell.Run( "RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters ",1,true)
UpdatePerUserSystemParameters の実行はタイミングがうまく行かなくて、壁紙が変更されないこともある。
Explorerを再起動する。
レジストリを無理矢理反映させるため、Explorerを消してみるとか。
/** * WMI をWSHから起動して引数に一致するなまえのプロセスを殺す。 * @argment program_name プログラム名(たいていは ***.exe) */ function TerminateProcess( program_name ){ var strComputer = "."; var name = "winmgmts:\\\\" + strComputer + "\\root\\CIMV2"; var oWmis = GetObject(name); var cols = oWmis.ExecQuery("SELECT * FROM Win32_Process WHERE Caption = '"+ program_name +"'") var list = new Enumerator(cols) for(;!list.atEnd(); list.moveNext()){ var proc = list.item(); proc.terminate() } } if( WScript.Arguments.Length > 0 ){ var name = WScript.Arguments.Item(0) DesktopFolder( name ) TerminateProcess("explorer.exe"); }
レジストリのサブキーを列挙して表示する。
var locator = new ActiveXObject("WbemScripting.SWbemLocator"); var server = locator.ConnectServer(null, "root\\default"); var registry = server.Get("StdRegProv"); var method = registry.Methods_.Item("EnumKey"); var iParams = method.InParameters.SpawnInstance_(); iParams.hDefKey = 0x80000000; // HKEY_CLASSES_ROOT iParams.sSubKeyName = ""; var result = registry.ExecMethod_(method.Name, iParams); var keys = result.sNames.toArray(); for (var i = 0, l = keys.length; i < l; i++) { WScript.Echo(keys[i]); }http://moz-addon.g.hatena.ne.jp/ZIGOROu/20070808/1186562694
サブキーを列挙して、find 的な事をやりたいな。とおもったけど面倒だ。
特定のキーを探して消したいとか手作業でイイヤ。