Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   OS Version ermitteln (https://www.delphipraxis.net/156372-os-version-ermitteln.html)

Luckie 30. Nov 2010 02:51

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.

toms 30. Nov 2010 05:26

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:
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
2. LoadLibrary ... FreeLibrary (zudem lädst du zwei Mal den Kernel)

3. (Noch) nicht Unicode tauglich.

Aufruf von GetVersionEx gibt Fehler 'The data area passed to a system call is too small'.

RWarnecke 30. Nov 2010 06:28

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:
////////////////////////////////////////////////////////////////////////////////
//
//  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;
Dazu gibt es auch einen Beitrag hier im Forum, finde aber zu Zeit den Link nicht mehr.

Jens Hartmann 30. Nov 2010 07:50

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

Nersgatt 30. Nov 2010 08:03

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 )

Neutral General 30. Nov 2010 09:10

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:

divBy0 30. Nov 2010 09:13

AW: OS Version ermitteln
 
Mein Windows 7 Ultimate 64 wird als:

---------------------------
Project1
---------------------------
Windows 7 Ultimate Edition Build: 7600 32-bit
---------------------------
OK
---------------------------


erkannt.

mirage228 30. Nov 2010 09:31

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)

Luckie 30. Nov 2010 10:23

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:
if Wert1 & Wert dann
Wurde bei mir zu
Delphi-Quellcode:
if Wert1 AND WERT2 = 0 dann
Das könnte eventuell nicht stimmen.

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.

Neutral General 30. Nov 2010 10:28

AW: OS Version ermitteln
 
Zitat:

Zitat von Luckie (Beitrag 1064989)
C:
Code:
if Wert1 & Wert dann
Wurde bei mir zu
Delphi-Quellcode:
if Wert1 AND WERT2 = 0 dann
Das könnte eventuell nicht stimmen.

Das stimmt tatsächlich nicht.
Code:
if (Wert1 & Wert2)
müsste

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 17:12 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz