レジストリ編集モジュール
HSPでレジストリを編集するモジュールです。
・特徴
(1)WindowsのAPIを直接呼び出しているため、HSPEXT.dllを使わずにレジストリの編集と書き込みが可能です。
(2)HSPEXT.dllにない以下の機能が使えます。
レジストリのサブキーの削除
レジストリのセクションの削除
文字列・整数・バイナリ型以外の型の取得と編集
・使い方
以下のコードをコピーしてお使いください。
保存ファイル名は”regedit.hsp”です。
※HSPのcommonディレクトリに設置すると、HSP Docs Library にヘルプが自動的に追加されます。
/*
レジストリ編集モジュール
HSPでレジストリを編集するモジュールです。
※ライセンス表示
当ソースコードのライセンス表示は以下のとおりです。
ライセンスは3条項BSDライセンスに相当します。
(凡例: #著作権表示 *本条件 +免責条項)
-----------------------------------------------------------------------
# Copyright (c) 2020,SekiSekki
All rights reserved.
ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
以下の条件を満たす場合に限り、再頒布および使用が許可されます。
* ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
および下記免責条項を含めること。
* バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、
上記の著作権表示、本条件一覧、および下記免責条項を含めること。
* 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または
販売促進に、SekiSekki(SekiSekki.net)の名前またはコントリビューターの名前を
使用してはならない。
+ 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」
提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する
適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。
著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを
問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為で
あるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、
本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、
使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)
直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、
一切責任を負わないものとします。
-----------------------------------------------------------------------
*/
/*-------------------
%dll;HDL対応コメント
NewRegEdit
レジストリ編集モジュール
HSPでレジストリを編集するモジュールです。
%port
Win
%author
Copyright(C) SekiSekki
%url
https://sekisekki.net/
%note
regedit.hspをcommonフォルダにコピーして、#include でインクルードすることで使用可能。
commonフォルダ内にこのファイルが存在するとき、HSP Docs Libraryに自動的に命令が登録されます。
%group
外部拡張モジュール
///////////////////////////////////////////
%index
NewRegEdit
レジストリ編集モジュール(概要とサンプルスクリプト)
%inst
概要
レジストリ編集モジュール
HSPでレジストリを編集するモジュールです。
特徴
・HSPEXT.dllを使用せずにWindowsのレジストリの読出し、書き込みができます。
・HSPEXT.dllではサポートしていない、セクションの型の編集や、セクション型の削除ができます。
・レジストリーのキーを削除するときは、自動的にサブキーをすべて削除してからキーを削除します。
%sample
;サンプルスクリプト
#include "regedit.hsp"
NewRegEdit_init 3
st=stat
mes "NewRegEdit_init stat:"+st//レジストリの初期化
mes
mes "HKEY_CLASSES_ROOT\\.txtのキー一覧を取得"
mes NewRegEdit_list(".txt",1)
mes "HSPスクリプトエディタの設定を読み込む"
HSEDKEY="Software\\OnionSoftware\\hsed3_3"
mes "キー名"+HSEDKEY
NewRegEdit_init 0
mes "キーの最大数"+NewRegEdit_listinfo(HSEDKEY,0)
mes "キー一覧の文字数中で最大"+NewRegEdit_listinfo(HSEDKEY,1)
mes "セクションの最大数"+NewRegEdit_listinfo(HSEDKEY,2)
mes "セクション一覧の文字数中で最大"+NewRegEdit_listinfo(HSEDKEY,3)
mes "セクションのデータで最大の値"+NewRegEdit_listinfo(HSEDKEY,4)
dialog NewRegEdit_list (HSEDKEY,1),0,"キー一覧"
dialog NewRegEdit_list (HSEDKEY,0),0,"セクション一覧"
mes "winx="+NewRegEdit_get(HSEDKEY,"winx")+" type:"+NewRegEdit_getType(HSEDKEY,"winx")
mes "winy="+NewRegEdit_get(HSEDKEY,"winy")+" type:"+NewRegEdit_getType(HSEDKEY,"winy")
mes "helpdir="+NewRegEdit_get(HSEDKEY,"helpdir")+" type:"+NewRegEdit_getType(HSEDKEY,"helpdir")
mes "\nキーとセクションの存在の確認"
mes "HSEDキーの存在:"+NewRegEdit_existKey(HSEDKEY)
mes "winxセクションの存在:"+NewRegEdit_existSection(HSEDKEY,"winx")
mes "abcセクションの存在:"+NewRegEdit_existSection(HSEDKEY,"acc")
mes "abcキーの存在:"+NewRegEdit_existKey("abc")
%-------------------*/
;レジストリ編集モジュール
;Copyright(C) SekiSekki
;Version:1.0.0
;HSPでレジストリを編集するモジュールです。
#module
#include "advapi32.as"
#define HKEY_CLASSES_ROOT $80000000
#define HKEY_CURRENT_USER $80000001
#define HKEY_LOCAL_MACHINE $80000002
#define HKEY_USERS $80000003
#define HKEY_CURRENT_CONFIG $80000005
#define KEY_READ $00020019
#define KEY_WRITE $00020006
#define REG_OPTION_NON_VOLATILE $00000000
#deffunc NewRegEdit_init int p1
/*---------HDL 説明事項----------
%index
NewRegEdit_init
レジストリ編集モジュールの初期化とハイブ名(key group)の設定・再設定
%prm
P1:ハイブ名(ID)
0:HKEY_CURRENT_USER
1:HKEY_LOCAL_MACHINE
2:HKEY_USERS
3:HKEY_CLASSES_ROOT
4:HKEY_CURRENT_CONFIG
val:設定結果
int:0 正常に設定
int:-1 設定に失敗
%inst
レジストリ編集モジュールを初期化・ハイブ名(key group)を設定・再設定します。
NewRegEdit関連の命令・関数を実行する前に必ず呼び出される必要があります。
%href
regkey
%-------------------*/
HIVE=0
if p1=0{
HIVE=HKEY_CURRENT_USER
}
if p1=1{
HIVE=HKEY_LOCAL_MACHINE
}
if p1=2{
HIVE=HKEY_USERS
}
if p1=3{
HIVE=HKEY_CLASSES_ROOT
}
if p1=4{
HIVE=HKEY_CURRENT_CONFIG
}
if HIVE=0:return -1
initf=1
return 0
#defcfunc NewRegEdit_listinfo str p1,int p2,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_listinfo
レジストリ一覧のサイズ取得
%inst
レジストリ一覧のサイズを取得します。
%prm
(str P1,int P2)
P1:キー名
P2:モード
0:キーの最大数
1:キー一覧の文字数中で最大
2:セクションの最大数
3:セクション一覧の文字数中で最大
4:セクションのデータで最大の値(lpcMaxValueLen)
val:戻り値
設定結果が返ります。
int:0以上 サイズ値
int:-1 設定に失敗
%href
%-------------------*/
if initf=0{
return -1
}
if p2=0{//0:キーの最大数
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
RegQueryInfoKey hkey,0,0,0,varptr(Len),varptr(SubLen),0,0,0,0,0,0
if stat {return -1}
return Len
}
if p2=1{//1:キー一覧の文字数中で最大
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
RegQueryInfoKey hkey,0,0,0,varptr(Len),varptr(SubLen),0,0,0,0,0,0
if stat {return -1}
return Sublen
}
if p2=2{//2:セクションの最大数
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
RegQueryInfoKey hkey,0,0,0,0,0,0,varptr(Len),varptr(SubLen),0,0,0
if stat {return -1}
return Len
}
if p2=3{//3:セクション一覧の文字数中で最大
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
RegQueryInfoKey hkey,0,0,0,0,0,0,varptr(Len),varptr(SubLen),0,0,0
if stat {return -1}
return Sublen
}
if p2=4{//4:セクションのデータで最大の値(lpcMaxValueLen)
name=p1
hkey=0
ValLen=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
RegQueryInfoKey hkey,0,0,0,0,0,0,varptr(Len),varptr(SubLen),varptr(ValLen),0,0
if stat {return -1}
return ValLen
}
return -1
#defcfunc NewRegEdit_list2 str p1,int p2,str p3,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_list2
レジストリの一覧取得
%inst
レジストリの一覧を取得します。
標準拡張モジュールHSPEXT.dllの:reglistに相当する機能を有します。
%prm
(str P1,int P2,str P3)
P1:キー名
P2:モード
0:セクション一覧
1:キー一覧
P3:フィルタ
フィルタは最初の1文字のみフィルタします。
文字数が2文字以上の場合は最初の1バイトのみ取り出します。
val:戻り値
str:取得結果
int:-1 エラー
%href
reglist
%-------------------*/
if initf=0{
return -1
}
if p2=0{;セクション一覧
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
len=NewRegEdit_listinfo(name,2)
sublen=NewRegEdit_listinfo(name,3)
sdim data,sublen
sdim buf,(sublen+2)*len+2
stt=p3
filtertext=strmid(stt,0,1)
if filtertext=""{//フィルタ無しの場合
repeat len
lpcValueName=sublen+1
RegEnumValue hkey,cnt, varptr(data), varptr(lpcValueName), 0, varptr(lpType), 0, varptr(lpcbData)
if stat:break
buf+=""+data+"\n"
loop
}else{//フィルタありの場合
repeat len
lpcValueName=sublen+1
RegEnumValue hkey,cnt, varptr(data), varptr(lpcValueName), 0, varptr(lpType), 0, varptr(lpcbData)
if stat:break
if strmid(data,0,1)!filtertext:continue
buf+=""+data+"\n"
loop
}
sdim data
RegCloseKey Hkey
return buf
}
if p2=1{;キー一覧
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
len=NewRegEdit_listinfo(name,0)
sublen=NewRegEdit_listinfo(name,1)
sdim data,sublen
sdim buf,(sublen+2)*len+2
stt=p3
filtertext=strmid(stt,0,1)
if filtertext=""{//フィルタ無しの場合
repeat len
lpcValueName=sublen+1
RegEnumKeyEx hkey,cnt, varptr(data), varptr(lpcValueName), 0, 0, 0, varptr(lpcbData)
if stat:break
buf+=""+data+"\n"
loop
}else{//フィルタありの場合
repeat len
lpcValueName=sublen+1
RegEnumKeyEx hkey,cnt, varptr(data), varptr(lpcValueName), 0, 0, 0, varptr(lpcbData)
if stat:break
if strmid(data,0,1)!filtertext:continue
buf+=""+data+"\n"
loop
}
sdim data
RegCloseKey Hkey
return buf
}
return -1
#defcfunc NewRegEdit_list str p1,int p2,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_list
レジストリの一覧を取得
%inst
レジストリの一覧を取得します。
標準拡張モジュールHSPEXT.dllの:reglistに相当する機能を有します。
%prm
(str P1,int P2)
P1:キー名
P2:モード
0:セクション一覧
1:キー一覧
val:戻り値
str型:取得結果を返します。
int型:以下の値を返します。
-1:エラー
%href
reglist
%-------------------*/
if initf=0{
return -1
}
if p2=0{;セクション一覧
return NewRegEdit_list2(p1,0,"")
}
if p2=1{;キー一覧
return NewRegEdit_list2(p1,1,"")
}
return -1
#defcfunc NewRegEdit_getType str p1,str p2,local hkey,local name,local type
/*---------HDL 説明事項----------
%index
NewRegEdit_getType
セクションの型を取得
%inst
セクションの型を取得します。
%prm
(str P1,str P2)
P1:キー名
P2:セクション名
val:戻り値
int:セクションの型(下記参照)
int:-1の場合はエラー
※セクションの型の詳細は以下のとおりです。
定数名 値 意味
REG_NONE 0 定義されていない型
REG_SZ 1 文字列
REG_EXPAND_SZ 2 展開前の環境変数への参照 (例えば“%PATH%”など) が入った文字列
REG_BINARY 3 バイナリデータ
REG_DWORD 4 32ビットの数値(リトルエンディアン形式)
REG_DWORD_BIG_ENDIAN 5 32ビットの数値(ビッグエンディアン形式)
REG_LINK 6 Unicode シンボリックリンク
REG_MULTI_SZ 7 ヌル終端文字列の配列 配列はヌル文字で区切られ、連続する2つのヌル文字が配列の終端となる。
REG_RESOURCE_LIST 8 デバイスドライバのリソースリスト
REG_QWORD 11 64ビット数値
%href
%-------------------*/
if initf=0{
return -1
}
name=p1
section=p2
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return 0}
len=0
type=0
RegQueryValueEx hkey, varptr(section), 0, varptr(type), NULL, varptr (len)
if stat {
if section="":return 1//値の設定なしの場合は文字列型として扱う
return 0//定義されていない型
}
return type
#defcfunc NewRegEdit_get str p1,str p2,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_get
レジストリのセクション値を取得
%inst
レジストリのセクションの値を取得します。
hspext.dllのgetregに相当する命令です。
%prm
(str P1,int P2)
P1:キー名
P2:セクション名
val:戻り値
int型:取得結果を返します。(整数値)
str型:取得結果を返します。(文字列型)
※正常に取得できなかった場合は空欄の文字列が返されます。
%href
getreg
NewRegEdit_getType
%-------------------*/
data=""
size=0
type=NewRegEdit_getB(data,size,p1,p2)
if type=4{//int
i=0
repeat 4
poke i,cnt,peek (data,cnt)
loop
return i
}
if type=5{//int(ビッグエンディアン)
i=0
repeat 4
poke i,cnt,peek (data,3-cnt)
loop
return i
}
if type=11{//64bit int
i=0,0
repeat 4
poke i,cnt,peek (data,cnt)
loop
repeat 4
poke i.1,cnt,peek (data,cnt+4)
loop
return i.0//32ビット分だけ取得する
}
return ""+data
#defcfunc NewRegEdit_getB var b1,var b2,str p1,str p2,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_getB
レジストリのセクションの値を取得(バイナリモード)
%inst
レジストリのセクションの値をバイナリで取得します。
hspext.dllのgetregに相当する命令です。
%prm
(var B1,var B2,str P1,str P2)
B1 取得した値の書込先の変数
B2 取得した値のサイズの書込先の変数
P1 キー名
P2 セクション名
val:戻り値
int:セクションの型を返します。
int:-1の場合はエラー
%href
getreg
NewRegEdit_getType
%-------------------*/
if initf=0{
return -1
}
name=p1
section=p2
hkey=0
type=0
sdim b1
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return -1}
b2=0
RegQueryValueEx hkey, varptr(section), 0, NULL, NULL, varptr (b2)
if stat {
return -1
} else {
sdim b1,b2
RegQueryValueEx hkey, varptr(section), 0, varptr(type), varptr(b1), varptr(b2)
return type
}
return -1
#defcfunc NewRegEdit_existSection str p1,str p2,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_existSection
セクションの存在確認
%inst
レジストリのセクションが存在しているか確認します。
%prm
(str P1,str P2)
P1 キー名
P2 セクション名
val:戻り値
int:1 存在
int:0 存在しないまたはエラー
%href
%-------------------*/
if initf=0{
return 0
}
name=p1
section=p2
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return 0}
len=0
RegQueryValueEx hkey, varptr(section), 0, NULL, NULL, varptr (len)
if stat {
return 0
}
return 1
#defcfunc NewRegEdit_existKey str p1,local hkey,local name
/*---------HDL 説明事項----------
%index
NewRegEdit_existKey
レジストリキーの存在確認
%inst
レジストリのキーが存在しているか確認します。
%prm
(str P1)
P1 キー名
val:戻り値
int:1 存在
int:0 存在しないまたはエラー
%href
%-------------------*/
if initf=0{
return 0
}
name=p1
hkey=0
RegOpenKeyEx HIVE, varptr(name), 0, KEY_READ, varptr(hkey)
if stat {return 0}
return 1
///////レジストリの書き込み
#deffunc NewRegEdit_newKey str p1,local hkey
/*---------HDL 説明事項----------
%index
NewRegEdit_newKey
レジストリキーの新規作成
%inst
レジストリキーを作成します。
hspext.dllにおけるregkey の新規作成モードと同じ処理となります。
%prm
str P1
P1 キー名
stat:戻り値
int:0 キーの作成に成功
int:-1 キーの作成に失敗
%href
regkey
%-------------------*/
if initf=0{
return -1
}
hkey=0
keyname=p1
RegCreateKeyEx HIVE,varptr(keyname),0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,varptr(hkey),NULL
if stat {return -1}
return 0
#deffunc NewRegEdit_set var b1,str p2,str p3,local hkey
/*---------HDL 説明事項----------
%index
NewRegEdit_set
レジストリのセクションの作成または変更
%inst
レジストリのセクションを作成または変更します。
指定したキーまたはセクションが存在しない場合は自動的に作成します。
hspext.dllの setreg に相当する機能となります。
%prm
var B1,str p2,str p3
B1 セクションに書き込む内容
変数の型を判別し、自動的に型を設定します。
HSPの型がintの場合は整数型、
HSPの型がstr,doubleの場合は文字列型、(実数の場合は小数点以下6桁までを文字列に変換する)
それ以外の型は、エラーを返します。
P2 キー名
P3 セクション名
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
setreg
NewRegEdit_getType
%-------------------*/
if initf=0{
return -1
}
if vartype(b1)=2{;文字列
type=1
data=""+b1
len=strlen(data)
}else:if vartype(b1)=3{;実数
type=1
data=""+b1
len=strlen(data)
}else:if vartype(b1)=4{;整数
type=4
data=int(b1)
len=4
}else{
return -1;その他の型は登録できない
}
NewRegEdit_setB data,p2,p3,type,len
if stat:return -1
return 0
#deffunc NewRegEdit_setB var b1,str p2,str p3,int p4,int p5,local hkey
/*---------HDL 説明事項----------
%index
NewRegEdit_setB
レジストリのセクションの作成または変更(バイナリモード)
%inst
レジストリのセクションを作成します。
指定したキーまたはセクションが存在しない場合は自動的に作成します。
hspext.dllの setreg に相当する機能となります。
%prm
var B1,str p2,str p3,int p4,int p5
B1 セクションに書き込む内容
P2 キー名
P3 セクション名
P4 セクションの型(詳細はNewRegEdit_getTypeを参照)
P5 セクションのサイズ
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
setreg
NewRegEdit_getType
%-------------------*/
if initf=0{
return -1
}
keyname=p2
section=p3
type=p4
Len=p5
if Len<=0{
if vartype(b1)=2{
Len=strlen(b1)
}else:if vartype(b1)=4{
Len=4
}else{
retuen -1
}
}
NewRegEdit_newKey keyname
hkey=0
RegOpenKeyEx HIVE, varptr(keyname), 0, KEY_WRITE, varptr(hkey)
st=stat
RegSetValueExA hkey,varptr(section),0,type,varptr(b1),Len
st=stat
RegCloseKey hkey
if st {return -1}
return
#deffunc NewRegEdit_copyAllSections str p1,str p2,local list
/*---------HDL 説明事項----------
%index
NewRegEdit_copyAllSections
レジストリセクションの一括コピー
%inst
指定したキーにおけるセクションを全てコピーします。
%prm
str p1,str p2
P1 コピー元のキーアドレス
P2 コピー先のキーアドレス
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
%-------------------*/
if initf=0{
return -1
}
sectionlist=""+NewRegEdit_list(p1,0)//セクション一覧の取得
sdim list
split sectionlist,"\n",list
NewRegEdit_newKey p2
repeat length(list)
NewRegEdit_copySectionRename p1,p2,list.cnt,list.cnt
if stat {continue}
loop
sdim sectionlist
sdim list
return 0
#deffunc NewRegEdit_copySection str p1,str p2,str p3
/*---------HDL 説明事項----------
%index
NewRegEdit_copySection
レジストリセクションのコピー
%inst
レジストリの特定のセクションをコピーします。
%prm
str P1,str P2,str P3
P1 コピー元のキーアドレス
P2 コピー先のキーアドレス
P3 セクション名
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
%-------------------*/
NewRegEdit_copySectionRename p1,p2,p3,p3
return stat
#deffunc NewRegEdit_copySectionRename str p1,str p2,str p3,str p4,local hkey
/*---------HDL 説明事項----------
%index
NewRegEdit_copySectionRename
レジストリセクションのコピー(セクション名の変更を含む)
%inst
レジストリの特定のセクションをコピーします。(セクション名の変更を含む)
%prm
str P1,str P2,str P3
P1 コピー元のキーアドレス
P2 コピー先のキーアドレス
P3 セクション名
P4 変更後のセクション名
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
%-------------------*/
if initf=0{
return -1
}
moto=p1
saki=p2
NewRegEdit_newKey saki
if NewRegEdit_existSection(moto,p3)=0{
return -1
}
section=p3
ccection=""+p4
sdim data
type=NewRegEdit_getB(data,Len,moto,section)
hkey=0
RegOpenKeyEx HIVE, varptr(saki), 0, KEY_WRITE, varptr(hkey)
if stat {return -1}
//コピー先への書き込み
RegSetValueExA hkey,varptr(ccection),0,type,varptr(data),Len
st=stat
RegCloseKey hkey
if st {return -1}
return 0
#deffunc NewRegEdit_deleteKey str p1,local main,local address,local address2,local hkey2,local list,local hkey
/*---------HDL 説明事項----------
%index
NewRegEdit_deleteKey
レジストリのキーとその中のサブキーとサブセクションの削除
%inst
レジストリのキーとその中のサブキーとサブセクションを削除します。
hspext.dllのregkillに相当する命令です。
※コンピュータの安全上、トップキー(P1が空のとき)は削除できないようにしています。
%prm
str P1
P1 削除するキーアドレス
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
regkill
%-------------------*/
if initf=0{
return -1
}
if p1=0:return -2//トップキー(無記入)は削除できないようにする
main=p1
w=getpath(main,32)
address2=strtrim(w,2,'\\');削除する上位のキー
address=getpath(main,8);削除するキー
hkey2=0
RegOpenKeyEx HIVE, varptr(address2), 0, KEY_WRITE, varptr(hkey2)
if stat {return -1}
sl=NewRegEdit_list (main,1)//1がキー一覧
sdim list
split sl,"\n",list
repeat length(list)
if list(cnt)="":continue
NewRegEdit_deleteKey main+"\\"+list(cnt)
loop
RegDeleteKey hkey2,address
st=stat
RegCloseKey hkey2
if st {return -1}
return 0
#deffunc NewRegEdit_deleteSection str p1,str p2
/*---------HDL 説明事項----------
%index
NewRegEdit_deleteSection
レジストリのキーとその中のサブキーとサブセクションの削除
%inst
レジストリのセクションを削除します。
%prm
str P1,str P2
P1 削除するキー名
P2 削除するセクション名
stat:戻り値
int:0 書き込みに成功
int:-1 書き込みに失敗
%href
%-------------------*/
if initf=0{
return -1
}
hkey=0
address=p1
section=p2
RegOpenKeyEx HIVE, varptr(address), 0, KEY_WRITE, varptr(hkey)
if stat {return -1}
RegDeleteValue hkey,section
st=stat
RegCloseKey hkey
if st {return -1}
return 0
#global