レジストリを読む <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