ぱたへね!(出張所)

はてなダイアリーはrustの色分けができないのでこっちに来た

LispWorksでレジストリを操作する。

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