Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung (https://www.delphipraxis.net/97999-%5Bkompo%5D-twindowsversionsinfo-kompo-zur-windowserkennung.html)

DeddyH 4. Jan 2009 16:10

Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
 
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.

emsländer 4. Jan 2009 16:12

Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

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

DeddyH 4. Jan 2009 16:15

Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
 
Richtig, aber das ist auch nicht die Frage gewesen, auf die ich geantwortet habe. Das "Char"-Problem bezieht sich wieder einmal auf ANSI <--> Unicode.

juergen 4. Jan 2009 16:19

Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
 
@DeddyH,
vielen Dank, genau das habe ich gesucht.
Zitat:

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.:oops:

DeddyH 4. Jan 2009 16:26

Re: [Kompo] TWIndowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

Delphi-Quellcode:
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 ;)

MagicAndre1981 4. Jan 2009 22:40

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
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 :thumb:

ringli 14. Jan 2009 05:51

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
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;

DeddyH 14. Jan 2009 10:59

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
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;

pertzschc 25. Feb 2009 18:07

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
Zitat:

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

MagicAndre1981 25. Feb 2009 22:30

Re: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennun
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr.
Seite 5 von 6   « Erste     345 6      

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