大家帮我看一下这段代码,看看问题出在哪里
这段代码是取得操作系统的版本号,奇怪的是,明明是XP的,应该返回9,但返回的却是12,是Windows 7!Windows 2000的,返回的应该是8,但这段代码返回的却是10,变成Vista了!如果将Windows 7的2行代码去掉,XP取回的值就正常了,是9;如果将case 6下的代码去掉,Windows 2000的返回值也正常了,是8。究竟问题出在哪里呢?
int __fastcall TForm1::GetSysVer(void)
{
int iOSV = 0; //用数字表示最终得到的版本号
OSVERSIONINFO osv; //声明版本结构
osv.dwOSVersionInfoSize = sizeof(osv);
GetVersionEx(&osv);
switch(osv.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
iOSV = 1; //Windows 3.1
break;
case VER_PLATFORM_WIN32_WINDOWS:
switch(osv.dwMinorVersion)
{
case 0:
iOSV = 2; //Windows 95 或 Windows 97 (其实就是Windows95的升级版本)
break;
case 10:
if(osv.szCSDVersion[1] == 'A')
iOSV = 3; //Windows 98 SE
else
iOSV = 4; //Windows 98
break;
case 90:
iOSV = 5; //Windows ME
}
break;
case VER_PLATFORM_WIN32_NT:
switch(osv.dwMajorVersion)
{
case 3:
iOSV = 6; //Windows NT 3.51
break;
case 4:
iOSV = 7; //Windows NT 4.0
break;
case 5:
switch(osv.dwMinorVersion)
{
case 0: //Windows 2000
iOSV = 8;
break;
case 1: //Windows XP
iOSV = 9;
}
case 6:
switch(osv.dwMinorVersion)
{
case 0:
if(osv.szCSDVersion[1] == 'S')
iOSV = 11; //Windows Vista SP1以上
else
iOSV = 10; //Windows Vista
break;
case 1:
iOSV = 12; //Windows 7
}
}
}
return iOSV;
}
[解决办法]
修改后的代码如下,未检查是否有其他错误。
- C/C++ code
int __fastcall TForm1::GetSysVer(void){ int iOSV = 0; //用数字表示最终得到的版本号 OSVERSIONINFO osv; //声明版本结构 osv.dwOSVersionInfoSize = sizeof(osv); GetVersionEx(&osv); switch(osv.dwPlatformId) { case VER_PLATFORM_WIN32s: { iOSV = 1; //Windows 3.1 break; } case VER_PLATFORM_WIN32_WINDOWS: { switch(osv.dwMinorVersion) { case 0: { iOSV = 2; //Windows 95 或 Windows 97 (其实就是Windows95的升级版本) break; } case 10: { if(osv.szCSDVersion[1] == 'A') iOSV = 3; //Windows 98 SE else iOSV = 4; //Windows 98 break; } case 90: { iOSV = 5; //Windows ME break; } default: break; } break; } case VER_PLATFORM_WIN32_NT: { switch (osv.dwMajorVersion) { case 3: { iOSV = 6; //Windows NT 3.51 break; } case 4: { iOSV = 7; //Windows NT 4.0 break; } case 5: { switch (osv.dwMinorVersion) { case 0: //Windows 2000 { iOSV = 8; break; } case 1: //Windows XP { iOSV = 9; break; } default: break; } break; } case 6: { switch (osv.dwMinorVersion) { case 0: { if (osv.szCSDVersion[1] == 'S') iOSV = 11; //Windows Vista SP1以上 else iOSV = 10; //Windows Vista break; } case 1: { iOSV = 12; //Windows 7 break; } default: break; } } default: break; } break; } default: break; } return iOSV;}
[解决办法]
ding
[解决办法]
[解决办法]
没有break的话,继续执行了,判断版本号没有错误.
[解决办法]
路过
[解决办法]
学习学习~~