レジストリを書き換えるには |
---|
レジストリ書き換え関数(RegistryEdit) |
---|
RegistryEdit ソースプログラム1
Function RegistryEdit(ByVal Key As String, ByVal Name As String, _ ByVal PutValue As String, ByVal ValueType As String) As Long Dim hWnd As Long 'オープンされたキーのハンドル Dim cbData As Long '書き込むデータの文字数 Dim Buff() As Byte '書き込むデータ Dim SecurityAttributes As SECURITY_ATTRIBUTES 'セキュリティ属性 Dim rc As Long '関数の戻り値 Dim RootKey As Long 'キー名の左端の情報("HKEY_LOCAL_MACHINE") Dim SubKey As String 'サブキー名("Software\MakerName\SoftName\Paramater") Dim dwType As Long '書き込むデータの型 Dim i As Integer 'カウンタ 'ルートキーの取得 Select Case UCase(Mid(Key, 1, InStr(1, Key, "\") - 1)) Case Is = "HKEY_CLASSES_ROOT" RootKey = HKEY_CLASSES_ROOT Case Is = "HKEY_CURRENT_CONFIG" RootKey = HKEY_CURRENT_CONFIG Case Is = "HKEY_CURRENT_USER" RootKey = HKEY_CURRENT_USER Case Is = "HKEY_DYN_DATA" RootKey = HKEY_DYN_DATA Case Is = "HKEY_PERFORMANCE_DATA" RootKey = HKEY_PERFORMANCE_DATA Case Is = "HKEY_USERS" RootKey = HKEY_USERS Case Is = "HKEY_LOCAL_MACHINE" RootKey = HKEY_LOCAL_MACHINE Case Else End Select 'サブキーの取得 SubKey = Mid(Key, InStr(1, Key, "\") + 1) |
RegistryEdit ソースプログラム2
01> '書き込むデータの種類を決め、それぞれの種類にデータを対応させる 02> Select Case UCase(ValueType) 03> Case Is = "STRING" 04> dwType = REG_SZ 05> cbData = Len(PutValue) 06> Buff() = String(cbData, vbNullChar) 07> Buff() = StrConv(PutValue & Chr(0), vbFromUnicode) 08> Case Is = "BINARY" 09> dwType = REG_BINARY 10> '配列のサイズを変更 11> ReDim Buff(Len(PutValue) / 2) 12> '左端から2文字ずつ16進数に変換して、Buff に代入 13> For i = 0 To Len(PutValue) / 2 - 1 14> Buff(i) = CLng("&h" & Mid(PutValue, i * 2 + 1, 2)) 15> Next i 16> 'バイナリは、2文字で1バイト 17> cbData = Len(PutValue) / 2 18> Case Is = "DWORD" 19> 'DWORD とは、32ビットの符号無し整数 20> dwType = REG_DWORD 21> ReDim Buff(4) 22> '10進数から16進数に変換して、PutValue に代入 23> PutValue = Hex(CLng(PutValue)) 24> '8桁に固定する 25> PutValue = Right("00000000" & PutValue, 8) 26> '2文字ずつ取り出して数値に変換し、PutValue に代入 27> For i = 0 To 3 28> Buff(3 - i) = CLng("&h" & Mid(PutValue, i * 2 + 1, 2)) 29> Next i 30> cbData = 4 31> Case Else 32> End Select |
RegistryEdit ソースプログラム3
'セキュリティ属性を決定 With SecurityAttributes .nLength = Len(SecurityAttributes) .lpSecurityDescriptor = 0 .bInheritHandle = 1 End With 'キーをオープンする rc = RegOpenKeyEx(RootKey, SubKey, 0, KEY_QUERY_VALUE, hWnd) 'オープンに成功したならば、書き込みを実行 If rc = ERROR_SUCCESS Then rc = RegSetValueEx(hWnd, Name, 0, dwType, Buff(0), cbData) rc = RegCloseKey(hWnd) RegistryEdit = 0 Else RegistryEdit = 1 End If End Function |