반응형
HKEY hKey = NULL;
DWORD dwIndex = 0;
DWORD dwSize = 0;
DWORD cbName = MAX_PATH;
DWORD dwType = REG_SZ;
LSTATUS lStatus;
TCHAR szKeyName[MAX_PATH] = {0};
TCHAR szKeyInfo[MAX_PATH] = {0};
CString strSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
CString ErrorMsg;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
{
ErrorMsg.Format(_T("OpenKey Faild! : [ %s ]"), strSubKey);
AfxMessageBox(ErrorMsg);
ErrorMsg.Empty();
}
else
{
while ((lStatus = RegEnumKeyEx(hKey,
dwIndex,
szKeyName,
&cbName,
NULL,
NULL,
NULL,
NULL)) != ERROR_NO_MORE_ITEMS)
{
if (lStatus == ERROR_SUCCESS)
{
HKEY hItem = NULL;
if (RegOpenKeyEx(hKey, szKeyName, 0, KEY_READ, &hItem) != ERROR_SUCCESS)
{
ErrorMsg.Format(_T("Can't open subkey : [ %s ]"), szKeyName);
AfxMessageBox(ErrorMsg);
ErrorMsg.Empty();
continue;
}
else
{
//_tprintf(_T("%s\n"), szKeyName); // 얻어진 하위 키 이름들을 나열.
// 추가적으로 얻어진 키에대한 default정보 기본값을 얻는 방법이다.
ZeroMemory(szKeyInfo, MAX_PATH);
dwSize = sizeof(szKeyInfo);
// 만약 RegQueryValueEx()로 특정 문자열값 혹은 바이너리 값을 얻으려면 두 번째 인자에 얻고자 하는 데이터의 이름을 넣어주면된다.
lStatus = RegQueryValueEx(hItem, _T("DisplayName"), NULL, &dwType, (LPBYTE)szKeyInfo, &dwSize);
if (lStatus == ERROR_SUCCESS)
{
//_tcslwr_s(szKeyInfo);
_tprintf(_T(" %s\n"), szKeyInfo);
}
}
RegCloseKey(hItem);
}
dwIndex++;
cbName = MAX_PATH;
}
RegCloseKey(hKey);
}
반응형
'C > Reference' 카테고리의 다른 글
[C] A.txt 내용을 정렬하여 B.txt로 출력 (0) | 2024.12.15 |
---|---|
[C] A.txt 내용을 정렬하여 콘솔에 출력 (1) | 2024.12.15 |
[C] Thread 사용 예제 (0) | 2024.12.15 |
[C] 파일 속성의 만든 날짜, 수정한 날짜, 액세스한 날짜 얻고 수정하기 (1) | 2024.12.15 |
[C] system32 경로 syswow64로 리다이렉트 되지 않도록 하는 예제 코드 (0) | 2024.12.12 |