检测系统是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位系统,无法运行。
需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。 所以使用该函数的时候最好用GetProcAddress 。