レジストリ編集モジュール
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