![]() |
OS Version ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Ich weiß, dass es davon genug Versionen gibt, also warum nicht noch eine? ;)
Könntet ihr es bitte mal testen? Ich habe es unter Windows 7 unter den verschiedenen Kompatibilitätsmodi ausprobiert. Klappt alles, bis auf Server 2008, da bekomme ich immer Vista raus. Projekt im Anhang. |
AW: OS Version ermitteln
Hallo Michael
1. Sehe ich es richtig: Wenn Architecture = AMD64 dann 64-bit, wenn Architecture = Intel dann 32-bit ?
Delphi-Quellcode:
2. LoadLibrary ... FreeLibrary (zudem lädst du zwei Mal den Kernel)
GetSystemInfo(si);
if (osvi.dwMajorVersion >= 6) then begin if (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) then Result := Result + ' 64-bit' else if (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL) then Result := Result + ' 32-bit'; end; end 3. (Noch) nicht Unicode tauglich. Aufruf von GetVersionEx gibt Fehler 'The data area passed to a system call is too small'. |
AW: OS Version ermitteln
Hallo Michael,
auf einer Windows XP Professional SP3 Installation kommt als Ergebnis: --------------------------- Project1 --------------------------- Windows XP Home Edition Service Pack 3 Build: 2600 --------------------------- OK --------------------------- Ich habe mir zwar mal den Quelltext angeschaut, nur finde ich da ohne Delphi gerade den Fehler nicht. Für die Windows-API GetProductInfo gibt es noch mehr Ergbenisse. Die API arbeitet sehr zuverlässig, da ich diese bei mir im SystemInfo einsetze. Edit: Um zu überprüfen, ob das OS 32Bit oder 64Bit ist, würde ich diese Funktion nehmen :
Delphi-Quellcode:
Dazu gibt es auch einen Beitrag hier im Forum, finde aber zu Zeit den Link nicht mehr.
////////////////////////////////////////////////////////////////////////////////
// // 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; |
AW: OS Version ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Michael,
leider Funktioniert es bei Windows 7 Professional 64-Bit auch nicht. Da kommt die Meldung 32-Bit. Gruß Jens |
AW: OS Version ermitteln
Windows 7 Prof 32 Bit: Passt
Windows XP home SP3: Passt nicht --------------------------- Project1 --------------------------- Windows XP Professional Service Pack 3 Build: 2600 --------------------------- OK --------------------------- (schön wärs :-D ) |
AW: OS Version ermitteln
Hallo.
Prinzipiell stimmts bei mir: --------------------------- Project1 --------------------------- Windows Vista rocessExefileBusiness Edition Service Pack 1 Build: 6001 32-bit --------------------------- OK --------------------------- Aber da hat sich glaube ich irgendwas dazwischen geschummelt, was da nicht hingehört :mrgreen: |
AW: OS Version ermitteln
Mein Windows 7 Ultimate 64 wird als:
--------------------------- Project1 --------------------------- Windows 7 Ultimate Edition Build: 7600 32-bit --------------------------- OK --------------------------- erkannt. |
AW: OS Version ermitteln
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 NICHT (Meldung als: Windows XP Home Edition Service Pack 3 Build: 2600) |
AW: OS Version ermitteln
Im Quellcode habe ich ja die Quelle aus dem MSDN angegeben, wo ich den C Code übersetzt habe. Eventuell habe ich da einen Fehler gemacht.
C:
Code:
Wurde bei mir zu
if Wert1 & Wert dann
Delphi-Quellcode:
Das könnte eventuell nicht stimmen.
if Wert1 AND WERT2 = 0 dann
Und die 32/64-BIT Erkennung scheint nicht zu funktionieren. Da ich nicht alle Versionen testen kann. Würde ich euch bitte doch mal den Code zu debuggen (sollte nicht sehr schwer sein, da es nur Verzweigungen sind) und zu gucken, wo er in den falschen Zweig springt und mir dass dann mitzuteilen. Warum ich das noch mal mache ist, dass ich die vorgeschlagene Methode zur Bestimmung des Betriebssystems umsetzen wollte. Deswegen auch die 32/64-Bit Erkennung auf diese Weise. Und Unicode ist es noch nicht, weil ich es hier auf dem Sofa hinter der Front auf dem Netbook mit meinem alten D7 entwickele. Kann man es so ändern, dass es sowohl unter D/ als Ansi compiliert, als auch unter D2010 als Unicode? Welche Datentypen müsste ich da nehmen. String sollte ja als Ansi und Unicode kompilieren. |
AW: OS Version ermitteln
Zitat:
Code:
müsste
if (Wert1 & Wert2)
Delphi-Quellcode:
if (Wert1 and Wert2) <> 0 then
sein. Oder auch
Delphi-Quellcode:
if Boolean(Wert1 and Wert2) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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