●APIレジストリ操作

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

情報

作者名:Choco Soft (としらたまさん?)
(勝手に改変)
引用元:なでしこでWindowsAPI【レジストリの参照】

ダウンロード

概要

 ChocoSoftさんが作られたプログラム(感謝!!)を手軽に使いやすいように変更を加えました。
 APIによるレジストリの書き込みが可能です。
 なでしこの標準命令との違い
  1. 型の指定や取得がしやすい
  2. キー単体の作成、作成したキーのハンドル入手ができる
 なお、このプログラムはレジストリを操作します。使い方を間違えるとお使いのパソコンに多大な損害を与える可能性がありますが、作者、および引用者はこのプログラムで生じたいかなる損害の責任を持ちませんのでご自分の責任でご利用ください。

サンプル

H=「HKEY_CLASSES_ROOT\.nako」のAPIレジストリ開く

H2=Hで「TestKey」をAPIレジストリキー作成

H2で「TestValue1」に「こんにちは」をAPIレジストリ書く
H2で「TestValue1」をAPIレジストリ読み、表示
H2で「TestValue1」のAPIレジストリ型確認を表示
#H2で「TestValue1」をAPIレジストリ値削除

H2で「TestValue2」にREG_DWORDの123をAPIレジストリ書く
H2で「TestValue2」をAPIレジストリ読み、表示
H2で「TestValue2」のAPIレジストリ型確認を表示
#H2で「TestValue2」をAPIレジストリ値削除

Hで「TestKey」をAPIレジストリキー削除

HをAPIレジストリ閉じる

本体

!KEY_ALL_ACCESS=$000F003F;
#-------------------------------------
!HKEY_CLASSES_ROOT=$80000000;
!HKEY_CURRENT_USER=$80000001;
!HKEY_LOCAL_MACHINE=$80000002;
!HKEY_USERS=$80000003;
!HKEY_CURRENT_CONFIG=$80000005;
#-------------------------------------
!REG_NONE=0;//型無し値
!REG_SZ=1;//文字列値
!REG_BINARY=3;//バイナリ
!REG_DWORD=4;//DWORD(32ビット)値
!REG_QWORD=11;//QWORD(64ビット)値
!REG_MULTI_SZ=7;//複数行文字列値
!REG_EXPAND_SZ=2;//展開可能文字列値
!REG_DWORD_BIG_ENDIAN=5;
!REG_LINK=6;
!REG_RESOURCE_LIST=8;
●RegOpenKeyEx(hKey,lpSubKey,ulOptions,samDesired,phkResult) =DLL("advapi32.dll","LONG RegOpenKeyExA(HKEY hKey,LPCTSTR lpSubKey,DWORD ulOptions,DWORD samDesired,PHKEY hKeyA)")
●RegCreateKeyEx(hkey,subkey,reserved,class,option,sa,psa,rehkey,state)=DLL("advapi32.dll","LONG RegCreateKeyExA(HKEY hKey,LPCTSTR subKey,DWORD reserved,LPCTSTR class,DWORD option,DWORD sa,LPCTSTR psa,DWORD rehkey,PHKEY state)")
●RegQueryValueEx(hKey,lpValueName,lpReserved,lpType,{参照渡し}lpData,lpcbData)=DLL("advapi32.dll","LONG RegQueryValueExA(HKEY hKey,LPCTSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)")
●RegSetValueEx(hKey,lpValueName,Reserved,dwType,lpData,cbData)=DLL("advapi32.dll","LONG RegSetValueExA(HKEY hKey,LPCTSTR lpValueName,DWORD Reserved,DWORD dwType,DWORD lpData,DWORD cbData)")
●RegDeleteValue(hkey,subkey)=DLL("advapi32.dll","LONG RegDeleteValueA(HKEY hKey,LPCTSTR pName)")
●RegDeleteKey(hkey,subkey)=DLL("advapi32.dll","LONG RegDeleteKeyA(HKEY hKey,LPCTSTR subkey)")
●RegCloseKey(hKey)=DLL("advapi32.dll","LONG RegCloseKey(HKEY hKey)")

