Detect whether current Windows version is 32 bit or 64 bit

前端 未结 23 2844
抹茶落季
抹茶落季 2020-11-28 03:47

Believe it or not, my installer is so old that it doesn\'t have an option to detect the 64-bit version of Windows.

Is there a Windows DLL call or (even better) an en

23条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-28 04:27

    Here is some Delphi code to check whether your program is running on a 64 bit operating system:

    function Is64BitOS: Boolean;
    {$IFNDEF WIN64}
    type
      TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
    var
      hKernel32 : Integer;
      IsWow64Process : TIsWow64Process;
      IsWow64 : BOOL;
    {$ENDIF}
    begin
      {$IFDEF WIN64}
         //We're a 64-bit application; obviously we're running on 64-bit Windows.
         Result := True;
      {$ELSE}
      // We can check if the operating system is 64-bit by checking whether
      // we are running under Wow64 (we are 32-bit code). We must check if this
      // function is implemented before we call it, because some older 32-bit 
      // versions of kernel32.dll (eg. Windows 2000) don't know about it.
      // See "IsWow64Process", http://msdn.microsoft.com/en-us/library/ms684139.aspx
      Result := False;
      hKernel32 := LoadLibrary('kernel32.dll');
      if hKernel32 = 0 then RaiseLastOSError;
      try
        @IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
        if Assigned(IsWow64Process) then begin
          if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
            Result := IsWow64;
          end
          else RaiseLastOSError;
        end;
      finally
        FreeLibrary(hKernel32);
      end;  
      {$ENDIf}
    end;
    

提交回复
热议问题