我尝试了很多方法来实现这一目标,使用已记录的 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 上运行?