|
25 | 25 |
|
26 | 26 | #include "appshell/browser/resource.h" |
27 | 27 | #include "include/cef_base.h" |
| 28 | +#include "include/cef_version.h" |
28 | 29 |
|
29 | 30 | #include <algorithm> |
30 | 31 | #include <MMSystem.h> |
@@ -122,5 +123,67 @@ CefString AppGetCachePath() { |
122 | 123 |
|
123 | 124 | return CefString(cachePath); |
124 | 125 | } |
| 126 | +// Helper function for AppGetProductVersionString. Reads version info from |
| 127 | +// VERSIONINFO and writes it into the passed in std::wstring. |
| 128 | +void GetFileVersionString(std::wstring &retVersion) { |
| 129 | + DWORD dwSize = 0; |
| 130 | + BYTE *pVersionInfo = NULL; |
| 131 | + VS_FIXEDFILEINFO *pFileInfo = NULL; |
| 132 | + UINT pLenFileInfo = 0; |
| 133 | + |
| 134 | + HMODULE module = GetModuleHandle(NULL); |
| 135 | + TCHAR executablePath[MAX_UNC_PATH]; |
| 136 | + GetModuleFileName(module, executablePath, MAX_UNC_PATH); |
| 137 | + |
| 138 | + dwSize = GetFileVersionInfoSize(executablePath, NULL); |
| 139 | + if (dwSize == 0) { |
| 140 | + return; |
| 141 | + } |
| 142 | + |
| 143 | + pVersionInfo = new BYTE[dwSize]; |
| 144 | + |
| 145 | + if (!GetFileVersionInfo(executablePath, 0, dwSize, pVersionInfo)) { |
| 146 | + delete[] pVersionInfo; |
| 147 | + return; |
| 148 | + } |
| 149 | + |
| 150 | + if (!VerQueryValue(pVersionInfo, TEXT("\\"), (LPVOID*) &pFileInfo, &pLenFileInfo)) { |
| 151 | + delete[] pVersionInfo; |
| 152 | + return; |
| 153 | + } |
| 154 | + |
| 155 | + int major = (pFileInfo->dwFileVersionMS >> 16) & 0xffff ; |
| 156 | + int minor = (pFileInfo->dwFileVersionMS) & 0xffff; |
| 157 | + int hotfix = (pFileInfo->dwFileVersionLS >> 16) & 0xffff; |
| 158 | + int other = (pFileInfo->dwFileVersionLS) & 0xffff; |
| 159 | + |
| 160 | + delete[] pVersionInfo; |
| 161 | + |
| 162 | + std::wostringstream versionStream(L""); |
| 163 | + versionStream << major << L"." << minor << L"." << hotfix << L"." << other; |
| 164 | + retVersion = versionStream.str(); |
| 165 | +} |
| 166 | + |
| 167 | +CefString AppGetProductVersionString() { |
| 168 | + std::wstring s(APP_NAME); |
| 169 | + size_t i = s.find(L" "); |
| 170 | + while (i != std::wstring::npos) { |
| 171 | + s.erase(i, 1); |
| 172 | + i = s.find(L" "); |
| 173 | + } |
| 174 | + std::wstring version(L""); |
| 175 | + GetFileVersionString(version); |
| 176 | + s.append(L"/"); |
| 177 | + s.append(version); |
| 178 | + return CefString(s); |
| 179 | +} |
| 180 | + |
| 181 | +CefString AppGetChromiumVersionString() { |
| 182 | + std::wostringstream versionStream(L""); |
| 183 | + versionStream << L"Chrome/" << cef_version_info(2) << L"." << cef_version_info(3) |
| 184 | + << L"." << cef_version_info(4) << L"." << cef_version_info(5); |
| 185 | + |
| 186 | + return CefString(versionStream.str()); |
| 187 | +} |
125 | 188 |
|
126 | 189 | } // namespace appshell |
0 commit comments