VC++ 如何判断操作系统位数
通过程序中的代码代码,判断当前运行程序的操作系统是32位还是64位的。
有好的方法或者思路的会酌情加分。
ps:sizeof只能判断当前编译程序的位数,而非操作系统的位数。
补充:目前用的是读注册表 PROCESSOR_ARCHITECTURE 键值的方法,得到的是处理器信息,貌似不行啊
追问:这个方法我试过,但是这个得到的pProcessorArchitecture 是处理器信息还是操作系统的信息呢?这个是通过GetVersionEx 的到系统信息,再根据版本号来判断操作系统的。
但是有个问题
X64和X86的win7能区分吗?
Vista呢
答案:方法1,msdn 有相应的例子,代码贴出来给你看看
MSDN有相应Example!
#include <windows.h>
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle( "kernel32 "), "IsWow64Process ");
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{// handle error
std::cout < < "Handle Error " < <std::endl;
}
}
return bIsWow64;
}
方法2:
GetSystemWow64Directory
判断这个文件夹是否存在
最后做下广**告哈:www.ubider.com
其他:不可以。楼上说的sizeof(int)更加不靠谱。
sizeof(指针)的大小只跟当前程序的编译设置有关。比如,你用VC编译一个32位的程序,那么sizeof(void *)的值就是32。就算你在64位的windows上运行这个程序,sizeof(void*)还是32,因为这已经在编译的时候就确定了。同样,如果你编译的是一个64位程序,那么sizeof(void*)就是64,就算将来有128位系统,你这个程序里的sizeof(void*)也仍然是64.
sizeof(int)就更加不靠谱,因为C/C++标准只规定了sizeof(int)一定要小于或者等于sizeof(long),但没规定具体应该多大。比如,VC下编译64位程序,sizeof(int)是32。但64位linux程序里,
g++的sizeof(int)是64。
#include <iostream>
#include <windows.h>
using std::cout;
using std::endl;
void main()
{
SYSTEM_INFO si;
LPCSTR pProcessorArchitecture = NULL;
GetSystemInfo(&si);
switch (si.wProcessorArchitecture) {
case PROCESSOR_ARCHITECTURE_AMD64:
pProcessorArchitecture = "PROCESSOR_ARCHITECTURE_AMD64";
break;
case PROCESSOR_ARCHITECTURE_IA64:
pProcessorArchitecture = "PROCESSOR_ARCHITECTURE_IA64";
break;
case PROCESSOR_ARCHITECTURE_INTEL:
pProcessorArchitecture = "PROCESSOR_ARCHITECTURE_INTEL";
break;
default:
pProcessorArchitecture = "PROCESSOR_ARCHITECTURE_UNKNOWN";
}
cout << pProcessorArchitecture << endl;
} enum Win32Type{
Win32s,
WinNT3,
Win95,
Win98,
WinME,
WinNT4,
Win2000,
WinXP
};
Win32Type IsShellType()
{
Win32Type ShellType;
DWORD winVer;
OSVERSIONINFO *osvi;
winVer=GetVersion();
if(winVer<0x80000000){/*NT */
ShellType=WinNT3;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL){
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L)ShellType=WinNT4;
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)ShellType=Win2000;
else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)ShellType=WinXP;
free(osvi);
}
}
else if (LOBYTE(LOWORD(winVer))<4)
ShellType=Win32s;
else{
ShellType=Win95;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL){
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)ShellType=Win98;
else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)ShellType=WinME;
free(osvi);
}
}
return ShellType;
}
上一个:VC6.0怎么知道工具栏按钮执行的是哪个函数
下一个:vc编写的一个程序