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

来源:互联网 发布:中科大还有网络教育吗 编辑:程序博客网 时间:2024/05/29 03:28
// 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还是x64int 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程序时要加载SysWOW64printf("IsWow64=true\n");}else{//x64程序直接运行在64系统上,不用加载SysWOW64printf("IsWow64=false\n");}//C:\\Windows\\SysWOW64\\notepad.exeint 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;}

0 0