![]() |
AW: OS Version ermitteln
Habe ich die dpr im Archiv vergessen? Nö, die liegt doch bei.
Gut, dann bleibt noch der Fehler warum der Server 2008 als Vista erkannt wird. |
AW: OS Version ermitteln
|
AW: OS Version ermitteln
Zitat:
False = 0 True <> 0 also
Delphi-Quellcode:
.
if TheVar and TheConstOderSonstwas <> 0 then
Zitat:
Delphi-Quellcode:
, außerdem ist es länger und, wie ich finde, unübersichtlicher, als
if TheBool = true then
Delphi-Quellcode:
Dieses Konstengenvergleiche ist nur wichtig, wenn es um Vergleiche mehrer Bits geht.
if osvi.wSuiteMask and VER_SUITE_PERSONAL <> 0 then
also z.B.
Delphi-Quellcode:
const Value0 = $00;
Value1 = $01; Value2 = $02; Value3 = $03; ValueMask = $0F; if TheVar and ValueMask = Value2 then |
AW: OS Version ermitteln
Einspruch Euer Ehren,
Damit wollte ich zum Ausdruck bringen, das dieses Bit gesetzt sein muß (wobei man im ersten Moment natürlich nicht weiß, daß sich hinter VER_SUITE_PERSONAL nur ein Bit versteckt) Und wenn man von der Länge des Konstantennamens absieht halte ich das für sauberer als das beliebige <>0, weil das Bitmuster das gleiche sein muß! Gruß K-H |
AW: OS Version ermitteln
@Luckie
nimm das GetNativeSystemInfo(si); an den Anfang hoch sonst wird XP64 Bit als Server2003 deklariert. |
AW: OS Version ermitteln
OK, aber das habe ich eigentlich hier berücksichtigt:
Delphi-Quellcode:
Wie im Original auch.
if (osvi.dwMajorVersion = 6) then
begin if (osvi.dwMinorVersion = 0) then begin if (osvi.wProductType = VER_NT_WORKSTATION) then Result := 'Windows Vista' else Result := 'Windows Server 2008'; end; |
AW: OS Version ermitteln
Du greifst vorher mehrfach auf
Delphi-Quellcode:
zu.
si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64
EDIT zumindest in der Letzten Version war si gar nicht mehr initialisiert bis zum GetNativeSystemInfo |
AW: OS Version ermitteln
Funktion aus dem
![]()
Delphi-Quellcode:
function GetNativeSystemInfo(var SystemInfo: TSystemInfo): Boolean;
type TGetNativeSystemInfo = procedure (var SystemInfo: TSystemInfo) stdcall; var LibraryHandle: HMODULE; _GetNativeSystemInfo: TGetNativeSystemInfo; begin Result := False; LibraryHandle := GetModuleHandle(kernel32); if LibraryHandle <> 0 then begin _GetNativeSystemInfo := GetProcAddress(LibraryHandle,'GetNativeSystemInfo'); if Assigned(_GetNativeSystemInfo) then begin _GetNativeSystemInfo(SystemInfo); Result := True; end else GetSystemInfo(SystemInfo); end else GetSystemInfo(SystemInfo); end; function IsWindows64: Boolean; var ASystemInfo: TSystemInfo; const PROCESSOR_ARCHITECTURE_INTEL = 0; PROCESSOR_ARCHITECTURE_IA64 = 6; PROCESSOR_ARCHITECTURE_AMD64 = 9; begin GetNativeSystemInfo(ASystemInfo); Result := ASystemInfo.wProcessorArchitecture in [PROCESSOR_ARCHITECTURE_IA64,PROCESSOR_ARCHITECTURE_AMD64]; end; |
AW: OS Version ermitteln
Zitat:
@toms: Das mit dem 32/64-Bit scheint jetzt gelöst zu sein. Ich habe nur noch das Vista/Srever 2008 Problem. |
AW: OS Version ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier ist die aktuelle Version.
|
AW: OS Version ermitteln
Der Vollständigkeit halber hier nochmal:
Windows 7 Professional 32-bit: Passt (Meldung als: Windows 7 Professional Build: 7600 32-bit) Windows XP Professional SP3 32-bit (VM, "Windows XP-Mode"): Passt (Meldung als: Windows XP Professional Service Pack 3 Build: 2600) |
AW: OS Version ermitteln
Sehr schön. Danke fürs Testen. Hätte jemand noch den Server 2008 zum Testen zur Verfügung? Weil damit habe ich im Kompatibilitätsmodus ja dieses Vista Problem. Eventuell ist es ja nur ein Problem mit dem Kompatibilitätsmodus und es funktioniert in Wirklichkeit.
|
AW: OS Version ermitteln
Zitat:
![]() :) |
AW: OS Version ermitteln
Würde ich machen, aber ich habe zur Zeit nur ein kleines Netbook zur Verfügung, welches ich mir mit meinem Vater teile. Und eine VM würde es wohl in die Knie zwingen.
|
AW: OS Version ermitteln
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 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