;---------- ---------- ---------- ---------- ---------- ; 作成者のURL ---> http://www.setsuki.com/ ;---------- ---------- ---------- ---------- ---------- #include "advapi32.as" ;========== ========== ========== ========== ========== ; レジストリの操作 [ 最終更新日:2008/04/10 ] ;---------- ---------- ---------- ---------- ---------- ; ; ■ regkey - レジストリキー指定 ; ; ■ setreg - レジストリ書き込み ; ; ■ getreg - レジストリ読み出し ; ; ■ regkill - レジストリキー削除 ; ; ■ reglist - レジストリ一覧取得 ; ;---------- ---------- ---------- ---------- ---------- ; ; hspext と同じ操作ですので ; 詳細は、HSPのヘルプを見てください。 ; ま、要するに、hspext を ; モジュール化した感じです。(^^; ; ;========== ========== ========== ========== ========== #define HKEY_CURRENT_USER 0 ;0x80000001 #define HKEY_LOCAL_MACHINE 1 ;0x80000002 #define HKEY_USERS 2 ;0x80000003 #define HKEY_CLASSES_ROOT 3 ;0x80000000 #define HKEY_DYN_DATA 4 ;0x80000006 #define HKEY_PERFORMANCE_DATA 5 ;0x80000004 ;---------- ---------- ---------- ---------- ---------- #module #define KEY_ALL_ACCESS 0xF003F #define REG_BINARY 3 ;バイナリデータ #define REG_DWORD 4 ;32ビット整数 #define REG_DWORD_BIG_ENDIAN 5 ;バイト順がWindowsと逆の32ビット値 #define REG_EXPAND_SZ 2 ;展開前の環境変数( 例えば %PATH% ) #define REG_LINK 6 ;Unicodeシンボリック #define REG_MULTI_SZ 7 ;二つのVBNULLCHARで終わる文字列 #define REG_NONE 0 ;未定義のタイプ #define REG_RESTORE_LIST 8 ;デバイスドライバリソースリスト #define REG_SZ 1 ;文字列 ;---------- ---------- ---------- ---------- ---------- #deffunc reginit ;最初に使用する変数を設定 Key.0 = 0x80000001 Key.1 = 0x80000002 Key.2 = 0x80000003 Key.3 = 0x80000000 Key.4 = 0x80000006 Key.5 = 0x80000004 Type.0 = REG_DWORD Type.1 = REG_SZ Type.2 = REG_BINARY return ;---------- ---------- ---------- ---------- ---------- #deffunc regend onexit ;最後にレジストリキーを閉じる if hkey : RegCloseKey hkey : hkey=0 return ;---------- ---------- ---------- ---------- ---------- #deffunc regkey int p1, str kname, int p2 mref stt,64 if(p1<0)||(p2>5) : stt=1 : return ;以前のレジストリキーを閉じる if hkey : RegCloseKey hkey : hkey=0 ;文字列をコピー sdim subkey, strlen(kname)+1 : subkey=kname if p2 == 0 { ;レジストリキーを開く RegOpenKeyEx Key.p1, varptr(subkey), 0, KEY_ALL_ACCESS, varptr(hKey) } else { ;新しいレジストリキーを作成 RegCreateKeyEx Key.p1, varptr(subkey), 0, varptr(class), 0, KEY_ALL_ACCESS, 0, varptr(hKey), 0 } return ;---------- ---------- ---------- ---------- ---------- #deffunc setreg var p1, str kname, int p2, int p3 mref stt,64 if(hKey == 0)||(p2<0)||(p2>2) : stt=1 : return if(p1 == 1): size = strlen(p1) : else { if(p1 == 2): size = p3 : else : size = 4 } ;文字列をコピー sdim subkey, strlen(kname)+1 : subkey=kname ;データを書き込む RegSetValueEx hKey, varptr(subkey), 0, Type.p2, varptr(p1), size return ;---------- ---------- ---------- ---------- ---------- #deffunc getreg var p1, str kname, int p2, int p3 mref stt,64 if(hKey == 0) : stt=1 : return ;文字列をコピー sdim subkey, strlen(kname)+1 : subkey=kname if p3<1 { ; p3 が 1以下だった場合は、サイズを取得 RegQueryValueEx hKey, varptr(subkey), 0, 0, 0, varptr(size) } else { size = p3 } ;データを取得する RegQueryValueEx hKey, varptr(subkey), 0, 0, varptr(p1), varptr(size) return ;---------- ---------- ---------- ---------- ---------- #deffunc regkill int p1, str kname mref stt,64 if(p1<0)||(p2>5) : stt=1 : return ;文字列をコピー sdim subkey, strlen(kname)+1 : subkey=kname ;レジストリキーを削除 RegDeleteKey Key.p1, varptr(subkey) return ;---------- ---------- ---------- ---------- ---------- #deffunc reglist var p1, int p3 mref stt,64 if(hKey == 0) : stt=0 : return dim time,2 : p1="" : notesel p1 sdim name,256 : num=0 if p3 == 0 { ;レジストリキーが持つ値を列挙します repeat : size=256 RegEnumValue hKey, cnt, varptr(name), varptr(size), 0, 0, 0, varptr(time) if stat = 259 : break noteadd name : num++ loop } else { ;レジストリキーのサブキーを列挙します repeat : size=256 RegEnumKeyEx hKey, cnt, varptr(name), varptr(size), 0, 0, 0, varptr(time) if stat = 259 : break noteadd name : num++ loop } noteunsel : stt = num return ;---------- ---------- ---------- ---------- ---------- #global reginit ;<-消しちゃダメ