如何在 C 中的 Windows 中获取准确的操作系统名称 [重复]

问题描述 投票:0回答:0

我尝试了很多方法来实现这一目标,使用已记录的 API 和未记录的 API,但我没有得到任何可靠的结果。显示为输出的版本是旧版本,或者使用的 API 已被弃用,等等。

我尝试的第一件事是使用

GetVersionEx
API:

OSVERSIONINFO osvi;

ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
printf("%d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);

那个输出是

6.2
,这是错误的,因为我在 Windows 11 版本上运行, 如 MSDN 中所述:https://learn.microsoft.com/windows/win32/sysinfo/operating-system-version

我尝试的第二件事是使用注册表项,如以下代码所示:

char value[255];
DWORD BufferSize = 8192;
RegGetValueA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize);
printf("%s", value);

这段代码以某种方式为我提供了计算机上运行的先前版本,即 Windows 10 家庭版。

我已经考虑过使用

msinfo.exe
程序,但我宁愿避免它,因为没有控制台输出,而且这种方法有点粗略。

是否有任何可靠的方法来显示 Windows 计算机的确切操作系统名称,无论它是在 Windows 95 还是 Windows 11 上运行?

c winapi
© www.soinside.com 2019 - 2024. All rights reserved.