AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung
Thema durchsuchen
Ansicht
Themen-Optionen

[Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung

Ein Thema von MagicAndre1981 · begonnen am 20. Aug 2007 · letzter Beitrag vom 18. Apr 2016
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von MagicAndre1981
MagicAndre1981
Registriert seit: 4. Jun 2004
TWindowsVersionsInfo - Kompo zur Windowserkennung

Version: 1.5

Da mehrfach danach gefragt wurde hab ich mal die Windowserkennng in eine Klasse gepackt, die per Direktive auch als VLC-Kompo auf die Form geklatscht werden kann.

Die Kompo ist nix besonderes, halt nur den Kram, den ich schon für die CodeLib gepostet hatte. Ich hab jetzt die Erkennung der Vista- und Windows Server 2008 Editions ohne WMI implementiert.

Code:
* Kappselung als Kompo/Klasse
* Erkennung der Vista- und Windows Server 2008 Editions ohne WMI implementiert.
+ Erkennung der K(N), N Editions von WIndows XP (Pro, Home) und WIndows Server 2003.
+ Erkennung der Windows XP Embedded
+ Erkennung der Windows Home Server Version ( [url]http://de.wikipedia.org/wiki/Windows_Home_Server[/url])
+ neue Betas werden erkannt
Fix: Fix bei Erkennung der Windows Server 2003 Web Edition
Changelog zur Version 1.0.1:
Code:
- Erkennung der Vista/Server2008 Revision überarbeitet
- Erkennung von Windows Server 2008 RC0/RC1/RTM
- Code lässt sich unter Delphi 2009 compilieren
- Support für Windows 7 / Server 2008 R2
- neue Properties: - Codename
                   - IsBeta
- Erkennung für Windows Vista / Server 2008 Sp2
- Erkennung für neue Windows Server 2008 Editionen
Changelog zur Version 1.0:
Code:
Fix: Units lies sich nicht als nonVCL kompilieren
+    Longhorn M6 4039 Erkennung hinzugefügt
Unterstütze Versionen:
  • Windows 7 (alle SKUs) (die genauen Editionen können sich noch ändern)
  • Windows Server 2008 R2 (alle SKUs)
  • Windows Vista (alle SKUs)
  • Windows Server 2008 (alle SKUs, inclusive EBS, SBS, Hyper-V, HPC)
  • Windows Longhorn Alphas
  • Windows Server 2003 (Standard, Web Edition, Enterprise, DataCenter, Standard Edition for Itanium-based Systems, Enterprise Edition for Itanium-based Systems, DataCenter Edition for Itanium-based Systems, Standard x64 Edition, Enterprise x64 Edition, DataCenter x64 Edition)
  • Windows Server 2003 R2
  • Windows Home Server
  • Windows XP Prof. x64 Edition
  • Windows XP Prof. (K, N)
  • Windows XP Home (K, N)
  • Windows XP Tablet Edition und TabletPC Edition 2005
  • Windows Fundamentals for Legacy PCs
  • Windows XP Media Center Edition alle Versionen (2002, 2004, 2005)
  • Windows 2000 (Prof., Server, DataCenter, Advanced Server + Betas (Codename NT5.0))
  • Windows NT 4 Server (Server, Enterprise Server, Advanced Server)
  • Windows NT 4 Workstation (mit Unterscheidunf zw. SP6 und SP6a)
  • Windows NT 3.51
  • Windows 95 (A,B,C + Betas (Codename: Chicago, Nashville))
  • Windows 98 (Original, SE + Betas (Codename: Memphis))
  • Windows ME (Original + BETA 1 (Codename: Georgia))

Quellen:

Bugs:

Code:
#1: Unit lässt sich als non VCL nicht kompilieren. beseitigt in Version 1.0.1
Aufbau:

Hier gibts eine Liste der Öffentlichen Funktionen Properties.

Delphi-Quellcode:
    function IsWindows2008ServerCore : boolean;
    function IsServer : boolean;
    function IsWorkstation : boolean;
    function IsMediaCenterEdition : boolean;
    function IsTabletPCEdition : boolean;

    property MajorVersion : Byte read FMajorVersion;
    property MinorVersion : Byte read FMinorVersion;
    property BuildNumber : DWORD read FBuild;
    property BuildRevision : DWORD read FBuildRev;
    property ServicePack : string read FServicePack;
    property WindowsVersionsString : string read FFullName;
    property BuildLab : string read FBuildLab;
    property BuildLabEx : string read FBuildLabEx;
    property ServicePackMajor : Byte read FServicePackMajor;
    property ServicePackMinor : Byte read FServicePackMinor;
    property PlatformID : TWinType read FWinType;
    property WindowsVersion : TWindowsVersions read FWindowsVersion;
    property WindowsEdition : TWinEdition read FEdition;
    property IsBeta : boolean read FIsBeta;
    property Codename : string read FCodename;
    property ProcessorArchitecture : TProcessorArchitecture read FProcessorArchitecture;
  end;
Nach dem Erzeugen einer Instanz könnt ihr die verschiendensten Werte abfragen :

Delphi-Quellcode:
wvi := TWindowsVersionInfo.Create(self);

Edit_ComplString.Text := wvi.WindowsVersionsString;
  Edit1.Text := wvi.ServicePack;
  Edit2.Text := IntToStr( wvi.MajorVersion );
  Edit3.Text := IntToStr( wvi.MinorVersion );
  Edit4.Text := IntToStr( wvi.BuildNumber );
und ihr könnt auf spezielle Windowsversionsgruppen abfragen, die als Enum vorliegen:

  if wvi.WindowsVersion = wvWinVista then Damit fragt ihr nach ob das aktuelle OS ein Vista OS ist. Wenn ihr jetzt auf eine spezielle Edition abfragen wollt, dann könnt ihr das Property WindowsEdition auf einen Wert testen:

if wvi.WindowsEdition = weVistaUltimate then // Test auf WIndows Vista Ultimate Die weiteren Werte sind in der Unit zu finden.

Weitere Properties:
Abfrag der Platform (WinNT, WIn9x) und der Processorarchiteture gibts auch als Enums.

So, das sollte das wichtigeste sein damit ihr loslegen könnt.

Besonderen Dank geht an die Tester, die mein Testprogramm vor einigen Wochen getestet haben

Dann hab ich noch die Unit cruStrSplitter.pas genutzt. Von wehm diese ist weiß ich jetzt grad nicht. An diesen User gehen auch Credits.
Angehängte Dateien
Dateityp: 7z bilder_132.7z (2,62 MB, 354x aufgerufen)
Dateityp: zip windowsversionsinfo1.0.1_151.zip (15,7 KB, 343x aufgerufen)
Dateityp: zip windowsversionsinfo1.5_880.zip (26,1 KB, 507x aufgerufen)
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
 
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#41
  Alt 4. Jan 2009, 16:10
Das sieht man doch bereits am Aufruf des Constructors.
Delphi-Quellcode:
var wvi: TWindowsVersionInfo;
begin
  wvi := TWindowsVersionInfo.Create(self);
  try
    Edit_ComplString.Text := wvi.WindowsVersionsString;
    Edit1.Text := wvi.ServicePack;
    Edit2.Text := IntToStr( wvi.MajorVersion );
    Edit3.Text := IntToStr( wvi.MinorVersion );
    Edit4.Text := IntToStr( wvi.BuildNumber );
  finally
    wvi.Free;
  end;
end;
Aus dem Kopf getippt, müsste aber stimmen.
Detlef
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

 
RAD-Studio 2009 Ent
 
#42
  Alt 4. Jan 2009, 16:12
Zitat von DeddyH:
Das sieht man doch bereits am Aufruf des Constructors.
Delphi-Quellcode:
var wvi: TWindowsVersionInfo;
begin
  wvi := TWindowsVersionInfo.Create(self);
  try
    Edit_ComplString.Text := wvi.WindowsVersionsString;
    Edit1.Text := wvi.ServicePack;
    Edit2.Text := IntToStr( wvi.MajorVersion );
    Edit3.Text := IntToStr( wvi.MinorVersion );
    Edit4.Text := IntToStr( wvi.BuildNumber );
  finally
    wvi.Free;
  end;
end;
Aus dem Kopf getippt, müsste aber stimmen.
das hilft aber nicht gegen das "Char-Problem":

Delphi-Quellcode:
if (lstrcmpi(osvi.szCSDVersion,'Service Pack 2') = 0) then
(lstrcmpi(osvi.szCSDVersion,'Service Pack 6') = 0) then

Inkompatible Typen: Array und PWideChar.
Gruss

EL
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#43
  Alt 4. Jan 2009, 16:15
Richtig, aber das ist auch nicht die Frage gewesen, auf die ich geantwortet habe. Das "Char"-Problem bezieht sich wieder einmal auf ANSI <--> Unicode.
Detlef
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

 
Delphi 11 Alexandria
 
#44
  Alt 4. Jan 2009, 16:19
@DeddyH,
vielen Dank, genau das habe ich gesucht.
Zitat von DeddyH:
Das sieht man doch bereits am Aufruf des Constructors.
Ich wüßte leider nicht wo man da nachschauen muss um das zu erkennen.
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#45
  Alt 4. Jan 2009, 16:26
Zitat:
wvi := TWindowsVersionInfo.Create(self);
Das bedeutet ja, dass wvi vom Typ TWindowsVersionInfo (oder zumindest eines Vorfahren davon) sein muss, sonst würde der Compiler das gar nicht zulassen
Detlef
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#46
  Alt 4. Jan 2009, 22:40
Update auf Version 1.5

Den Download gibt es im ersten Beitrag:
http://www.delphipraxis.net/internal...=765213#765213

Die Komponente lässt sich nun unter Delphi 2009 kompilieren, zudem sind 2 neue Properties hinzugekommen (Codename und IsBeta (ist nützlich wenn man nicht weiß ob die Version des Vista Sp2 noch ne Beta ist oder nicht, denn wenn die SP Beta abläuft bekommt man nach 2 Stunden Nutzung einen BSOD)) und die Komponente erkennt Windows 7.

Viel Spaß, ich hätte nicht gedacht dass die so viele Leute nutzen und ne Delphi 2009 Version wollen
André
  Mit Zitat antworten Zitat
ringli

 
Delphi 11 Alexandria
 
#47
  Alt 14. Jan 2009, 05:51
Ich hoffe ich zweckentfremde den Thread nicht, aber ich habe mir die Komponente um eine Funktion erweitert damit ich für eine einfache Abfrage der Betriebssystemversion in meinen Programmen nicht extra eine Klasse erzeugen bzw. wieder freigeben muss. Vielleicht kann es ja noch jemand gebrauchen.

Hier die entsprechenden Erweiterungen in der WindowsVersionInfo.pas:
Delphi-Quellcode:
interface

.
.
.

type
  // Vergleichsmodus auswählen
  // Wird nur für die Funktion "CheckWinVer" benötigt
  TCompareMode = (
    Like, // gleich
    GreaterThan, // größer als
    GreaterLike, // größer gleich
    LessThan, // kleiner
    LessLike, // kleiner gleich
    OutSide // außerhalb
  );

.
.
.

// Einfache Abfrage der Windowsversion ohne extern die Klasse verwenden zu müssen
function CheckWinVer(CompareMode : TCompareMode; CompareWinVer : TWindowsVersions) : Boolean;

implementation

.
.
.

// Einfache Abfrage der Windowsversion ohne extern die Klasse verwenden zu müssen
function CheckWinVer(CompareMode : TCompareMode; CompareWinVer : TWindowsVersions) : Boolean;
var
  wvi : TWindowsVersionInfo;
begin
  Result := False;
  {$IFDEF USE_VCL}
    wvi := TWindowsVersionInfo.Create(nil);
  {$ELSE}
    wvi := TWindowsVersionInfo.Create;
  {$ENDIF}
  case CompareMode of
    Like : if wvi.WindowsVersion = CompareWinVer then Result := True;
    GreaterThan : if wvi.WindowsVersion > CompareWinVer then Result := True;
    GreaterLike : if wvi.WindowsVersion >= CompareWinVer then Result := True;
    LessThan : if wvi.WindowsVersion < CompareWinVer then Result := True;
    LessLike : if wvi.WindowsVersion <= CompareWinVer then Result := True;
    OutSide : if wvi.WindowsVersion <> CompareWinVer then Result := True;
  end;
  FreeAndNil(wvi);
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if CheckWinVer(Like, wvWinXP) then
    ShowMessage('WinXP')
  else
    ShowMessage('Kein WinXP');
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#48
  Alt 14. Jan 2009, 10:59
Kleiner Verbesserungsvorschlag:
Delphi-Quellcode:
function CheckWinVer(CompareMode : TCompareMode; CompareWinVer : TWindowsVersions) : Boolean;
var
  wvi : TWindowsVersionInfo;
begin
  {$IFDEF USE_VCL}
    wvi := TWindowsVersionInfo.Create(nil);
  {$ELSE}
    wvi := TWindowsVersionInfo.Create;
  {$ENDIF}
  try
    case CompareMode of
      Like : Result := wvi.WindowsVersion = CompareWinVer;
      GreaterThan : Result := wvi.WindowsVersion > CompareWinVer;
      GreaterLike : Result := wvi.WindowsVersion >= CompareWinVer;
      LessThan : Result := wvi.WindowsVersion < CompareWinVer;
      LessLike : Result := wvi.WindowsVersion <= CompareWinVer;
      OutSide : Result := wvi.WindowsVersion <> CompareWinVer;
      else
        Result := False;
    end;
  finally
    FreeAndNil(wvi);
  end;
end;
Detlef
  Mit Zitat antworten Zitat
pertzschc

 
Delphi 10.4 Sydney
 
#49
  Alt 25. Feb 2009, 18:07
Zitat von MagicAndre1981:
Update auf Version 1.5
Hallo Andre,

danke für das Update auf Version 1.5. Leider wirft diese Version bei der Ausführung in der IDE immer eine Exception, da bei meinem Windows (XP SP3) weder der Regeintrag "CSDBuildNumber" existiert noch die Property "BuildLabEx" gefüllt ist. Damit hält die IDE beim Start meines Programmes immer an der Exceptionstelle an, was lästig ist. Wird dieses ganze BuildLabEx oder CSDBuild so dringend benötigt?

Delphi-Quellcode:
    function GetRevisionFromBuildLabEx(): DWORD;
    var
      sp : TStrSplitter;
    begin
      sp := TStrSplitter.Create;
      try
        try
          sp.Execute(BuildLabEx,'.'); // hier ist BuildLabEx = '' bei mir
          Result := StrToInt( sp[1] );
        except on E: EConvertError do
          Result := MAXDWORD;
        end;
      finally
        FreeAndNil(sp);
      end;
    end;

Begin
  Result := MAXDWORD;
  bRevFromBuildLabEx := false;
  sCSDBuildnumber := '0';
  iCSDBuildnumber := 0;
  try
    sCSDBuildnumber := RegReadString (HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\',
    'CSDBuildNumber');
    if sCSDBuildnumber <> 'then // hier ist sCSDBuildnumber = '' bei mir
      iCSDBuildnumber := StrToInt( sCSDBuildnumber )
    else
    Begin
[b] iCSDBuildnumber := GetRevisionFromBuildLabEx;[/b]
      bRevFromBuildLabEx := true;
    end
  except on E: EConvertError do
  end;
Danke und Gruß,
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#50
  Alt 25. Feb 2009, 22:30
schalte in der IDE die Option "Bei Delphi Exceptions stoppen" ab. Ja die Funktion brauche ich sonst kann man nicht zwischen den SP Versionen bei Vista unterscheiden. Den Eintrag gibts bei XP nur bei Betas, frag mich nicht warum die MS mal einbaut und mal nicht.
André
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 03:42 Uhr.
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