Mat*_*tej 27 c++ windows version
如果计算机上安装的Windows版本是Windows Vista及更高版本(Windows 7),我如何签入C++?
Chu*_*urn 28
此主题中的所有答案都指向您使用GetVersion
或GetVersionEx
进行此测试,这是不正确的.它似乎有效,但它有风险.Windows操作系统升级的appcompat问题的主要来源是基于GetVersion
错误假设或错误比较结果的写得不好的测试.
进行此测试的正确方法是使用VerifyVersionInfo
,而不是GetVersion
或GetVersionEx
.
如果您使用的是VS 2013编译器工具集和Windows 8.1 SDK,则可以使用VersionHelpers.h
和只调用IsWindowsVistaOrGreater
.
如果您使用VS 2013
v120_xp
平台工具集来定位Windows XP,则实际上您使用的是Windows 7.1A SDK,因此您需要VeriyVersionInfo
直接使用.
否则,使用:
bool IsWindowsVistaOrGreater()
{
OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
DWORDLONG const dwlConditionMask = VerSetConditionMask(
VerSetConditionMask(
VerSetConditionMask(
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
VER_MINORVERSION, VER_GREATER_EQUAL),
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
osvi.dwMajorVersion = HIBYTE(_WIN32_WINNT_VISTA);
osvi.dwMinorVersion = LOBYTE(_WIN32_WINNT_VISTA);
osvi.wServicePackMajor = 0;
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;
}
Run Code Online (Sandbox Code Playgroud)
此代码适用于Windows 2000或更高版本,并为您提供强大的结果.如果你真的需要在Windows 98或Windows ME上运行这个测试 - 并且你使用的编译器工具集足够大,可以在该平台上实际运行,你可以使用显式而非隐式链接进行相同的测试.什么是版本号?
此外,在Windows 8.1和Windows 10上使用GetVersion
或GetVersionEx
默认会获得错误的版本.请参阅Manifest Madness.
需要注意的是与Windows 10
VerifyVersionInfo
也受到相同的基于清单行为(即没有为Windows 10的GUID元素,VVI行为,如果操作系统的版本号是6.2,而不是10.0.这就是说,最现实世界的测试,如IsWindowsVistaOrGreater
,IsWindows7OrGreater
,即使没有清单IsWindows7SP1OrGreater
,IsWindows8OrGreater
所有工作都会正常工作.只有当你使用IsWindows8Point1OrGreater
或IsWindows10OrGreater
基于清单的行为甚至重要时才会工作.
又见这堆栈溢出线程.
Meh*_*ari 20
使用以下定义的GetVersionEx API函数kernel32.dll
:
bool IsWindowsVistaOrHigher() {
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
return osvi.dwMajorVersion >= 6;
}
Run Code Online (Sandbox Code Playgroud)
wal*_*lyk 17
与检查Windows NT版本的其他测试类似:
OSVERSIONINFO vi;
memset (&vi, 0, sizeof vi);
vi .dwOSVersionInfoSize = sizeof vi;
GetVersionEx (&vi);
if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT && vi.dwMajorVersion >= 6)
Run Code Online (Sandbox Code Playgroud)
小智 13
在Visual Studio 2013或更高版本中,您还可以使用新的版本帮助程序功能.
有许多不同Windows版本的方法.例:
#include <VersionHelpers.h>
if (!IsWindowsVistaOrGreater())
{
MessageBox(NULL, "You need at least Windows Vista", "Version Not Supported", MB_OK);
}
Run Code Online (Sandbox Code Playgroud)
更多信息在这里
归档时间: |
|
查看次数: |
32349 次 |
最近记录: |