123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- #include "DeviceProduct.h"
- DeviceProduct::DeviceProduct()
- {
- }
- DeviceProduct::DeviceProduct(wstring ProductName)
- {
- m_ProductName = ProductName;
- FindNETFramework();
- FindVsCPulsPulsRedistributable();
- OpenLocalMachineRootKey(RegeditCore::smPath_ProductsInfo.c_str());
- }
- DeviceProduct::~DeviceProduct()
- {
- }
- wstring DeviceProduct::GetVersion()
- {
- return m_Version;
- }
- wstring DeviceProduct::GetInstallLocation()
- {
- return m_InstallLocation;
- }
- wstring DeviceProduct::GetNETVersion()
- {
- return m_NETVersion;
- }
- wstring DeviceProduct::GetNETTargetVersion()
- {
- return m_NETTargetVersion;
- }
- wstring DeviceProduct::GetVsCPulsPulsVersion() {
- return m_VsCPulsPulsVersion;
- }
- wstring DeviceProduct::GetVsCPulsPulsInstalled() {
- return m_VsCPulsPulsInstalled;
- }
- bool DeviceProduct::OpenLocalMachineRootKey(LPCTSTR productsInfoPath)
- {
- long lRet;
- HKEY hKey;
- LPCTSTR lpSubKey;
- lpSubKey = productsInfoPath;
- lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
- bool state = false;
- if (lRet == ERROR_SUCCESS)
- {
- state = SearchAllProducts(hKey, lpSubKey);
- }
- return state;
- }
- bool DeviceProduct::SearchAllProducts(HKEY hKey, LPCTSTR productsInfoPath)
- {
- bool state = false;
- DWORD index = 0;
- TCHAR szKeyName[255] = { 0 };
- DWORD dwKeyLen = 255;
- wstring strBuffer;
- while (ERROR_NO_MORE_ITEMS != RegEnumKeyEx(hKey, index, szKeyName, &dwKeyLen, 0, NULL, NULL, NULL))
- {
- index++;
- wstring temp(szKeyName);
- strBuffer = temp;
- if (!strBuffer.empty())
- {
- wstring productsInfo(productsInfoPath);
- strBuffer = productsInfo + L"\\" + strBuffer;
- state = OpenLocalMachineSubKey(strBuffer);
-
- if (state)
- break;
- //continue;
- }
- dwKeyLen = 255;
- memset(szKeyName, 0, 255);
- }
- dwKeyLen = 255;
- memset(szKeyName, 0, 255);
- return state;
- }
- bool DeviceProduct::OpenLocalMachineSubKey(std::wstring AppKey)
- {
- bool state = false;
- long lRet;
- HKEY hKey;
- LPCTSTR lpSubKey;
- //AppKey = RegeditCore::smPath_ProductsInfo + L"\\" + AppKey;
- lpSubKey = AppKey.c_str();
- lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
- if (lRet == ERROR_SUCCESS)
- {
- state = FindProductInfo(hKey, lpSubKey);
- }
- else
- {
- m_Version = L"";
- }
- return state;
- }
- bool DeviceProduct::FindProductInfo(HKEY hKey, LPCTSTR lpSubKey)
- {
- bool state = false;
- DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ | REG_DWORD_LITTLE_ENDIAN | REG_DWORD_BIG_ENDIAN | REG_LINK | REG_RESOURCE_LIST | REG_FULL_RESOURCE_DESCRIPTOR | REG_RESOURCE_REQUIREMENTS_LIST | REG_QWORD_LITTLE_ENDIAN;
- HKEY hkRKey;
- DWORD index = 0;
- TCHAR szKeyName[255] = { 0 };
- DWORD dwKeyLen = 255;
- wstring strBuffer;
- wstring strMidReg;
- TCHAR szBufferAppInfo[255] = { 0 };
- DWORD dwNameLen = 255;
- //遍历已安装程序
- while (ERROR_NO_MORE_ITEMS != RegEnumKeyEx(hKey, index, szKeyName, &dwKeyLen, 0, NULL, NULL, NULL))
- {
- //获取已安装程序的节点
- index++;
- wstring nodeTemp(szKeyName);
- strBuffer = nodeTemp;
- if (!strBuffer.empty())
- {
- wstring nodePathTemp(L"\\" + strBuffer);
- strMidReg = lpSubKey + nodePathTemp;
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strMidReg.c_str(), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hkRKey) == ERROR_SUCCESS)
- {
- RegQueryValueEx(hkRKey, L"DisplayName", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring displayNameTemp(szBufferAppInfo);
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- if (displayNameTemp == m_ProductName)
- {
- RegQueryValueEx(hkRKey, L"DisplayVersion", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring displayVersionTemp(szBufferAppInfo);
- m_Version = displayVersionTemp;
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- RegQueryValueEx(hkRKey, L"InstallLocation", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring installLocationTemp(szBufferAppInfo);
- m_InstallLocation = installLocationTemp;
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- return state;
- }
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- }
-
- dwKeyLen = 255;
- memset(szKeyName, 0, 255);
- }
-
- }
- return state;
- }
- bool DeviceProduct::FindNETFramework()
- {
- HKEY hkRKey;
- TCHAR szBufferAppInfo[255] = { 0 };
- DWORD dwNameLen = 255;
- DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ | REG_DWORD_LITTLE_ENDIAN | REG_DWORD_BIG_ENDIAN | REG_LINK | REG_RESOURCE_LIST | REG_FULL_RESOURCE_DESCRIPTOR | REG_RESOURCE_REQUIREMENTS_LIST | REG_QWORD_LITTLE_ENDIAN;
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegeditCore::smPath_NETFrameworkInfo.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hkRKey) == ERROR_SUCCESS)
- {
- RegQueryValueEx(hkRKey, L"TargetVersion", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring displayVersionTemp(szBufferAppInfo);
- m_NETTargetVersion = displayVersionTemp;
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- RegQueryValueEx(hkRKey, L"Version", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring installLocationTemp(szBufferAppInfo);
- m_NETVersion = installLocationTemp;
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- return true;
- }
- return false;
- }
- bool DeviceProduct::FindVsCPulsPulsRedistributable() {
- HKEY hkRKey;
- TCHAR szBufferAppInfo[255] = { 0 };
- DWORD dwNameLen = 255;
- DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ | REG_DWORD_LITTLE_ENDIAN | REG_DWORD_BIG_ENDIAN | REG_LINK | REG_RESOURCE_LIST | REG_FULL_RESOURCE_DESCRIPTOR | REG_RESOURCE_REQUIREMENTS_LIST | REG_QWORD_LITTLE_ENDIAN;
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegeditCore::smPath_VsCPulsPulsInfoX64.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hkRKey) == ERROR_SUCCESS)
- {
- RegQueryValueEx(hkRKey, L"Installed", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring displayVersionTemp(szBufferAppInfo);
- m_VsCPulsPulsInstalled = displayVersionTemp;
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- RegQueryValueEx(hkRKey, L"Version", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
- wstring installLocationTemp(szBufferAppInfo);
- m_VsCPulsPulsVersion = installLocationTemp;
- dwNameLen = 255;
- memset(szBufferAppInfo, 0, 255);
- return true;
- }
- return false;
- }
|