获得Windows操作系统版本号的C++代码源码

本篇文章属于《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);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值