BOOL ChkSystemVersion()
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx, bRet = FALSE;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
}
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
if ((osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) || (osvi.dwMajorVersion <= 4))
return FALSE;
else
return TRUE;
}
else
return FALSE;
}上面是获取系统版本函数,如何把上面的函数转换为宏定义函数,我想判断操作系统的类型,如果是win2000就去掉某些函数,因为win2000下一些接口没有。
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx, bRet = FALSE;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
}
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
if ((osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) || (osvi.dwMajorVersion <= 4))
return FALSE;
else
return TRUE;
}
else
return FALSE;
}上面是获取系统版本函数,如何把上面的函数转换为宏定义函数,我想判断操作系统的类型,如果是win2000就去掉某些函数,因为win2000下一些接口没有。
int a=0,b=0,i=0,j=0;
_asm
{
pushad
mov ebx,fs:[0x18] ; get self pointer from TEB
mov eax,fs:[0x30] ; get pointer to PEB / database
mov ebx,[eax+0A8h] ; get OSMinorVersion
mov eax,[eax+0A4h] ; get OSMajorVersion
mov j,ebx
mov i,eax
popad
} if((i==5)&&(j==0))
{
AfxMessageBox("系统版本为 Windows 200",MB_OK);
}
else if((i==5)&&(j==1))
{
AfxMessageBox("系统版本为 Windows Xp",MB_OK);
}
else if((i==5)&&(j==2)) {
AfxMessageBox("系统版本为 Windows 200",MB_OK);
}
else if((i==6)&&(j==0))
{
AfxMessageBox("系统版本为 WindowsVista",MB_OK);
}
这种情况一般是通过_MSC_VER 来判断SDK的版本啊
另_MSC_VER是当前编译使用的编译器版本