レジストリ操作命令

初めに。この章で説明するレジストリを編集してパソコンがおかしくなってしまうかもしれません。

いじる前には必ずバックアップをしてください。おかしくなっても管理人は責任を負いません。

「レジストリー」というものをご存知ですか?

システム情報のデータベースで設定した情報を格納しておくところです。

Windows 3.1以前はOSやソフトの設定をiniファイルに保存していたようですが、

設定ファイルがあちこちに出来てしまうのを出来る限り少なくするために

Windows 95以降ではこの章で紹介するレジストリに格納されるようになりました。

コントロールパネルを思い出してください。

電源関係や画面の設定はどこに保存されるのかと気になったことありませんか?

レジストリには様々な情報が格納されており、同じ内容を重複して登録することが出来なくなっています。

レジストリを編集するレジストリエディターと呼ばれるものがあります。アナタのパソコンにもあるはずです。

スタートメニューの「ファイル名を指定して実行」で「regedit.exe」とすれば起動するはずです。

レジストリは普段設定の変えられないものも変更できてしまいます。大変危険ですので慎重に扱いましょう。

 

レジストリを操作するには、まずregkeyでレジストリキーを指定します。

レジストリエディタで開いてみるとマイコンピュータの下に「HKEY_…」というものがあると思います。

このキーグループをp1で指定します。番号でグループが決められていますので、ヘルプに書いていますが

	「HKEY_CURRENT_USER」は0、
	「HKEY_LOCAL_MACHINE」は1、
	「HKEY_USERS」は2、
	「HKEY_CLASSES_ROOT」は3、
	「HKEY_DYN_DATA」は4、
	「HKEY_PERFORMANCE_DATA」は5となっています。

キーネームはキーグループ下のキー(Software\\...やControl Panel\\Sound\\)を指定します。

p2でそのキーをどうするかを指定します。0又は省略で既存のキー読み込み・編集、1で新規作成。

命令としては、p2が0の場合はgetregで読み出し、1の場合はsetregで書き込みをします。

 

読み出す方のgetregから説明していきます。

p1で読み出した情報を入れる変数を指定します。

"section"は、リジストリエディタでキーグループ下のキーを選ぶと右に出てくる項目の「名前」のことです。

p2でそのセクションが形式を指定します。0で数値、1で文字列、2でバイナリ。

p3は読み出すサイズを指定します(最大64バイト)。p2で2のバイナリを選んだ時のみ有効になります。

#include "hspext.as"
	sdim reg,128
	regkey 1,"SOFTWARE\\Microsoft\\Internet Explorer\\View Source Editor\\Edito Name",0 ; 初めの1はHKEY_LOCAL_MACHINE
	if stat : dialog "読み取りに失敗しました" : stop
	getreg reg,"",1
	if stat : dialog "読み取りに失敗しました" : stop
	mes "IEでWEB上のページのソースを開く時に使用しているエディター"
	mes reg
	stop

上記のサンプルを実行した時に出てくるファイル名(フルパス)は、

このページを右クリックで出るメニューの「ソースの表示」を選んだ時に開くエディターとなっています。

 

次にsetregを解説していきます。

…といってもパラメータの指定の仕方がgetregとまったく同じですので書きません。

p1の変数が、読み込んだデータを入れるものとなるか書き込むデータになるかの違いだけです。

成功するとそれぞれcntに0が、失敗するとそれ以外の数値(多分1)が入ります。

サンプルも実際にレジストリを書き換えてしまいますので書きません。

 

…ということで次の命令reglistに入りたいと思います。

dirlistのように「\n」で区切られたデータがp1に入るので、予めp1の変数は大きめに確保してください。

p2でキーを取得するのかセクションを取得するのかを指定します。0でセクション一覧、1でキーネーム一覧。


#include "hspext.as"
	sdim list,6400
	sdim list2,6400
	regkey 0,"Control Panel",0
	reglist list,1
	objsize 320,25
	mes "コントロールパネル下のキー一覧"
	listbox index,200,list
	listbox index.2,200,list2
	index.1=-1

*main
	repeat
		if index!=index.1 : index.1=index : break
		wait 10
	loop
	notesel list
	noteget selkey,index
	regkey 0,"Control Panel\\"+selkey,0
	reglist list2,0
	objprm 1,list2
	goto *main

 

最後にレジストリーを削除するregkillを解説いたします。

この命令だけは初めにregkeyでキーグループを指定しておかなくてもいいのです。

regkillのパラメータのp1でキーグループの指定、"key-name"でキー名を指定するためです。

成功するとそれぞれcntに0が、失敗するとそれ以外の数値(コレも多分1)が入ります。

NT系では削除するキーの下にまだキーがあると削除できなくなっています。

逆の9X系は出来るわけですが9XもNTもレジストリーの編集は大変危険ですので、慎重に扱ってください。

実際にキーを削除することとなってしまうためコレもサンプルスクリプトは書きません。

以上大変危険な章でした…。