VC判断系统和进程是64位还是32位
2014-02-27 10:43
633 查看
//判断操作系统是64位还是32位
//返回TRUE位64位,返回FALSE位32位
///////////////////////////////////////////////////////////////////////////////////////
方法一:
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle("kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
return bIsWow64;
}
方法二:
BOOL GetOSVerIs64Bit()
{
BOOL bRet=FALSE;
SYSTEM_INFO si;
typedef VOID(__stdcall*GETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo);
GETNATIVESYSTEMINFO fnGetNativeSystemInfo;
fnGetNativeSystemInfo=(GETNATIVESYSTEMINFO)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"GetNativeSystemInfo");
if (fnGetNativeSystemInfo!=NULL)
{
fnGetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
{
bRet=TRUE;
}
}
return bRet;
}
//////////////////////////////////////////////////////////////////////////////
//判断进程是64位还是32位
//返回1为64位,返回0为32位
////////////////////////////////////////////////////////////////////////////////
int GetProcessIsWOW64(HANDLE hProcess)
{
int nRet=-1;
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
BOOL bRet;
DWORD nError;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(L"kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
bRet=fnIsWow64Process(hProcess,&bIsWow64);
if (bRet==0)
{
nError=GetLastError();
nRet=-2;
}
else
{
if (bIsWow64)
{
nRet=1;
}
else
{
nRet=0;
}
}
}
return nRet;
}
//返回TRUE位64位,返回FALSE位32位
///////////////////////////////////////////////////////////////////////////////////////
方法一:
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle("kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
return bIsWow64;
}
方法二:
BOOL GetOSVerIs64Bit()
{
BOOL bRet=FALSE;
SYSTEM_INFO si;
typedef VOID(__stdcall*GETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo);
GETNATIVESYSTEMINFO fnGetNativeSystemInfo;
fnGetNativeSystemInfo=(GETNATIVESYSTEMINFO)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"GetNativeSystemInfo");
if (fnGetNativeSystemInfo!=NULL)
{
fnGetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
{
bRet=TRUE;
}
}
return bRet;
}
//////////////////////////////////////////////////////////////////////////////
//判断进程是64位还是32位
//返回1为64位,返回0为32位
////////////////////////////////////////////////////////////////////////////////
int GetProcessIsWOW64(HANDLE hProcess)
{
int nRet=-1;
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
BOOL bRet;
DWORD nError;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(L"kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
bRet=fnIsWow64Process(hProcess,&bIsWow64);
if (bRet==0)
{
nError=GetLastError();
nRet=-2;
}
else
{
if (bIsWow64)
{
nRet=1;
}
else
{
nRet=0;
}
}
}
return nRet;
}
相关文章推荐
- VC判断系统和进程是64位还是32位
- VC程序里判断系统是64位还是32位的正确方法
- 【VC】 判断windows系统是64位还是32位
- VC程序里判断系统是64位还是32位的正确方法
- VC程序里判断系统是64位还是32位的正确方法
- VC程序里判断系统是64位还是32位的正确方法.
- VC判断系统是64位还是32位
- 【VC】 判断windows系统是64位还是32位
- VC程序里判断系统是64位还是32位的正确方法.
- Win8判断电脑所用系统是32位还是64位的方法
- 如何判断系统是32位的还是64位的?
- 判断系统是32位还是64位
- 判断系统是64位还是32位的正确方法
- Shell脚本中,如何判断Linux系统是32位还是64位?
- bat命令批处理判断32位还是64位系统的多种方法
- Shell脚本判断Linux系统是32位还是64位的几种方法分享
- 如何判断Unix系统的一个库文件是32位还是64位的
- C# 如何判断系统是64位还是32位
- 判断是否UEFI系统,32位还是64位?
- Shell脚本判断Linux系统是32位还是64位的几种方法分享