VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -