如何在Windows中获取os名称,版本?

时间:2011-05-23 01:39:36

标签: c windows sdk

在以下几个方面哪个更好地获取操作系统名称,操作系统版本在Windows中 -

  1. 获取信息的时间
  2. 所有Windows操作系统中的兼容性,如xp,vista和更高版本
  3. systeminfo或wmic命令?我想避免在C中使用OSVersionInfoEx,因为必须对营销名称检测进行硬编码,如果引入新的Windows风格,将增加维护工作。请分享您的意见。

1 个答案:

答案 0 :(得分:4)

GetVersionEx - 获取基本的os版本号,你不能比这更快。但是你是对的,你将无法将更新版本的操作系统映射到正确的字符串。你有没有考虑过这样做:

OSVERSIONINFOEX version = {};
char szOS[MAX_OS_LENGTH];

version.dwOSVersionInfoSize = sizeof(version);
GetVersionEx((OSVERSIONINFO*)&version);

if (MyFunctionToMapVersionToString(&version, szOS) == false)
{
    sprintf(szOS, "Microsoft Windows %d.%d", version.dwMajorVersion, version.dwMinorVersion);
}

WMI - 要编写更多代码。但你可能只是在app启动时(或需要时)执行此操作,并在再次需要信息时缓存结果。在应用程序查询一次后,操作系统产品名称不会发生变化。 :)至于向后兼容性,我确信它在较旧的操作系统上运行良好......但是你要在将它发送给客户之前进行测试,对吗?

如果您想要一种未记录的方式,那么有一个注册表项,其中包含您想要的内容:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion ("ProductName")