WIn32API レジストリキーを列挙する RegEnumKeyEx
レジストリキーを列挙するには、RegEnumKeyEx関数を用いる。
LONG RegEnumKeyEx( HKEY hKey, // 列挙するべきキーのハンドル DWORD dwIndex, // サブキーのインデックス番号 LPTSTR lpName, // サブキー名が格納されるバッファ LPDWORD lpcName, // サブキー名バッファのサイズ LPDWORD lpReserved, // 予約済み LPTSTR lpClass, // クラス名が格納されるバッファ LPDWORD lpcClass, // クラス文字列バッファのサイズ PFILETIME lpftLastWriteTime // 最終書き込み時刻 );
HKEY_LOCAL_MACHINE直下のレジストリキーのキー名と最終書き込み時刻を表示している
#include <windows.h> #include <stdio.h> int main() { TCHAR szSubkeyName[MAX_PATH]; DWORD dwSubkeyNameSize; FILETIME ftLastWriteTime; for (DWORD dwIndex = 0; TRUE; dwIndex++) { DWORD dwResult; dwSubkeyNameSize = sizeof(szSubkeyName)/sizeof(szSubkeyName[0]); dwResult = RegEnumKeyEx(HKEY_LOCAL_MACHINE, dwIndex, szSubkeyName, &dwSubkeyNameSize, NULL, NULL, NULL, &ftLastWriteTime); if (dwResult == ERROR_SUCCESS) { FILETIME ftLocalTime; SYSTEMTIME LastWriteTime; TCHAR szLastWriteTime[32]; ::FileTimeToLocalFileTime(&ftLastWriteTime, &ftLocalTime); ::FileTimeToSystemTime(&ftLocalTime, &LastWriteTime); _sntprintf(szLastWriteTime, sizeof(szLastWriteTime)/sizeof(szLastWriteTime[0]), TEXT("%04d/%02d/%02d %02d:%02d:%02d"), LastWriteTime.wYear, LastWriteTime.wMonth, LastWriteTime.wDay, LastWriteTime.wHour, LastWriteTime.wMinute, LastWriteTime.wSecond); _tprintf(TEXT("SubkeyName: %s, LastWriteTime: %s\n"), szSubkeyName, szLastWriteTime); } else if (dwResult == ERROR_NO_MORE_ITEMS) {//列挙し終わるとRegEnumKeyExはERROR_NO_MORE_ITEMSを返す puts("ERROR_NO_MORE_ITEMS"); break; } else { puts("RegEnumKeyEx error"); break; } } return 0; }
SubkeyName: BCD00000000, LastWriteTime: 2012/03/05 03:04:22 SubkeyName: HARDWARE, LastWriteTime: 2012/03/05 03:04:16 SubkeyName: SAM, LastWriteTime: 2012/03/05 03:04:26 SubkeyName: SECURITY, LastWriteTime: 2012/03/05 03:04:25 SubkeyName: SOFTWARE, LastWriteTime: 2012/03/05 03:04:22 SubkeyName: SYSTEM, LastWriteTime: 2012/03/05 03:04:16 ERROR_NO_MORE_ITEMS
#include <windows.h> #include <stdio.h> int main() { TCHAR szSubkeyName[MAX_PATH]; DWORD dwSubkeyNameSize; FILETIME ftLastWriteTime; HKEY hKey; LONG lRet; lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NULL, 0, KEY_ENUMERATE_SUB_KEYS, &hKey); if (lRet != ERROR_SUCCESS) { return 1; } for (DWORD dwIndex = 0; TRUE; dwIndex++) { DWORD dwResult; dwSubkeyNameSize = sizeof(szSubkeyName)/sizeof(szSubkeyName[0]); dwResult = RegEnumKeyEx(hKey, dwIndex, szSubkeyName, &dwSubkeyNameSize, NULL, NULL, NULL, &ftLastWriteTime); if (dwResult == ERROR_SUCCESS) { FILETIME ftLocalTime; SYSTEMTIME LastWriteTime; TCHAR szLastWriteTime[32]; ::FileTimeToLocalFileTime(&ftLastWriteTime, &ftLocalTime); ::FileTimeToSystemTime(&ftLocalTime, &LastWriteTime); _sntprintf(szLastWriteTime, sizeof(szLastWriteTime)/sizeof(szLastWriteTime[0]), TEXT("%04d/%02d/%02d %02d:%02d:%02d"), LastWriteTime.wYear, LastWriteTime.wMonth, LastWriteTime.wDay, LastWriteTime.wHour, LastWriteTime.wMinute, LastWriteTime.wSecond); _tprintf(TEXT("SubkeyName: %s, LastWriteTime: %s\n"), szSubkeyName, szLastWriteTime); } else if (dwResult == ERROR_NO_MORE_ITEMS) {//列挙し終わるとRegEnumKeyExはERROR_NO_MORE_ITEMSを返す puts("ERROR_NO_MORE_ITEMS"); break; } else { puts("RegEnumKeyEx error"); break; } } RegCloseKey(hKey); return 0; }
#include <windows.h> #include <stdio.h> int main() { TCHAR szSubkeyName[MAX_PATH]; DWORD dwSubkeyNameSize; FILETIME ftLastWriteTime; HKEY hKey; LONG lRet; lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE"), 0, KEY_ENUMERATE_SUB_KEYS, &hKey); if (lRet != ERROR_SUCCESS) { return 1; } for (DWORD dwIndex = 0; TRUE; dwIndex++) { DWORD dwResult; dwSubkeyNameSize = sizeof(szSubkeyName)/sizeof(szSubkeyName[0]); dwResult = RegEnumKeyEx(hKey, dwIndex, szSubkeyName, &dwSubkeyNameSize, NULL, NULL, NULL, &ftLastWriteTime); if (dwResult == ERROR_SUCCESS) { FILETIME ftLocalTime; SYSTEMTIME LastWriteTime; TCHAR szLastWriteTime[32]; ::FileTimeToLocalFileTime(&ftLastWriteTime, &ftLocalTime); ::FileTimeToSystemTime(&ftLocalTime, &LastWriteTime); _sntprintf(szLastWriteTime, sizeof(szLastWriteTime)/sizeof(szLastWriteTime[0]), TEXT("%04d/%02d/%02d %02d:%02d:%02d"), LastWriteTime.wYear, LastWriteTime.wMonth, LastWriteTime.wDay, LastWriteTime.wHour, LastWriteTime.wMinute, LastWriteTime.wSecond); _tprintf(TEXT("SubkeyName: %s, LastWriteTime: %s\n"), szSubkeyName, szLastWriteTime); } else if (dwResult == ERROR_NO_MORE_ITEMS) {//列挙し終わるとRegEnumKeyExはERROR_NO_MORE_ITEMSを返す puts("ERROR_NO_MORE_ITEMS"); break; } else { puts("RegEnumKeyEx error"); break; } } RegCloseKey(hKey); return 0; }
SubkeyName: ABBYY, LastWriteTime: 2011/10/29 15:31:40 SubkeyName: Adobe, LastWriteTime: 2012/01/21 15:57:53 SubkeyName: Apple Computer, Inc., LastWriteTime: 2012/01/16 00:24:33 SubkeyName: Apple Inc., LastWriteTime: 2012/01/16 00:24:33 SubkeyName: AuthenTec, LastWriteTime: 2011/10/19 02:52:09 SubkeyName: calibre, LastWriteTime: 2011/12/11 12:11:00 SubkeyName: CyberLink, LastWriteTime: 2011/10/19 03:19:14 SubkeyName: Google, LastWriteTime: 2011/10/29 13:46:15 SubkeyName: Hewlett-Packard, LastWriteTime: 2011/11/12 10:36:34 SubkeyName: ICE, LastWriteTime: 2011/11/12 10:35:56 SubkeyName: IDT, LastWriteTime: 2011/10/19 03:19:14 SubkeyName: Intel, LastWriteTime: 2011/10/19 02:51:40 SubkeyName: JavaSoft, LastWriteTime: 2012/03/31 00:07:46 SubkeyName: JreMetrics, LastWriteTime: 2012/03/31 00:07:46 SubkeyName: Lake, LastWriteTime: 2011/10/19 03:19:14 SubkeyName: Licenses, LastWriteTime: 2012/03/31 15:08:27 SubkeyName: Macromedia, LastWriteTime: 2011/10/19 02:46:31 SubkeyName: Macrovision, LastWriteTime: 2011/12/03 19:41:14 SubkeyName: MAXSOFT-OCRON, LastWriteTime: 2011/10/29 15:46:11 SubkeyName: Microsoft, LastWriteTime: 2012/03/31 15:08:15 SubkeyName: Microsoft Corporation, LastWriteTime: 2012/03/18 13:48:18 ・・・・・(さらに列挙は続く)