|
Antwort |
Registriert seit: 29. Sep 2003 205 Beiträge Delphi XE Enterprise |
#1
Es gibt zwar schon etliche Beiträge zu diesem Thema, aber die geben immer nur ein String zurück z.B.: http://www.delphipraxis.net/6717-win...ermitteln.html
Um einfach mal zu Prüfen welche Version installiert ist müsste man den String vergleichen, unschön. Daher hab ich mal die oben beschriebene Version angepasst. Die Ausgabe ist zwar nicht ganz MS konform (RWinVersion), aber so ist eine schnelle und verständliche Abfrage möglich. Hier z.B. die Abfrage nach Windows 7
Delphi-Quellcode:
Hier der Code:
if (GetWinVersion.PlatformID = 2) and (GetWinVersion.Major = 6) and (GetWinVersion.Minor = 2) then
...
Code:
leider muß ich den Code Tag nehmen, da der Delphi-Quellcode Tag die Leerzeichen in den Kommentaren zusammenschrumft
interface
const {$EXTERNALSYM VERSIONINFOSIZEA} VERSIONINFOSIZEA = sizeof(TOSVersionInfoA) - (sizeof(word) * 3) - (sizeof(byte) * 2); {$EXTERNALSYM VERSIONINFOSIZEW} VERSIONINFOSIZEW = sizeof(TOSVersionInfoW) - (sizeof(word) * 3) - (sizeof(byte) * 2); {$EXTERNALSYM VERSIONINFOSIZE} VERSIONINFOSIZE = VERSIONINFOSIZEA; VER_NT_WORKSTATION = $0000001; VER_NT_DOMAIN_CONTROLLER = $0000002; VER_NT_SERVER = $0000003; SM_SERVERR2 = 89; // Windows Server 2003 R2 PROCESSOR_ARCHITECTURE_INTEL = 0; PROCESSOR_ARCHITECTURE_MIPS = 1; PROCESSOR_ARCHITECTURE_ALPHA = 2; PROCESSOR_ARCHITECTURE_PPC = 3; PROCESSOR_ARCHITECTURE_SHX = 4; PROCESSOR_ARCHITECTURE_ARM = 5; PROCESSOR_ARCHITECTURE_IA64 = 6; PROCESSOR_ARCHITECTURE_ALPHA64 = 7; PROCESSOR_ARCHITECTURE_MSIL = 8; PROCESSOR_ARCHITECTURE_AMD64 = 9; PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10; type POSVersionInfoA = ^TOSVersionInfoA; POSVersionInfoW = ^TOSVersionInfoW; POSVersionInfo = POSVersionInfoA; _OSVERSIONINFOA = record dwOSVersionInfoSize: DWORD; dwMajorVersion: DWORD; dwMinorVersion: DWORD; dwBuildNumber: DWORD; dwPlatformId: DWORD; szCSDVersion: array[0..127] of AnsiChar; { Maintenance string for PSS usage } wServicePackMajor, wServicePackMinor, wSuiteMask : word; wProductType, wReserved : byte; end; {$EXTERNALSYM _OSVERSIONINFOA} _OSVERSIONINFOW = record dwOSVersionInfoSize: DWORD; dwMajorVersion: DWORD; dwMinorVersion: DWORD; dwBuildNumber: DWORD; dwPlatformId: DWORD; szCSDVersion: array[0..127] of WideChar; { Maintenance string for PSS usage } wServicePackMajor, wServicePackMinor, wSuiteMask : word; wProductType, wReserved : byte; end; {$EXTERNALSYM _OSVERSIONINFOW} _OSVERSIONINFO = _OSVERSIONINFOA; TOSVersionInfoA = _OSVERSIONINFOA; TOSVersionInfoW = _OSVERSIONINFOW; TOSVersionInfo = TOSVersionInfoA; OSVERSIONINFOA = _OSVERSIONINFOA; {$EXTERNALSYM OSVERSIONINFOA} {$EXTERNALSYM OSVERSIONINFO} OSVERSIONINFOW = _OSVERSIONINFOW; {$EXTERNALSYM OSVERSIONINFOW} {$EXTERNALSYM OSVERSIONINFO} OSVERSIONINFO = OSVERSIONINFOA; RWinVersion = record PlatformID : integer; // VER_PLATFORM_WIN32s = 0; // VER_PLATFORM_WIN32_WINDOWS = 1; // VER_PLATFORM_WIN32_NT = 2; // VER_PLATFORM_WIN32_CE = 3; Major : integer; Minor : integer; Typ : integer; // PlatformID = 1 // Major = 4 // Minor = 0 95 // Minor = 1 95 B // Minor = 2 95 C // Minor = 3 98 // Minor = 4 98 SE // Minor = 5 ME // PlatformID = 2 // Major = 3 // Minor = 0 NT 3.5 // Major = 4 // Minor = 0 NT 4 // Typ 0 = Workstation, 1 = Server Standard, 2 = Server Enterprise // Major = 5 // Minor = 0 2000 // Typ 0 = , 1 = Data Center, 2 = Advanced // Minor = 1 XP // Typ 0 = Home, 1 = Professional, 2 = Professional x64 // Minor = 2 Server 2003 // Typ 0 = Enterprise, 1 = Data Center, 2 = Web Edition, 3 = Standard // Minor = 3 Home Server // Minor = 4 Server 2003 R2 // Major = 6 // Minor = 0 Vista // Typ 0 = Ultimate Business, 1 = Home Basic/Premium // Minor = 1 Server 2008 // Typ 0 = Standard, 1 = Enterprise, 2 = Data Center, 3 = R2 // Minor = 2 7 end; function GetVersionExA(var lpVersionInformation: TOSVersionInfo): BOOL; stdcall; {$EXTERNALSYM GetVersionExA} function GetVersionExW(var lpVersionInformation: TOSVersionInfo): BOOL; stdcall; {$EXTERNALSYM GetVersionExW} function GetVersionEx(var lpVersionInformation: TOSVersionInfo): BOOL; stdcall; {$EXTERNALSYM GetVersionEx} function GetWinVersion: RWinVersion; implementation function GetWinVersion: RWinVersion; function GetNativeSystemInfoEx : SYSTEM_INFO; var po :TFarProc; DLLWnd :THandle; SI :SYSTEM_INFO; GetNativeSystemInfo:procedure(var LPSYSTEM_INFO:SYSTEM_INFO);stdcall; begin po := nil; DLLWnd := LoadLibrary('kernel32'); if DLLWnd > 0 then begin try po := GetProcAddress(DLLWnd, 'GetNativeSystemInfo'); if po <> nil then begin @GetNativeSystemInfo := po; GetNativeSystemInfo(SI); result := SI; end; finally FreeLibrary(DLLWnd); end; end; end; var osvi : TOSVersionInfo; bOsVersionInfoEx : boolean; si : SYSTEM_INFO; begin Result.PlatformID := -1; Result.Major := -1; Result.Minor := -1; Result.Typ := -1; // Try calling GetVersionEx using the OSVERSIONINFOEX structure. // If that fails, try using the OSVERSIONINFO structure. ZeroMemory(@osvi, sizeof(TOSVersionInfo)); osvi.dwOSVersionInfoSize := sizeof(TOSVersionInfo); bOsVersionInfoEx := GetVersionEx(osvi); if not bOsVersionInfoEx then begin osvi.dwOSVersionInfoSize := VERSIONINFOSIZE; if not GetVersionEx(osvi) then begin Exit; end; end; si := GetNativeSystemInfoEx; Result.PlatformID := osvi.dwPlatformId; case osvi.dwPlatformId of {$REGION 'VER_PLATFORM_WIN32_WINDOWS'} VER_PLATFORM_WIN32_WINDOWS: begin if (osvi.dwMajorVersion = 4) then begin {$REGION 'Windows 95'} if (osvi.dwMinorVersion = 0) then begin Result.Major := 4; case LOWORD(osvi.dwBuildNumber) of 122, 189, 347, 480, 950 : Result.Minor := 0; 999, 1111, 1212, 1213 : Result.Minor := 1; 1214 : Result.Minor := 2; end; end; {$ENDREGION} {$REGION 'Windows 98'} if (osvi.dwMinorVersion = 10) then begin if(osvi.szCSDVersion[0] = 'A') then Result.Minor := 3 else Result.Minor := 4; end; {$ENDREGION} {$REGION 'Windows ME'} if (osvi.dwMinorVersion = 90) then begin Result.Minor := 5; end; {$ENDREGION} end; end; {$ENDREGION} {$REGION 'VER_PLATFORM_WIN32_NT'} VER_PLATFORM_WIN32_NT : begin case osvi.dwMajorVersion of {$REGION 'NT 3.5'} 3 : begin Result.Major := 3; Result.Minor := 0; end; {$ENDREGION} {$REGION 'NT 4'} 4 : begin Result.Major := 4; Result.Minor := 0; case osvi.wProductType of 1 : Result.Typ := 0; // Workstation 3 : begin case osvi.wSuiteMask of 0 : Result.Typ := 1; // Server Standard 2 : Result.Typ := 2; // Server Enterprise end; end; end; end; {$ENDREGION} {$REGION '2000-Server 2003 R2'} 5 : begin Result.Major := 5; case osvi.dwMinorVersion of {$REGION '2000'} 0 : begin Result.Minor := 0; Result.Typ := 0; if osvi.wSuiteMask = 80 then Result.Typ := 1; if osvi.wProductType = 2 then Result.Typ := 2; end; {$ENDREGION} {$REGION 'XP'} 1 : begin Result.Minor := 1; Result.Typ := 0; if (osvi.wSuiteMask and 200 = 0) then Result.Typ := 1; end; {$ENDREGION} {$REGION 'XP x64, Server 2003, Home Server, Server 2003 R2'} 2 : begin {$REGION 'XP x64'} if (osvi.wProductType = VER_NT_WORKSTATION) and (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) then begin Result.Minor := 1; Result.Typ := 2; end {$ENDREGION} else begin {$REGION 'Server 2003 R2'} if GetSystemMetrics(SM_SERVERR2) <> 0 then begin Result.Minor := 4; end {$ENDREGION} else begin case osvi.wSuiteMask of {$REGION 'Server 2003'} 0 : begin // Standard Result.Minor := 2; Result.Typ := 3; end; 2 : begin // Enterprise Result.Minor := 2; Result.Typ := 0; end; 80 : begin // Data Center Result.Minor := 2; Result.Typ := 1; end; 400 : begin // Web Edition Result.Minor := 2; Result.Typ := 2; end; {$ENDREGION} {$REGION 'Home Server'} 8000 : begin Result.Minor := 3; end; {$ENDREGION} end; end; end; end; {$ENDREGION} end; end; {$ENDREGION} {$REGION 'Vista-7'} 6 : begin Result.Major := 6; case osvi.dwMinorVersion of {$REGION 'Vista, Server 2008'} 0 : begin case osvi.wProductType of {$REGION 'Vista'} 1 : begin Result.Minor := 0; if osvi.wSuiteMask = 0 then // Ultimate Business Result.Typ := 0; if osvi.wSuiteMask = 200 then // Home Basic/Premium Result.Typ := 1; end; {$ENDREGION} {$REGION 'Server 2008'} 3 : begin Result.Minor := 1; if osvi.wSuiteMask = 0 then // Standard Result.Typ := 0; if osvi.wSuiteMask = 2 then // Enterprise Result.Typ := 1; if osvi.wSuiteMask = 80 then // Data Center Result.Typ := 1; end; {$ENDREGION} end; end; {$ENDREGION} {$REGION 'Server 2008 R2, 7'} 1 : begin case osvi.wProductType of {$REGION 'Server 2008 R2'} 3 : begin Result.Minor := 1; Result.Typ := 3; end; {$ENDREGION} {$REGION '7'} 1 : begin Result.Minor := 2; end; {$ENDREGION} end; end; {$ENDREGION} end; end; {$ENDREGION} end; end; {$ENDREGION} end; end; function GetVersionExA; external kernel32 name 'GetVersionExA'; function GetVersionExW; external kernel32 name 'GetVersionExW'; function GetVersionEx; external kernel32 name 'GetVersionExA'; |
Zitat |
Registriert seit: 26. Mai 2004 3.159 Beiträge |
#2
Habe neulich in der SysUtils folgende Variablen gefunden:
Delphi-Quellcode:
Ebenso diese Funktionen:
// Zeile 559 ff.
Win32Platform: Integer = 0; Win32MajorVersion: Integer = 0; Win32MinorVersion: Integer = 0; Win32BuildNumber: Integer = 0;
Delphi-Quellcode:
Ab Delphi 2010 gibts die garantiert. Ein älteres Delphi habe ich leider nicht, kann daher nicht nachschauen.
function CheckWin32Version(AMajor: Integer; AMinor: Integer = 0): Boolean;
function GetFileVersion(const AFileName: string): Cardinal;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
|
Zitat |
Registriert seit: 24. Feb 2007 Ort: Baden 1.566 Beiträge Delphi 2007 Professional |
#3
Hübsch
Schnell mal geschaut, ist schon in der TurboDelphi Version drin (also 2006) €: So wie es aussieht bereit ab Delphi 5. Geändert von Satty67 ( 6. Dez 2010 um 18:53 Uhr) |
Zitat |
Registriert seit: 29. Mai 2002 37.621 Beiträge Delphi 2006 Professional |
#4
Dann doch lieber VerifyVersionInfo. Und hier ein Delphi Beispiel: http://www.michael-puff.de/Artikel/GetVersionEx.shtml
Michael
Ein Teil meines Codes würde euch verunsichern. |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |