这是我编写的函数,显然用于获取系统名称:
const char* os(){
OSVERSIONINFO os;
ZeroMemory(&os, sizeof(OSVERSIONINFO));
os.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&os);
std::string ret = "Windows ";
if (os.dwMajorVersion == 10)
ret += "10";
else if (os.dwMajorVersion == 6){
if (os.dwMinorVersion == 3)
ret += "8.1";
else if (os.dwMinorVersion == 2)
ret += "8";
else if (os.dwMinorVersion == 1)
ret += "7";
else
ret += "Vista";
}
else if (os.dwMajorVersion == 5){
if (os.dwMinorVersion == 2)
ret += "XP SP2";
else if (os.dwMinorVersion == 1)
ret += "XP";
}
return ret.c_str();
}
此函数返回指向内存缓冲区的指针,该指针在函数离开时被解除分配(对象在堆中动态分配,而不是在堆栈中分配)。
发布于 2015-10-18 01:50:20
更喜欢SecureZeroMemory
,因为根据MSDN,ZeroMemory
可以优化出来。或者更好的是,不要使用奇怪的宏:
OSVERSIONINFO os = {};
此函数返回指向内存缓冲区的指针,该指针在函数离开时被解除分配(对象在堆中动态分配,而不是在堆栈中分配)。
对于“这个函数返回一个指向垃圾的指针”来说,这是很多废话。只要返回一个std::string
,如果调用方决定要执行c_str()
,就让它们执行。
有些操作系统将有相同的版本号。例如,Windows 8和Windows 2012都是6.2。区分它们的推荐方法是使用OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
(Windows8为true,Windows 2012为false )。一个完整的表可以找到这里。
是的,万能的文件说:
要获得操作系统的完整版本号,请在一个系统DLL(如Kernel32.dll )上调用GetFileVersionInfo函数,然后调用VerQueryValue来获取文件版本信息的\StringFileInfo\ProductVersion子块。
您必须调用函数的顺序是GetFileVersionInfoSize
,GetFileVersionInfo
,然后是VerQueryValue
。
https://codereview.stackexchange.com/questions/107898
复制相似问题