首页 > 代码库 > 检测系统是X86系统,还是X64系统

检测系统是X86系统,还是X64系统

function IsWin64: Boolean;  var   Kernel32Handle: THandle;    IsWow64Process: function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;    GetNativeSystemInfo: procedure(var lpSystemInfo: TSystemInfo); stdcall;    isWoW64: Bool;    SystemInfo: TSystemInfo;  const   PROCESSOR_ARCHITECTURE_AMD64 = 9;    PROCESSOR_ARCHITECTURE_IA64 = 6;  begin   Kernel32Handle := GetModuleHandle(‘KERNEL32.DLL‘);    if Kernel32Handle = 0 then     Kernel32Handle := LoadLibrary(‘KERNEL32.DLL‘);    if Kernel32Handle <> 0 then   begin     IsWOW64Process := GetProcAddress(Kernel32Handle,‘IsWow64Process‘);      GetNativeSystemInfo := GetProcAddress(Kernel32Handle,‘GetNativeSystemInfo‘);      if Assigned(IsWow64Process) then     begin       IsWow64Process(GetCurrentProcess,isWoW64);        Result := isWoW64 and Assigned(GetNativeSystemInfo);        if Result then       begin         GetNativeSystemInfo(SystemInfo);          Result := (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or           (SystemInfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64);        end;      end     else Result := False;    end   else Result := False;  end;  

*需要自己先判断是否是WINXP/2003之前的系统

function IsWOW64: BOOL;  begin    Result := False;    if GetProcAddress(GetModuleHandle(kernel32), ‘IsWow64Process‘) <> nil then      IsWow64Process(GetCurrentProcess, Result);  end;

这是 XE 以后的代码,表示你的 EXE 是 32位的,环境是 64 位的。
如果你的 EXE 是 64位的,就不用判断了,32位系统,无法运行。

检测系统是X86系统,还是X64系统