レジストリを読む             <TOP>


64Bit版OS搭載機が多くなりました。

上段のRegRead.basでは、読めません。

下段のRegRead2.basの部分を試してみてください。(よそ様の64Bit搭載機で確認しました。)

 

レジストリからInternet Explorerのバージョンを取得する例です。

RegQueryValueEx レジストリの値を取得する

RegOpenKeyEx レジストリのキーを開ける

RegCloseKey レジストリのハンドルを解放する

 

バージョンは下記レジストリにあります。

    RootKey:HKEY_LOCAL_MACHINE

    SubKey:"SOFTWARE\Microsoft\Internet Explorer"

    名前:"Version"

    データ:6.0.2900.2180


RootKey

    HKEY_CLASSES_ROOT      -2147483648         拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報
    HKEY_CURRENT_USER      -2147483648 + 1    
現在Windowsにログインしているユーザーの情報
    HKEY_LOCAL_MACHINE     -2147483648 + 2    
PCを利用するユーザーに共通の設定情報
    HKEY_USERS             -2147483648 + 3     
Windowsを利用するユーザー個別の情報
    HKEY_CURRENT_CONFIG    -2147483648 + 5    
Display解像度/Font等の画面表示に関するカレントユーザーの情報、プリンターに関する情報
    HKEY_DYN_DATA          -2147483648 + 6     
動的に変化する様々な情報

 


CPU情報の取得例

参考
Windowsのバージョンによっては、異なる場合があります。

取得項目

RootKey

SubKey

名前

データ

IE Version

HKEY_LOCAL_MACHINE

Software\Microsoft\Internet Explorer

Version

6.0.2900.2180

使用者名

HKEY_LOCAL_MACHINE

Software\Microsoft\Windows\CurrentVersion

RegisterdOwener

 

会社名

HKEY_LOCAL_MACHINE

Software\Microsoft\Windows\CurrentVersion

RegisterdOrganization

 

Mail Client

HKEY_LOCAL_MACHINE

Software\Clients\Mail

 

Outlook Express

プロダクトID

95、98

HKEY_LOCAL_MACHINE

Software\Microsoft\Windows\CurrentVersion

ProductID

55380-OEM-00xxxxx-xxxxx

NT、2K、XP

Software\Microsoft\Windows NT\CurrentVersion

システムフォント

HKEY_CURRENT_CONFIG

Software\Fonts

FIXEDFON.FON

jvgafix.fon

FONTS.FON

jvgasys.fon

OEMFONT.FON

vga932.fon

ホームページアドレス

HKEY_CURRENT_USER

Software\Internet Explorer\Main

Start Page

http://www.yahoo.co.jp/

 
'================================================================
'= レジストリの読込
'=    (ReadReg.bas)
'================================================================
#include "Windows.bi"

'レジストリの値を取得する
Declare Function Api_RegQueryValueEx& Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpvName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&)

'レジストリのキーを開ける(ハンドルの確保)
Declare Function Api_RegOpenKeyEx& Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&)

'レジストリのハンドルを解放する
Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&)

#define HKEY_CLASSES_ROOT -2147483648   '拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報
#define HKEY_CURRENT_CONFIG -2147483643 'Display解像度/Font等の画面表示に関するカレントユーザーの情報、プリンターに関する情報
#define HKEY_CURRENT_USER -2147483647   '現在Windowsにログインしているユーザーの情報
#define HKEY_DYN_DATA -2147483642       '動的に変化する様々な情報
#define HKEY_LOCAL_MACHINE -2147483646  'PCを利用するユーザーに共通の設定情報
#define HKEY_USERS -2147483645          'Windowsを利用するユーザー個別の情報
#define KEY_QUERY_VALUE &H1             'サブキーデータを問い合わせるためのアクセス権
#define ERROR_SUCCESS &H0               '正常終了の戻り値を示す

Var Shared Combo1 As Object
Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Text(4) As Object
Var Shared Button1 As Object

Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

For i = 0 To 4
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next

Var Shared cNo As Integer

'================================================================
'=  
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Combo1.AddString "HKEY_CLASSES_ROOT"
    Combo1.AddString "HKEY_CURRENT_USER"
    Combo1.AddString "HKEY_LOCAL_MACHINE"
    Combo1.AddString "HKEY_HKEY_USERS"
    Combo1.AddString "HKEY_CURRENT_CONFIG"
    Combo1.AddString "HKEY_DYN_DATA"

    Combo1.SetWindowText "HKEY_LOCAL_MACHINE"
    cNo = 2
End Sub

