void CGetInfoDlg::GetAppInfo()
{
// TODO: 在此处添加实现代码.
HKEY hKey;
LONG result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"), 0, KEY_READ, &hKey);
if (result == ERROR_SUCCESS)
{
TCHAR subKeyName[MAX_PATH+1];
DWORD subKeyIndex = 0;
DWORD subKeyNameSize = sizeof(subKeyName);
while (RegEnumKeyEx(hKey, subKeyIndex, subKeyName, &subKeyNameSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
HKEY subKey;
result = RegOpenKeyEx(hKey, subKeyName, 0, KEY_READ, &subKey);
if (result == ERROR_SUCCESS)
{
CString displayName;
CString displayVersion;
CString publisher;
CString installLocation;
result = GetValueFromRegistry(subKey, _T("DisplayName"), displayName);
if (result == ERROR_SUCCESS&&!displayName.IsEmpty())
{
GetValueFromRegistry(subKey, _T("DisplayVersion"), displayVersion);
GetValueFromRegistry(subKey, _T("Publisher"), publisher);
GetValueFromRegistry(subKey, _T("InstallLocation"), installLocation);
int index = m_appList.InsertItem(m_appList.GetItemCount(), displayName);
m_appList.SetItemText(index, 1, displayVersion);
m_appList.SetItemText(index, 2, publisher);
m_appList.SetItemText(index, 3, installLocation);
}
RegCloseKey(subKey);
}
subKeyIndex++;
subKeyNameSize = sizeof(subKeyName);
}
RegCloseKey(hKey);
}
}
LONG CGetInfoDlg::GetValueFromRegistry(HKEY hKey, LPCTSTR valueName, CString& value)
{
// TODO: 在此处添加实现代码.
DWORD valueSize=0;
DWORD valueType;
LONG result = RegQueryValueEx(hKey, valueName, NULL, &valueType, NULL, &valueSize);
if (result == ERROR_SUCCESS && valueType == REG_SZ && valueSize > 0)
{
TCHAR* valueBuffer = new TCHAR[valueSize / sizeof(TCHAR)];
result = RegQueryValueEx(hKey, valueName, NULL, &valueType, reinterpret_cast<LPBYTE>(valueBuffer), &valueSize);
if (result == ERROR_SUCCESS)
{
value = valueBuffer;
}
delete[] valueBuffer;
}
return result;
}