投稿時間:2005/07/29(Fri) 17:28 投稿者名:さゆり
Eメール:
URL :
タイトル:RegCreateKeyEx()の後にRegSetValueNumEx()を使ってレジストリに書き込みたい(全ソース付き)
RegCreateKeyEx()の後にRegSetValueNumEx()を使ってレジストリに書き込みたいのですが なぜか、うまくいきません。 エラーも出ていないです。 何か使い方が悪いのでしょうか?
以下、ソースです。ボタンを1つ作れば確認はできます。 ---------------------------------------- Private Const ERROR_SUCCESS = 0 '成功した場合 Private Type SECURITY_ATTRIBUTES nLength As Long '構造体のバイト数 lpSecurityDescriptor As Long 'セキュリティデスクリプタ(Win95,98, Me では無効) bInheritHandle As Long '1のとき、属性を継承する End Type
'指定のキーを作成する、キーが存在する場合はそのキーをオープンする Private Declare Function RegCreateKeyEx Lib "ADVAPI32.dll" Alias "RegCreateK eyExA" _ (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 Private Declare Function RegSetValueNumEx Lib "advapi32" Alias "RegSetValueE xA" (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
'hKeyの定数 Private Const HKEY_CLASSES_ROOT = &H80000000 'ソフトウェアの設定情報 Private Const HKEY_CURRENT_USER = &H80000001 '現在のハードウェアの設定情報 Private Const HKEY_LOCAL_MACHINE = &H80000002 'ローカルコンピュータに関する情 報 Private Const HKEY_USERS = &H80000003 '全てのユーザーの環境設定情報 Private Const HKEY_PERFORMANCE_DATA = &H80000004 'パフォーマンスデータ(windowに 関する設 定?)→どの書籍にも見当たらない Private Const HKEY_CURRENT_CONFIG = &H80000005 '特定のユーザーの環境設定情報 Private Const HKEY_DYN_DATA = &H80000006 'デバイスのステータス情報 'dwOptionsの定数 Private Const REG_OPTION_NON_VOLATILE = 0 '設定内容をレジストリに保存 Private Const REG_OPTION_VOLATILE = 1 '(この定数は無効らしい) Private Const REG_OPTION_BACKUP = 4 '(同上) 'samDesiredの定数 Private Const KEY_CREATE_LINK = &H20 'キーオブジェクトとのリンクを作 成する Private Const KEY_ENUMERATE_SUB_KEYS = &H8 'サブキーを列挙する Private Const KEY_QUERY_VALUE = &H1 'レジストリの値を取得する Private Const KEY_SET_VALUE = &H2 'レジストリの値を設定する Private Const KEY_CREATE_SUB_KEY = &H4 'サブキーを作成する Private Const KEY_NOTIFY = &H10 'レジストリの内容変更通知を要求 する 'lpdwDispositionの戻り値 Private Const REG_CREATED_NEW_KEY = &H1 'キーを新規作成 Private Const REG_OPENED_EXISTRING_KEY = &H2 '既存キーをオープンする
'レジストリキーのハンドルを解放する Private Declare Function RegCloseKey Lib "ADVAPI32.dll" _ (ByVal hKey As Long) As Long 'メッセージの文字列を指定の書式で取得する Private Declare Function FormatMessage Lib "kernel32.dll" Alias "FormatMessa geA" _ (ByVal dwFlags As Long, ByVal lpSource As Any, ByVal dwMessageId As Long, _ ByVal dwLanguageId As Long, ByVal lpBuffer As String, _ ByVal nSize As Long, Arguments As Long) As Long 'dwFlagsの定数 Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100 'nSizeデ指定したサイズ のバッ ファを確保する Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200 'バッファに引数を挿入し ない Private Const FORMAT_MESSAGE_FROM_STRING = &H400 'lpSourceはメッセージを 定義す る文字列 '(FORMAT_MESSAGE_FROM_HMODU L E、または ' FORMAT_MESSAGE_FROM_SYSTE M と組み合わせ不可) Private Const FORMAT_MESSAGE_FROM_MODULE = &H800 'lpSouceはメッセージテ ーブル リソースを '持つモジュールのハンドル '(FORMAT_MESSAGE_FROM_STRIN G と組み合わせ不可) 'lpSourceが0のとき、カレン トプ ロセスの 'モジュールを検索する Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000 'システムメッセージリソ ースを 検索する Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000 'Argumentはva_list構造 体では ない。
'(dwFlagsの下位バイトの意味を指定する定数) '0 'すべての文字を出力する Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF '出力する最大バイト数 '0 でも& HFFでもないとき 'メッセージ中の改行を無 視する Private Sub Command1_Click() Dim rc As Long, sError As String Dim lngResult As Long, lngDisposition As Long Dim udtSECURITY_ATTRIBUTES As SECURITY_ATTRIBUTES
'レジストリにキーを作成する rc = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\WinAPI\ReistryTest", 0&, vbN ullString, _ REG_OPTION_NON_VOLATILE, KEY_CREATE_SUB_KEY, udtSECURITY_ATTRIBUTES, lngResult, lngDisposition)
If rc = ERROR_SUCCESS Then If lngDisposition = REG_CREATED_NEW_KEY Then MsgBox "HKEY_CURRENT_USER\Software\WinAPI\ReistryTestにキーを作成しました" ; Else MsgBox "HKEY_CURRENT_USER\Software\WinAPI\ReistryTestのキーをオープンしました& quot; End If Else 'エラーコードからエラーメッセージを取得 sError = String(260, vbNullChar) Call FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, rc, 0, sError, Len(sError) , 0) MsgBox sError End If Call RegSetValueNumEx(lngResult, "TEST", 0, REG_DWORD, 1, 4) Call RegCloseKey(hKey) End Sub
|