VB2003で レジストリを格納する
レジストリを格納するために、以下のように宣言し、
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal Reserved As Integer, ByVal lpClass As String, ByVal dwOptions As Integer, ByVal samDesired As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Integer, ByRef lpdwDisposition As Integer) As Integer
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByRef lpData As String, ByVal cbData As Integer) As Integer
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer
以下のようなコードで、ユーザーエージェントをmozillaからoperaへ(またはoperaからmozilla)書き換えようとしていますが、うまくいきません。
問題点1.同じuser agentの下に”(既定)”が2つできてしまう
問題点2.データが正しく(operaと)書き込まれず、文字化けしたものが書き込まれている。
C言語用のサンプルやVB6.0のサンプルは見ますが、VB2003ではどのように指定するのか、わかりませんでした。
Dim ret As Long
Dim hKey As Long, lngDisposition As Long
Dim udt As SECURITY_ATTRIBUTES
Dim myroot_key As String, mysub_key_user_agent As String, myName As String,StrValue As String
myroot_key = &H80000002 '"HKEY_LOCAL_MACHINE" を指定している
mysub_key_user_agent ="Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent"
myName = "(既定)"
strValue="Opera"
ret = RegCreateKeyEx(myroot_key, mysub_key_user_agent, 0&, vbNullString, _
0, &H4 Or &H2, udt, hKey, lngDisposition)
If ret = 0 Then ret = RegSetValueEx(hKey, myName, 0, 1, strValue, Len(strValue) + 1)
RegCloseKey(hKey)
補足
自己解決しました。 今回は、シリアライズでの保存になりました。 ワードパットなどで開いて値を手軽に書きかえられるのは 避けたかった為に。 参考にしたURL ttp://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200705/07050013.txt