本篇文章属于《518抽奖软件开发日志》系列文章的一部分。
我在开发《518抽奖软件》(www.518cj.net)的时候,需要获得操作系统的版本号。老的API(GetVersionEx)已经没法适应Windows 8以后的系统,这里采用获得kernel32.dll版本号的方式获得系统版本,代码如下。
void Tapp::get_osVer()
{
OSVERSIONINFO ver = { 0 };
ver.dwOSVersionInfoSize = sizeof(ver);
GetVersionEx(&ver);
m_majorVer = ver.dwMajorVersion;
m_minorVer = ver.dwMinorVersion;
m_revsnVer = 0; m_buildVer = 0;
if (m_majorVer < 6 || (m_majorVer == 6 && m_minorVer < 2)) return;
WCHAR sysDir[MAX_PATH] = { 0 };
WCHAR file[MAX_PATH] = { 0 };
GetSystemDirectory(sysDir, MAX_PATH);
PathCombine(file, sysDir, L"kernel32.dll");
DWORD size = 0; DWORD hnd = 0;
size = GetFileVersionInfoSize(file, &hnd);
if (size)
{
size += 1;
void* pBlock = malloc(size * sizeof(WCHAR));
memset(pBlock, 0, size * sizeof(WCHAR));
GetFileVersionInfo(file, hnd, size * sizeof(WCHAR), pBlock);
UINT cbVffi = 0;
VS_FIXEDFILEINFO* pVffi = NULL;
if (VerQueryValue(pBlock, L"\\", (void **)&pVffi, &cbVffi))
{
m_majorVer = HIWORD(pVffi->dwProductVersionMS);
m_minorVer = LOWORD(pVffi->dwProductVersionMS);
m_revsnVer = HIWORD(pVffi->dwProductVersionLS);
m_buildVer = LOWORD(pVffi->dwProductVersionLS);
}
free(pBlock);
}
}