Windows相关信息获取-已安装的应用软件列表

int GetSoftListInfo()
{
	const int  MAX_LEG = 256 * sizeof(TCHAR);
	HKEY hKey;
	DWORD dwRegNum = MAX_LEG;
	TCHAR regBufferName[MAX_LEG] = { 0 };

	int softCount = 0;

	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"),
		NULL, KEY_READ, &hKey) == ERROR_SUCCESS)
	{
		if (RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwRegNum, NULL, NULL, NULL,
			NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
		{
			for (ULONG i = 0; i < dwRegNum; i++)
			{
				DWORD dwRegSize = MAX_LEG;
				RegEnumKeyEx(hKey, i, regBufferName, &dwRegSize, NULL, NULL,
					NULL, NULL);
				DWORD dwType;
				HKEY hSubKey;
				if (RegOpenKeyEx(hKey, regBufferName, NULL, KEY_READ, &hSubKey) == ERROR_SUCCESS)
				{
			
					TCHAR DisplayName[MAX_LEG] = { 0 };
					dwRegSize = MAX_LEG;
					ZeroMemory(DisplayName, MAX_LEG);
					RegQueryValueEx(hSubKey, _T("DisplayName"), 0, &dwType, (LPBYTE)DisplayName, &dwRegSize);


					TCHAR DisplayVersion[MAX_LEG] = { 0 };
					dwRegSize = MAX_LEG;
					ZeroMemory(DisplayVersion, MAX_LEG);
					RegQueryValueEx(hSubKey, _T("DisplayVersion"), 0, &dwType, (LPBYTE)DisplayVersion, &dwRegSize);

					TCHAR Publisher[MAX_LEG] = { 0 };
					dwRegSize = MAX_LEG;
					ZeroMemory(Publisher, MAX_LEG);
					RegQueryValueEx(hSubKey, _T("Publisher"), 0, &dwType, (LPBYTE)Publisher, &dwRegSize);

					TCHAR InstallDate[MAX_LEG] = { 0 };
					dwRegSize = MAX_LEG;
					ZeroMemory(InstallDate, MAX_LEG);
					RegQueryValueEx(hSubKey, _T("InstallDate"), 0, &dwType, (LPBYTE)InstallDate, &dwRegSize);

					if ( lstrlen( DisplayName ) > 0   )
					{
                        printf( "%ls\t%ls\t%ls\t%ls \n" , DisplayName, DisplayVersion, Publisher , InstallDate );

						softCount++;
					}
					
				}
			}
		}
	}
	else
	{
		return FALSE; //
	}
	RegCloseKey(hKey);

	return softCount;
}