AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Win & Dos Versions Nummern abfragen.

Ein Thema von KodeZwerg · begonnen am 13. Mär 2018 · letzter Beitrag vom 15. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Win & Dos Versions Nummern abfragen.

  Alt 13. Mär 2018, 23:42
Hallo, ich bastel gerade an einer About-Box und wollte als mini-Gimmick eine Oldstyle Windows und Dos Versions Angabe integrieren, also nichts Aufregendes wo einem zig Sachen über's OS erzählt wird sondern lediglich 2 Werte, wahrscheinlich in einem LED Look aber das tut hier nichts zur Sache.

Meine Frage relativ simpel,
bisher habe ich habe immer
Code:
Var WinVersion, DosVersion: Word;
    WinStr, DosStr: String;
//...
WinVersion := Windows.GetVersion and $0000FFFF;
WinStr := IntToStr(Lo(WinVersion))+'.'+IntToStr(Hi(WinVersion));
DosVersion := Windows.GetVersion shr 16;
DosStr := IntToStr(Hi(DosVersion))+'.'+IntToStr(Lo(DosVersion));
diesen Code benutzt, sollte ich meinen Code updaten für Delphi (Tokyo) oder ist das alles noch konform?
Gruß vom KodeZwerg

Geändert von KodeZwerg (13. Mär 2018 um 23:50 Uhr)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 05:22
An Delphi wird es nicht scheitern. Lediglich an Deiner wiederholenden Weigerung, mal einen Blick in die Doku zu werfen.
https://msdn.microsoft.com/de-de/lib...sktop/ms724439

Eine „DOS“-Version ergibt schon fachlich keinen Sinn mehr. Und selbst die Versionsnummer von Windows lässt seit Version 8.1 überraschend viel Spielraum für Interpretationen. Dieser Weg ist für eine belastbare Aussage nicht mehr tauglich.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 05:41
Hallo,
für Windows fragt man am besten die Version der Datei kernel32.dll ab
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 08:43
DOS-Version - Gibts seit Windows95 nicht mehr.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
483 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 08:47
Nein ist schon lange nicht mehr konform, hat aber nichts mit Delphi sondern mit der Windows API ab Win8 zu tun. siehe hier

https://msdn.microsoft.com/de-de/library/windows/desktop/ms724834


nutze OSVersionInfo oder OSVersionInfoEx

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 09:29
OSVERSIONINFO, daß ist es was ich nun anwenden werde, scheint mir am besten dafür geeignet zu sein.
Vielen Dank!

Ps: An Daniel, was lässt Dich vermuten das ich Hilfe ablehne wenn ich doch der Fragestellende bin?
Hätte ich mich verweigert Informationen zu lesen wäre ich damals ja nicht auf den GetVersion Befehl und dessen Verarbeitung gestoßen, das es Windows ab 8 oder 8.1 nun anders handhabt ist mir neu, falls Deine Aussage eine Anspielung sein soll das ich mich mal informieren sollte bevor ich hier eine Frage stelle, Ok Sir, wird nun so gemacht Sir.

PPs: Die Dos-Version sollte halt eine Unterhaltsame Einblendung an alte Tage sein, ob fachlich korrekt oder nicht.

PPPs: Zur Aussage ab Win95 kein DOS -> eine andere Sichtweise
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Mär 2018 um 09:47 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.116 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 10:25
DOS-Version - Gibts seit Windows95 nicht mehr.
Du hast „Windows NT“ falsch geschrieben. In Windows Me gab es noch MS-DOS 8.00, startbar war es nur bis 7.10 in Windows 98.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 12:16
DOS-Version - Gibts seit Windows95 nicht mehr.
Du hast „Windows NT“ falsch geschrieben. In Windows Me gab es noch MS-DOS 8.00, startbar war es nur bis 7.10 in Windows 98.
Ok. Win 9x hat noch ein DOS "Im Bauch".
Aber alles unter XP kann man wohl als "Antike OS-Versionen" betrachten und XP als "OldTimer"
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Win & Dos Versions Nummern abfragen.

  Alt 14. Mär 2018, 18:18
