![]() |
AW: Win & Dos Versions Nummern abfragen.
Zitat:
Nicht jeder Typ oder jede Konstante ist haargenau im MSDN inkl. Wert / kompletter Definition genannt, aber im SDK ist alles drin. |
AW: Win & Dos Versions Nummern abfragen.
Ja Danke nochmals dafür, ich habe wirklich nicht im Vorfeld nochmal kontrolliert ob es, seitdem ich den Code nutze, Neuerrungen dazu gemacht wurden. Unter Windows 7 funktionierte es, Windows 10 zeigt verschiedenes an. Das es an Windows selbst lag hätte ich nicht für möglich gehalten, ich dachte es sei der Umstieg auf Tokyo.
|
AW: Win & Dos Versions Nummern abfragen.
Zitat:
![]() 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:
In einem Demo Projekt mit gleichem Code nur auf eine Datei im selben Verzeichniss angewendet klappt alles,
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; wenn ich nun die .exe zur kernel32.dll hinkopiere bleibt der Fehler bestehen. |
AW: Win & Dos Versions Nummern abfragen.
Zitat:
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; |
AW: Win & Dos Versions Nummern abfragen.
Vielen Dank! Klappt auf Anhieb Perfekt!
Ich weiß nun auch woran es lag das GetVersionInfo seinen Dienst verweigerte, mein Programm benötigt Admin-Rechte die es nicht hat. :wall: |
AW: Win & Dos Versions Nummern abfragen.
|
AW: Win & Dos Versions Nummern abfragen.
Wenn Windows 10 für das Programm den Kompatibilitätsmodus für XP aktiviert, dann liefert TOSVersion doch bestimmt XP als Version?
Aber ich verstehe nicht wieso das nun falsch sein soll, wenn die APIs/Rechte, welche das Programm nutzt, auch auf XP-Niveau eingestellt sind. :stupid: |
AW: Win & Dos Versions Nummern abfragen.
Zitat:
|
AW: Win & Dos Versions Nummern abfragen.
Danke auch dafür, aber eine komplette Klasse zu nutzen nur um ein "10.0" zu bekommen ist zu viel des guten, oder?
Ich bin dem Beispiel von Frickler gefolgt, habe es für mich etwas abgespeckt, und es sieht nun so aus:
Code:
Klein, schnell und funktionell.
//...
type _OSVERSIONINFOW = record dwOSVersionInfoSize: ULONG; dwMajorVersion: ULONG; dwMinorVersion: ULONG; dwBuildNumber: ULONG; dwPlatformId: ULONG; szCSDVersion: array [0..127] of WCHAR; end; OSVERSIONINFOW = _OSVERSIONINFOW; PRTL_OSVERSIONINFOW = ^OSVERSIONINFOW; //... function RtlGetVersion(lpVersionInformation: PRTL_OSVERSIONINFOW): NTSTATUS; StdCall; //... function RtlGetVersion; External NTDLL Name 'RtlGetVersion'; |
AW: Win & Dos Versions Nummern abfragen.
Ich meine, dass wenn du keine Manifest-Datei verwendest, dein Programm sowieso nur im Kompatibilitätsmodus läuft.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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