VC 判断系统和程序是32位和64位

// CreateThreadTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
	printf("ThreadProc \r\n");
	return 0;
}
//判断是x86还是x64
int CrnGetImageFileMachine(char* lpFileName)
{
	IMAGE_DOS_HEADER idh;
	FILE *f = fopen(lpFileName, "rb");
	fread(&idh, sizeof(idh), 1, f);
	IMAGE_FILE_HEADER ifh;
	fseek(f, idh.e_lfanew + 4, SEEK_SET);
	fread(&ifh, sizeof(ifh), 1, f);
	fclose(f);
	return ifh.Machine;
}
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;
}

int main(int argc, char* argv[])
{
	HANDLE hThread = CreateThread(NULL, 
		0, 
		ThreadProc, 
		NULL, 
		0, 
		NULL);

	char path[MAX_PATH];
	ZeroMemory(path,MAX_PATH);
	GetModuleFileName(NULL,path,MAX_PATH);
	printf("main %s   \r\n",path);
	if(IsWow64())
	{
		//x86程序时要加载SysWOW64
		printf("IsWow64=true\n");
	}else{
		//x64程序直接运行在64系统上,不用加载SysWOW64
		printf("IsWow64=false\n");
	}

	//C:\\Windows\\SysWOW64\\notepad.exe
	int n = CrnGetImageFileMachine(path);//需要检测的可执行文件
	if(n == 0x014C) 
		printf("x86\n");//32位
	else if (n == 0x0200)
		printf("IA64\n");//纯64位
	else if (n == 0x8664) 
		printf("x64\n");//64位
	else 
		printf("未知\n");

	CloseHandle(hThread);
	getchar();

	return 0;
}

你可能感兴趣的:(VC 判断系统和程序是32位和64位)