レジストリの最終書込時間を取得 <TOP>
RegEnumKeyEx 指定された開いているレジストリーキーのサブキーを列挙
RegOpenKeyEx レジストリのキーのハンドルを確保
RegCloseKey レジストリのハンドルを解放
FileTimeToSystemTime ファイルタイムをシステムタイムに変換
参考
'================================================================ '= レジストリの最終書込時間を取得 '= (RegOpenKeyEx.bas) '================================================================ #include "Windows.bi" #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_ENUMERATE_SUB_KEYS &H8 'サブキーの列挙を許可 #define ERROR_NO_MORE_ITEMS 259 ' #define REGSTR_MAX_VALUE_LENGTH 256 ' Type FILETIME dwLowDateTime As Long '下位32ビット値 dwHighDateTime As Long '上位32ビット値 End Type Type SYSTEMTIME wYear As Integer '年 wMonth As Integer '月(1:1月 2:2月 ...) wDayOfWeek As Integer '曜(0:日曜 1:月曜 ...) wDay As Integer '日(1:1日 2:2日 ...) wHour As Integer '時 wMinute As Integer '分 wSecond As Integer '秒 wMilliseconds As Integer 'ミリ秒 End Type ' レジストリのキーのハンドルを確保 Declare Function Api_RegOpenKeyEx& Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&) ' 指定された開いているレジストリーキーのサブキーを列挙 Declare Function Api_RegEnumKeyEx& Lib "advapi32" Alias "RegEnumKeyExA" (ByVal hKey&, ByVal dwIndex&, ByVal lpName$, ByRef lpcbName&, ByVal lpReserved&, ByVal lpClass$, ByRef lpcbClass&, ByRef lpftLastWriteTime As FILETIME) ' ファイルタイムをシステムタイムに変換 Declare Function Api_FileTimeToSystemTime& Lib "kernel32" Alias "FileTimeToSystemTime" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) ' レジストリのハンドルを解放 Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&) Var Shared List1 As Object Var Shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hSubKey As Long Var RegSubKey As String Var RegEnumSubKey As String Var SubKeyNameLen As Long Var ft As FILETIME Var st As SYSTEMTIME Var FileTime As String Var i As Long Var Ret As Long 'リストを初期化 List1.Resetcontent 'サブキーを列挙するキーのパスを設定 RegSubKey = "" 'レジストリを読み取りモードでオープン Ret = Api_RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegSubKey, 0, KEY_ENUMERATE_SUB_KEYS, hSubKey) 'オープンエラーのときは If Ret <> ERROR_SUCCESS Then 'エラーを表示して終了 List1.AddString "オープンできませんでした。" Exit Sub End If 'サブキーのインデックスを初期化 SubKeyIndex = 0 'サブキーの列挙が完了するまで処理を反復 Do '列挙するサブキー名の格納バッファを初期化 RegEnumSubKey = Space$(REGSTR_MAX_VALUE_LENGTH) 'バッファサイズを初期化 SubKeyNameLen = Len(RegEnumSubKey) 'インデックスで指定したサブキーを取得 Ret = Api_RegEnumKeyEx(hSubKey, i, RegEnumSubKey, SubKeyNameLen, 0, ByVal 0, 0, ft) '列挙するサブキーがないときは If Ret = ERROR_NO_MORE_ITEMS Then '反復処理終了 Exit Do End If 'ファイル時間をシステム時間に変換 Ret = Api_FileTimeToSystemTime(ft, st) 'レジストリ情報を表示 RegEnumSubKey = Left$(RegEnumSubKey, InStr(RegEnumSubKey, Chr$(0)) - 1) 'ファイルの最終書き込み日時を編集 FileTime = Trim$(Str$(st.wYear)) & "/" & Trim$(Str$(st.wMonth)) & "/" & Trim$(Str$(st.wDay)) & "(" & KMid$("日月火水木金土", st.wDayOfWeek + 1, 1) & ") " & Trim$(Str$(st.wHour)) & ":" & Trim$(Str$(st.wMinute)) & ":" & Trim$(Str$(st.wSecond)) List1.AddString Format$(RegEnumSubKey, "& & ") & FileTime 'サブキーのインデックスを加算 i = i + 1 Loop 'オープンしたレジストリをクローズ Ret = Api_RegCloseKey(hSubKey) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End