'================================================================
'=  
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hKey As Long
    Var Length As Long
    Var RootKey As Long
    Var vName$ As String
    Var lpData$ As String
    Var SubKey$ As String
    Var Ret As Long

    Select Case cNo
        Case 0
            RootKey = HKEY_CLASSES_ROOT
        Case 1
            RootKey = HKEY_CURRENT_USER
        Case 2
            RootKey = HKEY_LOCAL_MACHINE
        Case 3
            RootKey = HKEY_HKEY_USERS
        Case 4
            RootKey = HKEY_CURRENT_CONFIG
        Case 5
            RootKey = HKEY_DYN_DATA
    End Select

    SubKey$ = Edit1.GetWindowText    '"SOFTWARE\Microsoft\Windows NT\CurrentVersion"

  'キーをオープンしてハンドルを得る
    Ret = Api_RegOpenKeyEx(RootKey, SubKey$, 0, KEY_QUERY_VALUE, hKey)

  'vNameに値を取得したい名前を入れる
    vName$ = Edit2.GetWindowText     '"ProductID"

  'バッファを確保する
    lpData$ = String$(250, Chr$(0))
    Length = Len(lpData$)

  'hKeyはRegOpenKeyExで開いたキーのハンドル
    Ret = Api_RegQueryValueEx(hKey, vName$, 0, 0, lpData$, Length)

  'テキストに出力
    Text(4).SetWindowText Left$(lpData$, InStr(lpData$, Chr$(0)) - 1)

  'ハンドルを閉じる
    Ret = Api_RegCloseKey(hKey)
End Sub

'================================================================
'=  
'================================================================
Declare Sub Combo1_Change edecl ()
Sub Combo1_Change()
    cNo = Combo1.GetCursel
End Sub

'================================================================
'=  
'================================================================
While 1
    WaitEvent
Wend
Stop
End
 
*****************************************************************
 
'================================================================
'= レジストリの読込
'=    (ReadReg2.bas)Windows 7 64Bit版対応
'================================================================
#include "Windows.bi"

'レジストリの値を取得する
Declare Function Api_RegQueryValueEx& Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpvName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&)

'レジストリのキーを開ける(ハンドルの確保)
Declare Function Api_RegOpenKeyEx& Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&)

'レジストリのハンドルを解放する
Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&)

#define HKEY_CLASSES_ROOT -2147483648   '拡張子に関する情報や、それらとアプリケーションとの関連づけに関する情報
#define HKEY_CURRENT_CONFIG -2147483643 'Display解像度/Font等の画面表示に関するカレントユーザーの情報、プリンターに関する情報
#define HKEY_CURRENT_USER -2147483647   '現在Windowsにログインしているユーザーの情報
#define HKEY_DYN_DATA -2147483642       '動的に変化する様々な情報
#define HKEY_LOCAL_MACHINE -2147483646  'PCを利用するユーザーに共通の設定情報
#define HKEY_USERS -2147483645          'Windowsを利用するユーザー個別の情報
#define KEY_QUERY_VALUE &H1             'サブキーデータを問い合わせるためのアクセス権
#define KEY_WOW64_32KEY &H200           '64bitまたは32bitアプリケーションが、32bitキーをオープンできるようにする
#define KEY_WOW64_64KEY &H100           '64bitまたは32bitアプリケーションが、64bitキーをオープンできるようにする
#define ERROR_SUCCESS &H0               '正常終了の戻り値を示す

Var Shared Combo1 As Object
Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Text(4) As Object
Var Shared Button1 As Object

Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

For i = 0 To 4
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next

Var Shared cNo As Integer

'================================================================
'=  
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Combo1.AddString "HKEY_CLASSES_ROOT"
    Combo1.AddString "HKEY_CURRENT_USER"
    Combo1.AddString "HKEY_LOCAL_MACHINE"
    Combo1.AddString "HKEY_HKEY_USERS"
    Combo1.AddString "HKEY_CURRENT_CONFIG"
    Combo1.AddString "HKEY_DYN_DATA"

    Combo1.SetWindowText "HKEY_LOCAL_MACHINE"
    cNo = 2
End Sub

'================================================================
'=  
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hKey As Long
    Var Length As Long
    Var RootKey As Long
    Var vName$ As String
    Var lpData$ As String
    Var SubKey$ As String
    Var Ret As Long

    Select Case cNo
        Case 0
            RootKey = HKEY_CLASSES_ROOT
        Case 1
            RootKey = HKEY_CURRENT_USER
        Case 2
            RootKey = HKEY_LOCAL_MACHINE
        Case 3
            RootKey = HKEY_HKEY_USERS
        Case 4
            RootKey = HKEY_CURRENT_CONFIG
        Case 5
            RootKey = HKEY_DYN_DATA
    End Select

    SubKey$ = Edit1.GetWindowText    '"SOFTWARE\Microsoft\Windows NT\CurrentVersion"

  'キーをオープンしてハンドルを得る
    Ret = Api_RegOpenKeyEx(RootKey, SubKey$, 0, KEY_QUERY_VALUE Or KEY_WOW64_64KEY, hKey)

  'vNameに値を取得したい名前を入れる
    vName$ = Edit2.GetWindowText     '"ProductID"

  'バッファを確保する
    lpData$ = String$(250, Chr$(0))
    Length = Len(lpData$)

  'hKeyはRegOpenKeyExで開いたキーのハンドル
    Ret = Api_RegQueryValueEx(hKey, vName$, 0, 0, lpData$, Length)

  'テキストに出力
    Text(4).SetWindowText Left$(lpData$, InStr(lpData$, Chr$(0)) - 1)

  'ハンドルを閉じる
    Ret = Api_RegCloseKey(hKey)
End Sub

'================================================================
'=  
'================================================================
Declare Sub Combo1_Change edecl ()
Sub Combo1_Change()
    cNo = Combo1.GetCursel
End Sub

'================================================================
'=  
'================================================================
While 1
    WaitEvent
Wend
Stop
End