Entwickler-Ecke

Windows API - OS erkennung


Roy - Do 11.02.16 20:15
Titel: OS erkennung
Hallo,

wie kann man die GetWinVersion auf Windows7/8 und 10 erweitern



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function GetWinVersion: string;
begin
  result:='Unbekannte Version';
  case Win32Platform of
    1:// 9x-Reihe
      If Win32MajorVersion=4 Then Begin
        Case Win32MajorVersion of
            0: result:='Windows 95';
            10: result:='Windows 98';
            90: result:='Windows Me';
        end;
      end;
  2// NT-Reihe
     Case Win32MajorVersion of
         3:IF Win32MinorVersion=51 then
              result:='Windows NT 3.51';
         4:If Win32MinorVersion=0 then
             result:='Windows NT 4';
         5:Case Win32MinorVersion of
              0: result:='Windows 2000';
              1: result:='Windows XP';
              2: result:='Windows .NET Server';
           end;
     End;
  end;
  //Win32CSDVersion enthält Informationen zu Servicepacks
  if Win32CSDVersion<>'' then
    result:=result+' '+Win32CSDVersion;
end;

Danke

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


Nersgatt - Fr 12.02.16 07:45

In der Msdn findest Du eine Tabelle mit den Werten für die Versionen:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx


jaenicke - Fr 12.02.16 08:45

Wichtig ist dabei noch, dass die Anwendung ein Manifest enthalten muss, in dem diese als Windows 10 kompatibel deklariert wird. Ansonsten bekommst du auch nicht das Ergebnis Windows 10, sondern aus Kompatibilitätsgründen eine ältere Versionsnummer.

Hintergrund ist, dass leider zu viele auf die Versionsnummer prüfen anstatt zu prüfen, ob ein benötigtes Feature vorhanden ist. Dadurch gab es schon viele unnötige Fehler:
Entweder dass Anwendungen als inkompatibel nicht starteten, wenn eine neue Windowsversion kam, obwohl es die notwendige Funktionalität auch gehabt hätte.
Es gab aber auch immer wieder den Fehler, dass Funktionen in neueren Windowsversionen nicht mehr vorhanden waren, die Software dies aber nicht erkannt hat, weil einfach stur geprüft wurde, ob die Windowsversion mindestens XY ist.
Deshalb sah sich Microsoft dazu gezwungen selbst zu handeln...

Davon getroffen werden natürlich auch Systeminformationstools, die die Version aus rein informativen Gründen benötigen. Hier kann man als Ausweichlösung die Versionen der System-DLLs abfragen. Das sollte man aber auch wirklich nur zu diesem Zweck machen.


Delphi-Laie - Sa 13.02.16 00:42

Dazu findet man recht viel in den Foren, z.B. http://www.delphipraxis.net/186147-os-version-windows-10-ermitteln.html.