アプリ版:「スタンプのみでお礼する」機能のリリースについて

レジストリを格納するために、以下のように宣言し、
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)

A 回答 (1件)

Registryクラスや RegistryKeyクラスを使ったほうが簡単かも



参照設定としてファイルの冒頭で
Imports Microsoft.Win32
を追加します

ボタンのクリックイベントなどで
Dim oRegKey as RegistryKey
oRegKey = Registory.LocalMachine
oRegKey = oRegKey("レジストリーパス",True)
oRegKey.SetValue( Nothing,"opera")
といった具合でよさそうですよ

既定のデータを設定する場合 SetValueのName引数はNothingにするようです

VB2005付属のヘルプで確認してみてください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!