//1.开发环境 VS 2013 //2.创建MFC应用程序 //3.选择基于对话框选项 //4.打开*.rc文件在对话框界面上拖入ListBox控件 //5.在*Dlg.cpp中插入 #define UNINSTALL_SOFT _T("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall") LRESULT GetValue(HKEY hKey, LPCTSTR name, LPTSTR value, LPLONG size) { return ::RegQueryValueEx(hKey, name, NULL, NULL, (LPBYTE)value, (LPDWORD)size); } void DumpSoftware(LPCTSTR szKey, HKEY hParent, CListBox * mylist) { LRESULT lr; HKEY hKey; LONG size; TCHAR buffer[MAX_PATH]; lr = RegOpenKey(hParent, szKey, &hKey); //不能打开注册表 if (lr != ERROR_SUCCESS) { ::MessageBox(NULL, _T("打开注册表失败!"), NULL, MB_ICONWARNING); return; } size = sizeof(buffer); lr = GetValue(hKey, _T("DisplayName"), &buffer[0], &size); if (lr == ERROR_SUCCESS) { if (size > 0) { mylist->AddString(buffer); } } RegCloseKey(hKey); } void ListReg(CListBox * mylist) { unsigned int index; TCHAR buffer[MAX_PATH]; HKEY hKey; HRESULT hr = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, UNINSTALL_SOFT, 0, KEY_READ, &hKey); if (hr != ERROR_SUCCESS) { ::MessageBox(NULL, _T("打开注册表失败!"), NULL, MB_ICONWARNING); return; } for (index = 0;; index++) { hr = RegEnumKey(hKey, index, &buffer[0], sizeof(buffer)); switch (hr) { case ERROR_SUCCESS: DumpSoftware(buffer, hKey, mylist); break; case ERROR_NO_MORE_ITEMS: RegCloseKey(hKey); return; default: RegCloseKey(hKey); return; } } RegCloseKey(hKey); } //6.在OnInitDialog函数中return之前插入 CListBox * mylist = (CListBox *)GetDlgItem(IDC_LIST1); mylist->ResetContent(); //清空ListBox //枚举注册表将所有安装软件信息装入一个ListBox控件里 ListReg(mylist);