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 2 von 6     12 34     Letzte »    
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, 355x aufgerufen)
Dateityp: zip windowsversionsinfo1.0.1_151.zip (15,7 KB, 344x aufgerufen)
Dateityp: zip windowsversionsinfo1.5_880.zip (26,1 KB, 509x 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
 
hathor
 
#11
  Alt 25. Aug 2007, 09:21
bds.exe, 10.0.2151.25345
Win xp pro sp2
-------------------------
[Pascal Error] WindowsVersionInfo.pas(1180): E2003 Undeclared identifier: 'IsWindows2008ServerCore'
[Pascal Error] WindowsVersionInfo.pas(1182): E2003 Undeclared identifier: 'Result'
[Pascal Error] WindowsVersionInfo.pas(1182): E2003 Undeclared identifier: 'FWindowsVersion'
[Pascal Error] WindowsVersionInfo.pas(1183): E2003 Undeclared identifier: 'FIsServerCore'
[Pascal Error] WindowsVersionInfo.pas(1186): E2003 Undeclared identifier: 'IsMediaCenterEdition'
[Pascal Error] WindowsVersionInfo.pas(1186): E2029 ';' expected but ':' found
[Pascal Error] WindowsVersionInfo.pas(1188): E2003 Undeclared identifier: 'Result'
[Pascal Error] WindowsVersionInfo.pas(1191): E2003 Undeclared identifier: 'IsServer'
[Pascal Error] WindowsVersionInfo.pas(1193): E2003 Undeclared identifier: 'Result'
[Pascal Error] WindowsVersionInfo.pas(1193): E2003 Undeclared identifier: 'FwProductType'
[Pascal Warning] WindowsVersionInfo.pas(1193): W1023 Comparing signed and unsigned types - widened both operands
[Pascal Warning] WindowsVersionInfo.pas(1194): W1023 Comparing signed and unsigned types - widened both operands
[Pascal Error] WindowsVersionInfo.pas(1197): E2003 Undeclared identifier: 'IsWorkstation'
[Pascal Error] WindowsVersionInfo.pas(1197): E2029 ';' expected but ':' found
[Pascal Error] WindowsVersionInfo.pas(1199): E2003 Undeclared identifier: 'Result'
[Pascal Error] WindowsVersionInfo.pas(1199): E2003 Undeclared identifier: 'FwProductType'
[Pascal Warning] WindowsVersionInfo.pas(1199): W1023 Comparing signed and unsigned types - widened both operands
[Pascal Error] WindowsVersionInfo.pas(1202): E2003 Undeclared identifier: 'IsTabletPCEdition'
[Pascal Error] WindowsVersionInfo.pas(1202): E2029 ';' expected but ':' found
[Pascal Error] WindowsVersionInfo.pas(1204): E2003 Undeclared identifier: 'Result'
[Pascal Fatal Error] Unit1.pas(7): F2063 Could not compile used unit 'WindowsVersionInfo.pas'

Was ist los???
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#12
  Alt 25. Aug 2007, 11:16
Zitat von Mackhack:
Was bedeuten denn die Versionen N, K und KN?
Die K Editions sind spezial Versionen in Korea. Bei der K fehlt der Messenger und bei der KN der Messenger und MediaPlayer. Die N Edition muss in der EU angeboten werden und zwar ohne den Windows Media Player.

@hathor

mon, muss ich mal kucken.
André
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

 
Delphi 2006 Architect
 
#13
  Alt 25. Aug 2007, 20:36
Danke Andre fuer die Infos!

Gute arbeit will ich nochmals betonen. War sicherlich ne Menge Arbeit alleine nur das Researching!
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#14
  Alt 25. Aug 2007, 21:18
Update auf Version 1.0.1.

@hathor, dein Problem ist nun weg. Du wolltest die Unit als nonVCL nutzen, da hatte ich eine Compilerdirektive falsch

Zitat von Mackhack:
War sicherlich ne Menge Arbeit alleine nur das Researching!
Das war es
André
  Mit Zitat antworten Zitat
taktaky
 
#15
  Alt 28. Aug 2007, 09:55
Hallo MagicAndre1981

ich habe immer noch nicht geschafft ! Ich verwende Delphi 7
was soll ich tun um ein Demo zu erstellen? Ich meine Schritt für Schritt
ich habe die Datei downloadet, drin dteht nur .pas und Komponenten Dateien.
http://www.members.lycos.co.uk/forfo...ndows-info.jpg

Kannst Du ein Demo erstellen? (als exe mit Delphi-Project (.dpr) )
icg möchte keine neue Thema erstellen, da Du hier gut beschrieben hast, aber für mich ist immer noch nicht ganz klar.

Vielen Dank!

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#16
  Alt 28. Aug 2007, 10:09
mir stellt sich eigentlich auch die Frage warum eine Klasse und nicht einfach eine Funktion?
Denn so muss man erst die Klasser erzeugen, dann die einzelnen Funktionen aufrufen (IsMediaCenterEdition etc.) und dann die Objectinstanz wieder freigeben.
Sinnvoller wäre doch eine Funktion welche einen Record füllt (oder zurück gibt) wo man dann im Record einfach die Bools ausliest. Zudem fände ich ein Enum/SetOf schöner als mehrere Funktionen. (lässt sich schöner prüfen)
Jens
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#17
  Alt 28. Aug 2007, 12:33
Ich finde Klassen schöner. So ein rumgefummel mit Records ist ist doch bäh

@taktaky

du packst in die Uses WindowsVersionInfo rein und erzeugst dir mit wvi := TWindowsVersionInfo.Create eine Instanz und dann kannst du die Werte abfragen.
André
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH
 
#18
  Alt 28. Aug 2007, 13:11
aber nicht vergessen dieses erzeugte Objekt wieder freizugeben und nicht vergessen das alles in ein try finally Block zu kapseln damit bei einer Exception dieses Objekt wieder korrekt freigegeben wird.

Naja, warum umständlich wenn's mit einem Record diesen zusätzlichen Aufwand nicht gäbe.

Den Einwand halte ich für korrekt. Auch den Einwand Mengen zu benutzen, so könnte man mit einer einzigsten Abfrage alles wichtige erfragen. Klar, mit der jetzigen Methode fragt man eben mehrere Methoden und Properies als UND Abfrage ab, das sieht ja viel besser aus.

Ich könnte sogar den Einwand nachvollziehen warum man das nicht gleich als globale Variable einmalig beim Programstart initialisert, und gut ist. Klar, sieht immer schöner aus wenn man 100 mal die Version abfragt und das Program dem Hacker jedesmal 1000'ende Abfragen an das System vor die Nase klatscht.

Über Geschmack lässt sich streiten wer Objekte schöner findet statt nach der Funktionalität zu schauen ?!
Wusstest du das Objekte im Grunde nur bessere Records sind ? Wer bäh zu Records sagt muss das dann zwangsläufig auch zu Objekten sagen. Das ist OOP ohne nach deren Wurzeln zu fragen.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

 
Delphi 7 Enterprise
 
#19
  Alt 28. Aug 2007, 15:11
Zitat von negaH:
aber nicht vergessen dieses erzeugte Objekt wieder freizugeben und nicht vergessen das alles in ein try finally Block zu kapseln damit bei einer Exception dieses Objekt wieder korrekt freigegeben wird.
und wo ist das Problem?

Zitat von negaH:
Über Geschmack lässt sich streiten
deshalb ist hier jetzt Schluss. Wer keine Klasse will soll sie nicht nutzen!!
André
  Mit Zitat antworten Zitat
Ruediger D
 
#20
  Alt 4. Apr 2008, 12:04
Hallo,

[quote="MagicAndre1981"]
Zitat von negaH:
aber nicht vergessen dieses erzeugte Objekt wieder freizugeben und nicht vergessen das alles in ein try finally Block zu kapseln damit bei einer Exception dieses Objekt wieder korrekt freigegeben wird.
Das erübrigt sich doch sowieso, wenn ich die Komponente schlicht "aufs Formular klatsche", oder? Weil, explizit erzeuge ich dann doch nichts?

Viele Grüße
Ruediger
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 00:50 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