BOOL CTestDlg::IsSoftwareExist()
{
HKEY
RootKey;
// 主键
LPCTSTR
lpSubKey;
// 子键名称
HKEY
hkResult;
// 将要打开键的句柄
HKEY
hkRKey;
LONG
lReturn;
// 记录读取注册表是否成功
CString strBuffer;
CString strMidReg;
CString strSoftwareName;
DWORD
index = 0;
TCHAR
szKeyName[255] = {0};
// 注册表项名称
TCHAR
szBuffer[255] = {0};
DWORD
dwKeyLen = 255;
DWORD
dwNameLen = 255;
DWORD
dwType = REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_NONE|REG_SZ;
RootKey = HKEY_LOCAL_MACHINE;
lpSubKey = _T(
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
);
lReturn = RegOpenKeyEx(RootKey, lpSubKey, 0, KEY_ALL_ACCESS, &hkResult);
if(lReturn == ERROR_SUCCESS)
{
while
(ERROR_NO_MORE_ITEMS !=RegEnumKeyEx(hkResult, index, szKeyName, &dwKeyLen, 0, NULL, NULL, NULL))
{
index++;
strBuffer.Format(_T("%s"),szKeyName);
if(!strBuffer.IsEmpty())
{
strMidReg = (CString)lpSubKey + _T("\\") + strBuffer;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, strMidReg, 0, KEY_ALL_ACCESS, &hkRKey)==ERROR_SUCCESS)
{
RegQueryValueEx(hkRKey, _T(
"DisplayName"
), 0, &dwType, (
LPBYTE
)szBuffer,&dwNameLen);
strSoftwareName = szBuffer;
if(!strSoftware.IsEmpty() && strSoftwareName == _T("EsafeODS"))
{
strSoftwareName += _T("\r\n");
OutputDebugString(strSoftwareName);
return TURE;
}
else
{
OutputDebugString(_T("strSoftwareName is NULL! \r\n"));
}
}
}
}
}
}
注:该功能也是参考别人的回复,经过测试可行,仅作为笔记记录供以后查询使用。