AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OS Version ermitteln

Ein Thema von Luckie · begonnen am 30. Nov 2010 · letzter Beitrag vom 31. Dez 2010
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

AW: OS Version ermitteln

  Alt 31. Dez 2010, 13:57
Um zu überprüfen, ob das OS 32Bit oder 64Bit ist, würde ich diese Funktion nehmen :
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
// Bestimmen ob das Betriebssystem 64Bit ist oder nicht
//
function IsWow64: Boolean;
type
  TIsWow64Process = function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;
var
  IsWow64Result: Windows.BOOL; // Result from IsWow64Process
  IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
begin
  // Try to load required function from kernel32
  IsWow64Process := Windows.GetProcAddress(Windows.GetModuleHandle('kernel32'), 'IsWow64Process');
  if Assigned(IsWow64Process) then
  begin
    // Function is implemented: call it
    if not IsWow64Process(Windows.GetCurrentProcess, IsWow64Result) then
      raise SysUtils.Exception.Create('IsWow64: bad process handle');
    // Return result of function
    Result := IsWow64Result;
  end
  else
    // Function not implemented: can't be running on Wow64
    Result := False;
end;
Das scheint nur mit 32-Bit-Programmen zu funktionieren, was auch logisch ist, weil 64-Bit-Programme nicht unter "wow64" laufen. Also ist diese Funktion als universeller Quelltext für 32- und 64-Bit-Compilate (Lazarus!) untauglich. Mit den Compilerschaltern {$IFDEF CPU32},{$IFDEF CPU64}, {$IFDEF WIN32} und/oder {$IFDEF WIN64} ist aber eine zufriedenstellende Anpassung und Ergänzung dieser Funktion möglich, so daß bei 64-Bit-Compilaten (die auf Win32-System ohnehin nicht laufen) automatisch der Wert true zurückgegeben wird.

Zu ergänzen wäre noch, daß

- unter Windows 32 Bit 64-Bit-Prozessoren von Lazarus nicht als solche (also mit 64 Bit) erkannt werden (das ist naheliegend)
- Lazarus 32 Bit unter Windows 64 Bit auch nur 32 Bit sowohl beim Prozessor als auch beim Betriebsprogramm erkennt (was m.E. ebenso naheliegend ist),

so daß mir nicht klar ist, wann {$IFDEF CPU32}<>{$IFDEF CPU64} und/oder {$IFDEF WIN32}<>{$IFDEF WIN64} jemals eintreffen sollte (CPU64 kann nur unter WIN64 festgestellt werden, umgekehrt gilt das erst recht).

Also, die obige Prozedur z.B. mit einem der beiden 32-Bit-Compilerschalter "eingekreist" (oder eingeleitet) und einem Else-Schalter (alternativ: Einer der beiden 64-Bit-Compilerschalter), der die Funkttion bei 64 Bit mit einem einfachen true zurückliefert, müßte das diese Funktion auch Bitanzahl-Plattform-übergreifend komplettieren.

Geändert von Delphi-Laie (31. Dez 2010 um 16:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz