Common Lispでも、Windowsのレジストリを操作したいですよね。LispWorksならレジストリも楽々操作できます。
レジストリの読み出し
win32:registry-valueを使います。
(win32:registry-value "\Software\\LispWorks\\LispWorks\\5\\1\\Editor" "Input Format Default" :root :user) => ":UTF-8", T
:root に与える引数がポイントで、これでルートキーを指定します。ルートキーとそれ以降を分けて与えないと上手くアクセス出来ません。引数とルートキーの対応はこのようになっています。デフォルトでは、HKEY_USERSになっています。
:root | ルートキー |
:classes | HKEY_CLASSES_ROOT |
:user | HKEY_CURRENT_USER |
:local-machine | HKEY_LOCAL_MACHINE |
HKEY_USERS |
レジストリの変更
win32:registry-valueとsetfを組み合わせます。書き込む型に合わせて、:expected-typeを設定します。存在しない値に対してsetfを使用した場合、新たに値が作成されます。
(setf (win32:registry-value "\Software\\LispWorks\\LispWorks\\5\\1\\Editor" "Input Format Default" :root :user :expected-type :string) "Default") => "Default"
レジストリの値を列挙する。
win32:enum-registry-value を使います。2つめの引数を順に増やしていくことで、レジスリの値を順番に読み出します。
(win32:enum-registry-value "\Software\\LispWorks\\LispWorks\\5\\1\\Editor" 0 :errorp nil :root :user) => "Blink Rate", :STRING, "NIL"
レジストリの値が無いところにアクセスした場合、デフォルトではerror が呼び出されます。:errorp をnilに設定しておけば、errorではなくNILが帰ってきます。
(win32:enum-registry-value "\Software\\LispWorks\\LispWorks\\5\\1\\Editor" 5 :errorp nil :root :user) => NIL, NIL, NIL, 259
レジストリキーの作成
新しいキーの作成には win32:create-registry-key を使います。
(win32:create-registry-key "\Software\\LispWorks\\LispWorks\\5\\1\\Editor\\tmp" :root :user) => 956, :CREATED-NEW-KEY
レジストリキーの削除
キーの削除には win32:delete-registry-key を使います。
(win32:delete-registry-key "\Software\\LispWorks\\LispWorks\\5\\1\\Editor\\tmp" :root :user) => T