für Windows fragt man am besten die Version der Datei kernel32.dll ab
Das habe ich nun auch versucht, mit der GetFileVersionInfo funktion.
Beim Zugriff auf kernel32.dll gibt mir die funktion False zurück, GetLastError deutet auf "Datei nicht gefunden" hin, ich übergebe den kompletten Pfad. Irgendwas mache ich dabei falsch.

So hier in etwa verarbeite ich es: (Code nicht von mir)
Delphi-Quellcode:
function GetVersionInfo(NameApp, VerOpt: String): String;
var
 dump: DWORD;
 size: integer;
 buffer: PChar;
 VersionPointer, TransBuffer: PChar;
 Temp: integer;
 CalcLangCharSet: string;
begin
 size := GetFileVersionInfoSize(PChar(NameApp), dump);
 buffer := StrAlloc(size+1);
  try
   GetFileVersionInfo(PChar(NameApp), 0, size, buffer);
   VerQueryValue(buffer, 'VarFileInfo\Translation', pointer(TransBuffer), dump);
    if dump >= 4 then
     begin
      temp:=0;
      StrLCopy(@temp, TransBuffer, 2);
      CalcLangCharSet := IntToHex(temp, 4);
      StrLCopy(@temp, TransBuffer+2, 2);
      CalcLangCharSet := CalcLangCharSet+IntToHex(temp, 4);
     end;
   VerQueryValue(buffer, pchar('StringFileInfo\' + CalcLangCharSet + '\' + VerOpt), pointer(VersionPointer), dump);
  if (dump > 1) then begin
    SetLength(Result, dump);
    StrLCopy(Pchar(Result), VersionPointer, dump);
   end else Result := '';
 finally
  StrDispose(Buffer);
 end;
end;
In einem Demo Projekt mit gleichem Code nur auf eine Datei im selben Verzeichniss angewendet klappt alles,
wenn ich nun die .exe zur kernel32.dll hinkopiere bleibt der Fehler bestehen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
622 Beiträge
 
Delphi XE6 Enterprise
 
#10

AW: Win & Dos Versions Nummern abfragen.

  Alt 15. Mär 2018, 10:02
Hallo,
für Windows fragt man am besten die Version der Datei kernel32.dll ab
Wenns egal ist, dass der Code nur auf Windows 2000 aufwärts funktioniert, ist die Funktion "RTLGetVersion" das Mittel der Wahl, zumindest für mich. Gibt die richtige Version zurück, auch ohne, dass das Programm ein Manifest haben müsste. Die Funktion ist selbst in Delphi 10.2.3 nicht in der Basisbibliothek enthalten, muss man also selbst einbauen.

Das geht so:

Delphi-Quellcode:
type
  TRTLOSVersioninfoExW = record
    dwOSVersionInfoSize: DWORD;
    dwMajorVersion: DWORD;
    dwMinorVersion: DWORD;
    dwBuildNumber: DWORD;
    dwPlatformId: DWORD;
    szCSDVersion: array[0..127] of WIDECHAR;
    wServicePackMajor: WORD;
    wServicePackMinor: WORD;
    wSuiteMask: WORD;
    wProductType: BYTE;
    wReserved: BYTE;
  end;

function RTLGetVersion(out RtlOsVer: TRTLOSVersioninfoExW): boolean;
var
  po : TFarProc;
  hKernelLib: THandle;
  GetRTLVEX : function(var vex: TRTLOSVersioninfoExW): DWORD; stdcall;
begin
  result := false;
  ZeroMemory(@RtlOsVer, sizeof(RtlOsVer));
  RtlOsVer.dwOSVersionInfoSize := sizeof(TRTLOSVersioninfoExW);
  hKernelLib := LoadLibrary('ntdll');
  if hKernelLib > 0 then
  try
    po := GetProcAddress(hKernelLib, 'RtlGetVersion');
    if po <> nil then begin
      @GetRTLVEX := po;
      GetRTLVEX(RtlOsVer);
      result := true;
    end;
  finally
    FreeLibrary(hKernelLib);
  end
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:36 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