![]() |
[Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung
Liste der Anhänge anzeigen (Anzahl: 3)
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:
Changelog zur Version 1.0.1:
* 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
Code:
Changelog zur Version 1.0:
- 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
Code:
Unterstütze Versionen:
Fix: Units lies sich nicht als nonVCL kompilieren
+ Longhorn M6 4039 Erkennung hinzugefügt
Quellen:
Bugs:
Code:
Aufbau:
#1: Unit lässt sich als non VCL nicht kompilieren. beseitigt in Version 1.0.1
Hier gibts eine Liste der Öffentlichen Funktionen Properties.
Delphi-Quellcode:
Nach dem Erzeugen einer Instanz könnt ihr die verschiendensten Werte abfragen :
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;
Delphi-Quellcode:
und ihr könnt auf spezielle Windowsversionsgruppen abfragen, die als Enum vorliegen:
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 );
Delphi-Quellcode:
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.WindowsVersion = wvWinVista then
Delphi-Quellcode:
Die weiteren Werte sind in der Unit zu finden.
if wvi.WindowsEdition = weVistaUltimate then // Test auf WIndows Vista Ultimate
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. |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
:hello: Super!
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Liest sich prima, mal schauen, ob das unter D7 auch funzt :thumb:
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
ich hatte es unter D7 getestet. Bei früheren Versionen muss ich passen, da ich keine solche Version besitze.
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Muss das denn eine Kompnente sein? Reicht nicht auche ine einfache Unit?
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Kommentiere das {USE_VCL} aus und du hast eine normale Klasse ohne VCL ;)
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Ah, prima. Unter was für einer Lizenz steht denn eigentlich der Code?
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Zitat:
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Zitat:
Zitat:
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Was bedeuten denn die Versionen N, K und KN?
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
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??? |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Zitat:
@hathor mon, muss ich mal kucken. |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Danke Andre fuer die Infos!
Gute arbeit will ich nochmals betonen. War sicherlich ne Menge Arbeit alleine nur das Researching! |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
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 :oops: Zitat:
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
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. ![]() 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ß |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
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) |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Ich finde Klassen schöner. So ein rumgefummel mit Records ist ist doch bäh :wall:
@taktaky du packst in die
Delphi-Quellcode:
rein und erzeugst dir mit
Uses WindowsVersionInfo
Delphi-Quellcode:
eine Instanz und dann kannst du die Werte abfragen.
wvi := TWindowsVersionInfo.Create
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
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 |
Re: [Kompo] TWIndowsVersionsInfo -Kompo zur Windowserkennung
Zitat:
Zitat:
|
Re: [Kompo] TWIndowsVersionsInfo -Kompo zur Windowserkennung
Hallo,
[quote="MagicAndre1981"] Zitat:
Viele Grüße Ruediger |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Wenn Du die Kompo "aufs Formular klatschst", musst Du Dich um die Freigabe nicht kümmern.
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Erzeugt wird natürlich schon was, aber das Formular begeht dann einen 2erweiterten sebstmord" und bringt seine "Kinder" gleich mit um.
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
...das muss reichen ;-)
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Moin,
ich muss dir hiermit gleichmal ein ganz großes Lob aussprechen. Ich benutze das ganze als nicht-Kompo (für die aktion habe ich kein Formular) und muss sagen, dass ich voll und ganz zufrieden bin. MfG Regan |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Funktioniert mit folgenden Änderungen auch mit Delphi 5:
Delphi-Quellcode:
package WindowsVersionInfoPackage;
{$R *.RES} {$R 'WindowsVersionInfo.dcr'} {$ALIGN ON} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO OFF} {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} {$LOCALSYMBOLS OFF} {$LONGSTRINGS ON} {$OPENSTRINGS ON} {$OPTIMIZATION ON} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$REFERENCEINFO OFF} {$SAFEDIVIDE OFF} {$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} {$DESCRIPTION 'WindowsVersionsInfo'} {$IMPLICITBUILD ON} {$DEFINE RELEASE} requires Vcl50; contains Windows_Fragment, cruStrSplitter, WindowsVersionInfo in 'WindowsVersionInfo.pas'; end. |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
danke für den Hinweis :thumb:
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Andre,
ist deine Kompo eigentlich geupdated seit Vista und XP SP3 rauskam? |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
brauch ich nicht. An der Art der Erkennung hat sich ja nix geändert. In den ServicePack Properties stehen halt nun die richtigen Werte drin.
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
tolle arbeit hasst du da gemacht ! :thumb: danke :)
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Hallo Andre,
auch von mir ein Dankeschön für die Komponente, die ich gerne einsetze. Für mich als Hobbyprogrammierer ist sie sehr nützlich. Ob Records oder Objekte besser sind kann ich nicht beurteilen, aber die Komponente funktioniert für meine Zwecke sehr gut. Gruß, Thimo |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
ich bin grad dabei die Kompo Delphi 2009 fit zu machen. Könntet ihr mit die D6, D2005, 2006 und D2007 Package-Dateien hochladen? Dann gibts am WE das Update.
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Moin,
bei Delphi 2009 werden zwei Dinge angemeckert:
Delphi-Quellcode:
Gruss
if (lstrcmpi(osvi.szCSDVersion,'Service Pack 2') = 0) then
(lstrcmpi(osvi.szCSDVersion,'Service Pack 6') = 0) then Inkompatible Typen: Array und PWideChar. EL |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Bist heute auf Delphi 2009 - Komponentencheck? *g*
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Zitat:
Ich habe gestern das RAD 2009 ENT installiert und installiere nach und nach die Komponenten und gerate von einem Anfall in den nächsten. Gruss EL |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Zitat:
Gruss EL |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Salvete Leute
hat jemand dafür noch ein Lösung? (dann bin ich mit meinen Komponenten soweit durch)
Delphi-Quellcode:
Gruss
if (lstrcmpi(osvi.szCSDVersion,'Service Pack 2') = 0) then
(lstrcmpi(osvi.szCSDVersion,'Service Pack 6') = 0) then Inkompatible Typen: Array und PWideChar. EL |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Hallo zusammen,
hmm,ich mach mir schon Gedanken dass ich offensichtlich der einzige bin der nicht weiß wie man das Ganze implementieren muss und vor allem dann aufrufen kann... Ich habe das Package installiert. Ich habe die Komponente in der Toolpalette gefunden (unter "System" -> TWindowsVersionInfo) Diese Komponente habe ich mir auf die Form "geklatscht". Bis hier also alles i.O. Was ist aber wvi
Delphi-Quellcode:
und was bedeutet
wvi := TWindowsVersionInfo.Create(self);
"Nach dem Erzeugen einer Instanz"... Ich weiß mir fehlt hier (leider) Grundwissen, wäre nett wenn mir jemand erklären könnte wie ich das Ganze in meiner eigenen Unit "aufrufen" kann. Danke schon mal im Voraus! |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
Im ersten Posting ist doch ein ausführliches Beispiel dabei:
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 ); |
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
sorry, gibt bald ein Update. Code geht alles schon in Delphi 2009 (war eh alles schon drin, musste nur per Compilerswitch richtig compiliert werden). Hab noch ein Propertie isBeta und den Codenamen eingefügt. Dann unterstütze ich nun alle Windows Server 2008 Versionen (Hyper-V, HPC, SBS und EBS) und Windows 7.
|
Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
@Luckie,
das Beispiel habe ich gesehen, aber ich scheitere vorher. ...wvi.. Ist das eine Variable? Als was für ein Datentyp muss diese Variable denn deklariert werden? Ist es dann eine globale Variable oder eine innerhalb einer Procedur zu deklarierende Variable? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 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