レジストリキーに関する情報を取得(T)          <TOP>


RegOpenKeyEx レジストリのキーのハンドルを確保
RegQueryInfoKey 指定されたレジストリキーに関する情報を取得
RegCloseKey レジストリのハンドルを解放
FileTimeToSystemTime ファイルタイムをシステムタイムに変換

 

'================================================================
'= レジストリキーに関する情報を取得
'=    (RegQueryInfoKey.bas)
'================================================================
#include "Windows.bi"

Type FILETIME
    dwLowDateTime  As Long
    dwHighDateTime As Long
End Type

Type SYSTEMTIME
    wYear         As Integer
    wMonth        As Integer
    wDayOfWeek    As Integer
    wDay          As Integer
    wHour         As Integer
    wMinute       As Integer
    wSecond       As Integer
    wMilliseconds As Integer
End Type

#define HKEY_LOCAL_MACHINE -2147483646  'PCを利用するユーザーに共通の設定情報
#define KEY_QUERY_VALUE &H1             'サブキーデータを問い合わせるためのアクセス権
#define ERROR_SUCCESS &H0               '正常終了の戻り値を示す

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

' 指定されたレジストリキーに関する情報を取得
Declare Function Api_RegQueryInfoKey& Lib "advapi32" Alias "RegQueryInfoKeyA" (ByVal hKey&, ByVal lpClass$, lpcbClass&, ByVal Reserved&, SubKeys&, SubKeyLen&, ClassLen&, Values&, ValueNameLen&, ValueLen&, SecurityDescriptor&, LastWriteTime As FILETIME)

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

' ファイルタイムをシステムタイムに変換
Declare Function Api_FileTimeToSystemTime& Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME)

Var Shared List1 As Object
Var Shared Button1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 12
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var ft As FILETIME
    Var st As SYSTEMTIME
    Var RegSubKey As String
    Var RegSubKeyHandle As Long
    Var CbClass As Long
    Var SubKeys As Long
    Var SubKeyLength As Long
    Var ClassLength As Long
    Var Values As Long
    Var ValueNameLength As Long
    Var ValueLength As Long
    Var sFileTime As String
    Var Ret As Long

    'リストボックスを初期化
    List1.Resetcontent

    'サブキーを設定
    RegSubKey = ""

    'レジストリを問い合わせモードでオープン
    Ret = Api_RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegSubKey, 0, KEY_QUERY_VALUE, RegSubKeyHandle)

    'オープンできたとき
    If Ret = ERROR_SUCCESS Then

        '指定したキーのレジストリ情報を取得
        Ret = Api_RegQueryInfoKey(RegSubKeyHandle, ByVal 0, CbClass, 0, SubKeys, SubKeyLength, ClassLength, Values, ValueNameLength, ValueLength, ByVal 0, ft)

        'レジストリ情報が取得できたとき
        If Ret = ERROR_SUCCESS Then

            'ファイル時間をシステム時間に変換
            Ret = Api_FileTimeToSystemTime(ft, st)

            'レジストリ情報を表示
            List1.AddString "SubKey数         :" & Str$(SubKeys)
            List1.AddString "SubKey最大文字数 :" & Str$(SubKeyLength)
            List1.AddString "値の数           :" & Str$(Values)
            List1.AddString "値の最大文字数   :" & Str$(ValueNameLength)

            'ファイルの最終書き込み日時を編集
            sFileTime = Trim$(Str$(st.wYear)) & "/" & Trim$(Str$(st.wMonth)) & "/" & Trim$(Str$(st.wDay)) & "(" & KMid$("日月火水木金土", st.wDayOfWeek + 1, 1) & ")
            List1.AddString "最終書き込み日   : " & sFileTime

            sFileTime = Trim$(Str$(st.wHour)) & ":" & Trim$(Str$(st.wMinute)) & ":" & Trim$(Str$(st.wSecond))
            List1.AddString "最終書き込み時間 : " & sFileTime

        'レジストリ情報が取得できなかったとき
        Else
            List1.AddString "取得できません!"
        End If

        'ハンドルをクローズ
        Ret = Api_RegCloseKey(RegSubKeyHandle)

    'オープンできなかったとき
    Else
        List1.AddString "オープンできません!"
    End If
End Sub

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