●APIレジストリ開く(Sの|Sを)
 Hとは整数
 親キーとは整数
 (Sから「\」まで切り取る)で条件分岐
  「HKEY_CLASSES_ROOT」ならば、親KEY=HKEY_CLASSES_ROOT
  「HKEY_CURRENT_USER」ならば、親KEY=HKEY_CURRENT_USER
  「HKEY_LOCAL_MACHINE」ならば、親KEY=HKEY_LOCAL_MACHINE
  「HKEY_USERS」ならば、親KEY=HKEY_USERS
  「HKEY_CURRENT_CONFIG」ならば、親KEY=HKEY_CURRENT_CONFIG
  違えば、エラー発生
 RegOpenKeyEx(親KEY,S,0,KEY_ALL_ACCESS,POINTER(H))
 Hで戻る
●APIレジストリキー作成(HでSを)
 KeyHとは整数//新規作成したキーのハンドル
 Key存在とは整数//0:作成に失敗 1:新規作成 2:既に存在
 RegCreateKeyEx(H,S,0,0,0,KEY_ALL_ACCESS,0,POINTER(KeyH),POINTER(Key存在))
 もし、Key存在=0ならばエラー発生
 KeyHで戻る
●APIレジストリ読む(HでSを)
 DATAとは文字列;型とは整数;SIZEとは整数=$FF;
 DATAにSIZEを確保
 RegQueryValueEx(H,S,0,POINTER(型),DATA,POINTER(SIZE))
 DATAで戻る
●APIレジストリ書く(HでSに{=?}型のAを)
 もし、型=空ならば、型=REG_SZ
 SIZEとは整数=Aのバイト数
 もし、型=REG_DWORDならば、SIZE=4
 もし、型=REG_QWORDならば、SIZE=8
 RegSetValueEx(H,POINTER(S),0,型,POINTER(A),SIZE)
●APIレジストリキー削除(HでSを)~RegDeleteKey(H,POINTER(S))
●APIレジストリ値削除(HでSを)~RegDeleteValue(H,POINTER(S))
●APIレジストリ型確認(HでSの)
 DATAとは文字列;型とは整数;SIZEとは整数=$FF;
 DATAにSIZEを確保
 RegQueryValueEx(H,S,0,POINTER(型),DATA,POINTER(SIZE))
 型で条件分岐
  0ならば「REG_NONE」で戻る
  1ならば「REG_SZ」で戻る
  2ならば「REG_EXPAND_SZ」で戻る
  3ならば「REG_BINARY」で戻る
  4ならば「REG_DWORD」で戻る
  5ならば「REG_DWORD_BIG_ENDIAN」で戻る
  6ならば「REG_LINK」で戻る
  7ならば「REG_MULTI_SZ」で戻る
  8ならば「REG_RESOURCE_LIST」で戻る
  11ならば「REG_QWORD」で戻る
  違えば空で戻る
●APIレジストリ閉じる(Hの|Hを)~RegCloseKey(H)


総合: -
今日: -
昨日: -
  • おお、いつの間に!w きれいにまとめて頂いてありがとうございます。 -- choco (2013-02-20 08:51:46)
  • サンプルを試してみたのですが、H2で「TestValue2」をAPIレジストリ読み、表示 が「{」となってしまい。書き込んだ値が読めませんでした。 -- 名無しさん (2013-04-23 18:09:14)
  • (↑続き)、それと既存の値を型確認したい時、予め、APIレジストリキー作成を通さないと動作してくれないような感じでした。 -- 名無しさん (2013-04-23 18:10:31)
  • おおっと、そうですね -- 作者というより引用者? (2013-06-05 16:53:13)
  • 修正しときます......近いうちに -- 作者というより引用者? (2013-06-05 16:53:39)
名前:
コメント:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。