通过访问注册表来获取已安装程序的名称

本文介绍了一种通过访问Windows注册表的方法,利用RegOpenKeyEx和RegEnumKeyEx函数遍历HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall子键,再结合RegQueryValueEx获取每个程序的DisplayName,从而得到已安装程序的名称。
        HKEY hKey ;
HKEY hdwKey ;
int nIndex = 0 ;
TCHAR szKeyName[MAX_PATH] ;
TCHAR szBuffer[MAX_PATH] ;
DWORD dwKeyLen = sizeof(szKeyName) ;
DWORD dwNameLen = sizeof(szBuffer) ;
DWORD dwType = REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_NONE|REG_SZ;
CString strKeyName ;
CString strkeyPath ; 
CString m_KeyName = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall") ;

DWORD nRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, m_KeyName, 0, KEY_ALL_ACCESS, &hKey) ;
if ( nRet == ERROR_SUCCESS )
{
while( ERROR_SUCCESS == RegEnumKeyEx( hKey, nIndex, szKeyName, &dwKeyLen, 0, NULL, NULL, NULL))
{
nIndex++ ;
strKeyName = szKeyName ;
if (!strKeyName.IsEmpty())
{
                 strkeyPath = m_KeyName + _T("\\") + strKeyName ;
if (  ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, strkeyPath, 0, KEY_ALL_ACCESS, &hdwKey))
{
RegQueryValueEx( hdwKey, _T("DisplayName"), 0, &dwType, (LPBYTE)szBuffer, &dwNameLen) ;
CString m_str = szBuffer ;
MessageBox( m_str ) ;
memset(szBuffer, 0, MAX_PATH) ;
dwNameLen = sizeof(szBuffer)  ;
 
}
                 RegCloseKey( hdwKey ) ;
}
memset( szKeyName, 0, MAX_PATH) ;
dwKeyLen = sizeof(szKeyName) ;
}
RegCloseKey( hKey ) ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值