374上位机VC MFC通过注册表获取全部安装程序
通过注册表获取全部安装程序
功能展示
360或任务管理器都可以查看系统全部安装程序进行卸载,安装的程序是如何查找的呢?Windows 系统中,安装程序都可以在注册表?HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion\Uninstall?获取,并且xp、vista、win7、win8都一样,我们当前例程就实现了系统安装程序的获取,效果如图,点击按钮,就可以获得全部安装程序及程序的相关信息
要点提示
系统中安装程序信息在注册表?HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion\Uninstall?
都可以获取到。注册表的打开可以用函数RegOpenKeyEx()字段的获取可以用函数RegEnumKeyEx()注册表关闭可以用函数RegCloseKey(); 函数的具体介绍可以查阅MSDN手册,或参阅例程的具体使用方法;
实现功能
1.新建基于对话框的应用程序
2.添加一列表框并关联变量CListCtrl m_MyList;用于显示查找的结果;添加一按钮控件关联点击函数
void CGkbc8Dlg::OnButton1()
{
AllRegKey(HKEY_LOCAL_MACHINE, TEXT("SoftWare\\Microsoft\\Windows\\CurrentVersion\\Uninstall"));
}
3.函数中调用有一自定义函数,所以再添加这一函数
BOOL CGkbc8Dlg::AllRegKey0(HKEY hKey, LPCTSTR szDesKeyItem) // 获取系统安装程序列表
{
HKEY hSubKey;
DWORD dwIndex = 0;
long lResult;
int i = 1;
lResult = RegOpenKeyEx(hKey, szDesKeyItem, 0, KEY_READ, &hSubKey); // 打开注册表
if(ERROR_SUCCESS == lResult)
{
TCHAR szKeyName[256] = { 0 };
DWORD cbName = 256*sizeof(TCHAR);
lResult = RegEnumKeyEx(hSubKey, dwIndex, szKeyName, &cbName, 0, NULL, NULL, NULL); // 获取字段
while (lResult == ERROR_SUCCESS && lResult != ERROR_MORE_DATA)
{
OutputDebugString(szKeyName);
CString str;
str.Format(_T("%d"), i);
i = m_MyList.InsertItem(i, str); // 插入到List控件显示
m_MyList.SetItemText(i,1,szKeyName);
dwIndex = dwIndex + 1; // 改变dwIndex,循环获取下移字段
cbName = 256*sizeof(TCHAR);
lResult = RegEnumKeyEx(hSubKey, dwIndex, szKeyName, &cbName, 0, NULL, NULL, NULL);
i++;
}
RegCloseKey(hSubKey); // 关闭注册表
return TRUE;
}
RegCloseKey(hSubKey);
return FALSE;
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|