怎么用VC 判断操作系统
各位大虾
请问怎么用VC 判断操作系统是Winxp,Vista还是Win7
还有怎么用VC 判断系统是Win32 还是Win 64
[解决办法]
在网上搜一下windows API 函数中关于返回系统版本号的方法。
[解决办法]
试试用这个函数:
DWORD GetEnvironmentVariable(
LPCTSTR lpName, // address of environment variable name
LPTSTR lpBuffer, // address of buffer for variable value
DWORD nSize // size of buffer, in characters
);
可以得到环境变量。你可以用这个函数得到名字为"OS"的环境变量,然后就可以判断是什么系统了。这是一个办法,你可以试试。我做文件加密软件,就是用这个函数来得到temp的值的。
[解决办法]
查了一下,这个函数:
BOOL GetVersionEx(
LPOSVERSIONINFO lpVersionInformation // pointer to version
// information structure
);
可以得到。具体用法你再百度或MSDN一下吧。
[解决办法]
http://support.microsoft.com/kb/307393
http://support.microsoft.com/kb/188987
[解决办法]
BOOL WINAPI GetVersionEx(
__in_out LPOSVERSIONINFO lpVersionInfo
);
[解决办法]
[code=C/C++][/code]
#include <windows.h>
#include <stdio.h>
void main()
{
OSVERSIONINFO osvi;
BOOL bIsWindowsXPorLater;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
bIsWindowsXPorLater =
( (osvi.dwMajorVersion > 5) ||
( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) ));
if(bIsWindowsXPorLater)
printf("The system meets the requirements.\n");
else printf("The system does not meet the requirements.\n");
}
[解决办法]
OSVERSIONINFO Version;
ZeroMemory(&Version,sizeof(OSVERSIONINFO));
Version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&Version);
if (Version.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion==0))
{
return WIN2K;
}else if((Version.dwMajorVersion==5)&&(Version.dwMinorVersion>0))
{
return WINXP;
}else if((Version.dwMajorVersion==6)&&(Version.dwMinorVersion==0))
return VISTA;
else if((Version.dwMajorVersion>=6))
return WIN7;
}
else if(Version.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
{
if ((Version.dwMajorVersion == 4) && (Version.dwMinorVersion < 90) )
{
return WIN98;
}
if ((Version.dwMajorVersion == 4) && (Version.dwMinorVersion >= 90) )
{
return WINME;
}
}
[解决办法]
判断32 or 64
http://www.wangluo8.com/html/diannao/dnzs/2009/0328/336.html
[解决办法]
64位Wnidows 里面有个叫Wow64 的模拟器技术,可以使32位的程序在64位Windows 上运行。 当你想在程序里面针对32b位/ 64位系统执行不同代码的时候, 需要判断操作系统是32位还是64位。 使用 Windows API函数 GetNativeSystemInfo 可以获得这个信息。
代码示例:
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_IA64 )
{
//64 位操作系统
}
else
{
// 32 位操作系统
}
另外,Windows API 还提供了 IsWow64Process 函数判断程序是不是运行在Wow64模拟器之上。
代码示例:
BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);
需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。 所以使用该函数的时候最好用GetProcAddress。
typedef void (WINAPI *LPFN_PGNSI)(LPSYSTEM_INFO);
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_PGNSI pGNSI = (LPFN_PGNSI ) GetProcAddress(
GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
[解决办法]
用GetVersionEx()这个函数是不能判断操作系统式xp,vista 还是windows7的。而且它是win32中的一个api,原形为:Bool GetVersionEx(LPOSVERSIONINFO lpVersionInformation);参数是指向OSVERSIONINFO结构体的指针。
typedf struct_OSVERSIONINFO{
DWORD dwOSVersioninfoSize;//结构体所占字节数
DWORD dwMajorVersion; //主版本号
DWORD dwMinorVersion;//次版本号
DWORD dwBuild Number;//
DWORD dwPlatformId;
TCHAR szCSDVersion[128];
}OSVERSIONINFO;
dwPlatformId:有三个值,VER_PLATFORM_WIN32s:对应Win32s on Windows 3.1.
VER_PLATFORM_WIN32_WINDOWS:对应Windows 95, Windows 98, or Windows Me
VER_PLATFORM_WIN32_NT:对应Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, or Windows .NET Server.
[解决办法]
试试用这个函数:
DWORD GetEnvironmentVariable(
LPCTSTR lpName, // address of environment variable name
LPTSTR lpBuffer, // address of buffer for variable value
DWORD nSize // size of buffer, in characters
);
可以得到环境变量。你可以用这个函数得到名字为"OS"的环境变量,然后就可以判断是什么系统了。这是一个办法,你可以试试。我做文件加密软件,就是用这个函数来得到temp的值的。