タイトル | レジストリキーの値を保存する |
対象言語 | VB4.0, Access95以降 |
動作確認OS | Windows95,98,NT4.0 |
使用関数 | RegSetValueEx RegOpenKeyEx RegCloseKey |
改築日 | 1999/06/22(1998/06/18) |
Source Download |
レジストリに文字列、数値、バイナリ値 を保存します。 HKEY_CURRENT_USERキーの サブキー Software\VB and VBA Program Settings\TEST にある キー値、StringTest,DWordTest,BinaryTest に各値を保存します。 注意!! レジストリを操作するのは大変危険です。へたにいじるとWindowsが起動 しなくなるかもしれません。ご注意下さい!! |
1. フォームを作成しコマンドボタン(Command1)、を貼り付けてください。 Option Explicit Private Sub Command1_Click() Dim RootKey As Long Dim KeyPth As String Dim KeyNm As String Dim strdata As String Dim lngdata As Long Dim bytdata(10) As Byte Dim i As Integer RootKey = HKEY_CURRENT_USER KeyPth = "Software\VB and VBA Program Settings\TEST" '文字列を保存 If Y_SetRegValue(RootKey, KeyPth, "StringTest", "文字列データですぅ") = False Then Call MsgBox("レジストリの保存に失敗したよぉ (ToT)") Else Call MsgBox("文字列の保存に成功しました (^_^)v") End If 'DWORD値を保存 If Y_SetRegValue(RootKey, KeyPth, "DWordTest", 12345678) = False Then Call MsgBox("レジストリの保存に失敗したよぉ (ToT)") Else Call MsgBox("DWORD値の保存に成功しました (^_^)v") End If 'バイナリ値を保存 KeyNm = "ByteTest" For i = 0 To 10 bytdata(i) = &H61 + i Next If Y_SetRegValue(RootKey, KeyPth, "BinaryTest", bytdata) = False Then Call MsgBox("レジストリの保存に失敗したよぉ (ToT)") Else Call MsgBox("バイナリ値の保存に成功しました (^_^)v") End If End Sub |
2.モジュールウインドウを作成し、下のソースを入力してください。 Option Explicit 'サブキーを作成する Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" _ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, _ ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, _ lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long 'レジストリキーを閉じる Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long 'レジストリキーに値を保存する Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _ (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _ ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Public Const REG_OPTION_NON_VOLATILE = 0 Public Const KEY_ALL_ACCESS = &HF003F Public Const ERROR_SUCCESS = 0 Public Const REG_SZ = 1 '文字列 Public Const REG_BINARY = 3 'バイナリ Public Const REG_DWORD = 4 'DWORD値 Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Boolean End Type Public Function Y_SetRegValue(hKey As Long, SubKey As String, KeyName As String, DataValue As Variant) As Boolean '*********************************************************** '機能 : レジストリに値を保存する '引数 : hKey = 保存先サブキーの親キー ' SubKey = 保存先サブキーのパス ' KeyName = 保存先の値の名前 ' DataValue = 保存する値 '戻り値: True = 保存成功 ' False = 保存失敗 '備考 : 保存する値が DoubleやSingle型なら一旦文字型に ' 変換して保存します。 '*********************************************************** Dim longret As Long Dim phKey As Long Dim disposition As Long Dim attr As SECURITY_ATTRIBUTES Dim LongBuf As Long Dim StrBuf As String Dim ByteBuf() As Byte Dim flg As Boolean flg = False 'サブキーを作成します。 If RegCreateKeyEx(hKey, SubKey, 0&, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, attr, phKey, disposition) = ERROR_SUCCESS Then 'データのタイプ別にレジストリに書き込みます。 Select Case TypeName(DataValue) Case "Integer", "Long", "Boolean" LongBuf = DataValue longret = RegSetValueEx(phKey, KeyName, 0, REG_DWORD, LongBuf, 4) Case "Byte()" ReDim ByteBuf(UBound(DataValue)) ByteBuf = DataValue longret = RegSetValueEx(phKey, KeyName, 0, REG_BINARY, ByteBuf(0), UBound(ByteBuf) + 1) Case Else 'その他の型なら、文字列型で保存 StrBuf = CStr(DataValue) longret = RegSetValueEx(phKey, KeyName, 0, REG_SZ, ByVal StrBuf, LenB(StrBuf) + 1) End Select If longret = ERROR_SUCCESS Then flg = True End If 'レジストリキーを閉じます。 If RegCloseKey(phKey) <> ERROR_SUCCESS Then flg = False End If End If Y_SetRegValue = flg End Function |
Copyright (C)1997-2001 空耳工房 MY2Project All rights reserved. |