tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
レジストリ操作(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2009/12/27 11:31
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[レジストリ][][]                                                    *
* キーワード:レジストリエントリ,書き込み,読み込み,読み書き,終了時の状態を保存,   *
***********************************************************************************

----------------------------------------------------------------------------
No.765 RE:レジストリ的な説明  投稿者:おききん [1999/10/18(月)16:36分]
----------------------------------------------------------------------------

ども、おききんです。

VBにもレジストリ操作する関数あるけど(GetSetting等)これは
HKEY_CURRENT_USER\Software\VB and VBA Program Settings以降の階層じゃないと
操作出来ないみたいですね。
そういう場合はWIN32 APIを使ってレジストリを操作した方がいいと思います。

値の形式によって値を取得する方法が違うみたいなので、DWORD形式と
文字列形式の値を取得する方法を作りました。

ソースは以下の通りです。

'------------------------ ここから ------------------------
Option Explicit

'レジストリ共通キー(親キー)
Private Const HKEY_CLASSES_ROOT = &H80000000    'HKEY_LOCAL_MACHINEの一部
Private Const HKEY_CURRENT_CONFIG = &H80000005  'ルートのHKEY_LOCAL_MACHINEのconfig
                                                '構成に関するdisplayサブキーのリンク
Private Const HKEY_CURRENT_USER = &H80000001    '現在のユーザーの設定に対するHKEY_USERのリンク
Private Const HKEY_DYN_DATA = &H80000006        'EnumサブキーとPerfStatsサブキー
Private Const HKEY_LOCAL_MACHINE = &H80000002   'ハードウェア構成、ネットワークプロトコル、
Private Const HKEY_USERS = &H80000003           'ユーザーの作業環境設定とデスクトップの設定
                                                '???
Private Const HKEY_PERFORMANCE_DATA = &H80000004

'レジストリのデータタイプ
Private Const REG_NONE = 0                      '未定義のタイプ
Private Const REG_SZ = 1                        'NULLで終わる文字列
Private Const REG_EXPAND_SZ = 2                 '展開前の環境変数
Private Const REG_BINARY = 3                    '任意の形式のバイナリデータ
Private Const REG_DWORD = 4                     'ネイティブ形式の32ビット値
Private Const REG_DWORD_LITTLE_ENDIAN = 4       'リトルエンディアン形式の32ビット値
Private Const REG_DWORD_BIG_ENDIAN = 5          'ビッグエンディアン形式の32ビット値
Private Const REG_LINK = 6                      '別のサブキーへのシンボリックリンク
Private Const REG_MULTI_SZ = 7                  'NULLで終わる文字列のリスト

'キーアクセスオプションを定義する為に必要
Private Const SYNCHRONIZE = &H100000
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const STANDARD_RIGHTS_ALL = &H1F0000

'キーアクセスオプション
Private Const KEY_CREATE_LINK = &H20            '他のサブキーへのシンボリックリンクの作成を許可
Private Const KEY_CREATE_SUB_KEY = &H4          'サブキーの作成を許可
Private Const KEY_ENUMERATE_SUB_KEYS = &H8      'サブキーの列挙を許可
Private Const KEY_NOTIFY = &H10                 '変更通知を有効にする(WIN95は未対応)
Private Const KEY_QUERY_VALUE = &H1             'サブキーの値の参照を許可
Private Const KEY_SET_VALUE = &H2               'サブキーの書き込みを許可
                                                'KEY_CREATE_SUB_KEY + KEY_SET_VALUE
Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or _
      KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
                                                'KEY_EXECUTE + KEY_NOTIFY
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or _
      KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
                                                'KEY_CREATE_LINK + KEY_READ + KEY_WRITE
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _
      KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _
      KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
                                                'KEY_READ
Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))

'レジストリAPI
                                                'レジストリのサブキーのオープン
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
      (ByVal hKey As Long, ByVal lpSubKey As String, _
       ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
                                                'レジストリのサブキーのクローズ
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
                                                'サブキーの指定の値の取得
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
      (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
       lpType As Long, lpData As Any, lpcbData As Long) As Long

'戻り値
Private Const ERROR_SUCCESS = 0&                'エラー無し


Private Sub Form_Load()
    Dim hKeyResult As Long                      'キーハンドル
    Dim SubKey As String                        'サブキー
    Dim Value As String                         '値の名前
    Dim lngAnswer As Long                       '値(DWORDの値用)
    Dim strAnswer As String * 50                '値(文字列の値用)
    Dim Size As Long                            '値のサイズ
    Dim ret As Long                             '戻り値
    
    
    '----------------------------------
    'オープンするサブキーの設定
    SubKey = "Software\Microsoft\Windows\CurrentVersion\internet Settings"
    
    'レジストリのサブキーのオープン(読み込みのみ)
    ret = RegOpenKeyEx(HKEY_CURRENT_USER, SubKey, 0, KEY_READ, hKeyResult)
    If ret <> ERROR_SUCCESS Then
        MsgBox "エラーコード : " & ret, vbOKOnly, "サブキーのオープン"
        Exit Sub
    End If
    
    '----------------------------------
    '取得する値の名前
    Value = "GlobalUserOffline"
    '取得する値のサイズを設定
    Size = Len(lngAnswer)
    'サブキーの指定の値を取得(取得する値はDWORD形式)
    ret = RegQueryValueEx(hKeyResult, Value, 0, REG_DWORD, lngAnswer, Size)
    If ret <> ERROR_SUCCESS Then
        MsgBox "エラーコード : " & ret, vbOKOnly, "値の取得"
        Exit Sub
    End If
    MsgBox "GlobalUserOffline = " & lngAnswer, vbOKOnly, "値の内容 その1"
    
    '取得する値の名前
    Value = "User Agent"
    '取得する値のサイズを設定
    Size = Len(strAnswer)
    'サブキーの指定の値を取得(取得する値は文字列形式)
    ret = RegQueryValueEx(hKeyResult, Value, 0, REG_SZ, ByVal strAnswer, Size)
    If ret <> ERROR_SUCCESS Then
        MsgBox "エラーコード : " & ret, vbOKOnly, "値の取得"
        Exit Sub
    End If
    MsgBox "User Agent = " & strAnswer, vbOKOnly, "値の内容 その2"
    
    '----------------------------------
    'サブキーのクローズ
    ret = RegCloseKey(hKeyResult)
    If ret <> ERROR_SUCCESS Then
        MsgBox "エラーコード : " & ret, vbOKOnly, "サブキーのクローズ"
        Exit Sub
    End If
End Sub
'------------------------ ここまで ------------------------

ではでは



 [スレッド一覧へ] [親スレッドへ]