zoukankan      html  css  js  c++  java
  • 检测系统是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 。

  • 相关阅读:
    浅谈Android中Activity的生命周期
    探索ASP.NET MVC框架之控制器的查找与激活机制
    探索ASP.NET MVC框架之路由系统
    浅谈JavaScript中的defer,async
    浅谈MVC中路由
    JavaScript中一些怪异用法的理解
    split
    您正在搜索的页面可能已经删除、更名或暂时不可用。
    C#中的Attributes的用法
    Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
  • 原文地址:https://www.cnblogs.com/findumars/p/4183160.html
Copyright © 2011-2022 走看看