auslesen der windowsversion
hi
ich muss in einem programm die version der windowsversion auslesesn können es gibt da in delphi ja sonne konstante, aber laut der hilfe funzt die nur für 95-2000 ich müsste aber auch xp und so bestimmen können steht da in den registrys nix drin? |
Re: auslesen der windowsversion
Hallo glkbkk,
so kannst du prüfen ob das BS Windows XP ist.
Delphi-Quellcode:
Tschüß Markus
var Version:TOSVersionInfo;
begin Version.dwOSVersionInfoSize:=SizeOf(OSVersionInfo); GetVersionEx(Version); if Version.dwPlatformId=VER_PLATFORM_WIN32_NT then if ((Version.dwMajorVersion=5)and(Version.dwMinorVersion>=1)) then ShowMessage('Windows XP'); |
Re: auslesen der windowsversion
hi,
oder du schaust in der Registry unter: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion bzw. bei NT-Systemen wie XP unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion phoenix |
Re: auslesen der windowsversion
Es gibt sogar eine API-Funktion dafür. Das wäre der beste Weg.
Steht sogar in der Codelibrary: Version. |
Re: auslesen der windowsversion
Copy 'n Paste :wink:
Delphi-Quellcode:
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF Defined(TOSVersionInfoEx)} {$DEFINE TOSVERSIONINFOEX_DEFINED} {$IFEND} {$ENDIF} {$IFNDEF TOSVERSIONINFOEX_DEFINED} type POSVersionInfoEx = ^TOSVersionInfoEx; TOSVersionInfoEx = packed record dwOSVersionInfoSize: DWORD; dwMajorVersion : DWORD; dwMinorVersion : DWORD; dwBuildNumber : DWORD; dwPlatformId : DWORD; szCSDVersion : array [0..127] of AnsiChar; wServicePackMajor : Word; wServicePackMinor : Word; wSuiteMask : Word; wProductType : Byte; wReserved : Byte; end; const VER_SERVER_NT = $80000000; {$EXTERNALSYM VER_SERVER_NT} VER_WORKSTATION_NT = $40000000; {$EXTERNALSYM VER_WORKSTATION_NT} VER_SUITE_SMALLBUSINESS = $00000001; {$EXTERNALSYM VER_SUITE_SMALLBUSINESS} VER_SUITE_ENTERPRISE = $00000002; {$EXTERNALSYM VER_SUITE_ENTERPRISE} VER_SUITE_BACKOFFICE = $00000004; {$EXTERNALSYM VER_SUITE_BACKOFFICE} VER_SUITE_COMMUNICATIONS = $00000008; {$EXTERNALSYM VER_SUITE_COMMUNICATIONS} VER_SUITE_TERMINAL = $00000010; {$EXTERNALSYM VER_SUITE_TERMINAL} VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020; {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED} VER_SUITE_EMBEDDEDNT = $00000040; {$EXTERNALSYM VER_SUITE_EMBEDDEDNT} VER_SUITE_DATACENTER = $00000080; {$EXTERNALSYM VER_SUITE_DATACENTER} VER_SUITE_SINGLEUSERTS = $00000100; {$EXTERNALSYM VER_SUITE_SINGLEUSERTS} VER_SUITE_PERSONAL = $00000200; {$EXTERNALSYM VER_SUITE_PERSONAL} VER_SUITE_BLADE = $00000400; {$EXTERNALSYM VER_SUITE_BLADE} VER_SUITE_EMBEDDED_RESTRICTED = $00000800; {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED} VER_SUITE_SECURITY_APPLIANCE = $00001000; {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE} const VER_NT_WORKSTATION = $0000001; {$EXTERNALSYM VER_NT_WORKSTATION} VER_NT_DOMAIN_CONTROLLER = $0000002; {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER} VER_NT_SERVER = $0000003; {$EXTERNALSYM VER_NT_SERVER} {$ENDIF} // TOSVERSIONINFOEX_DEFINED function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean; begin FillChar(Info, SizeOf(TOSVersionInfoEx), 0); Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx); Result := GetVersionEx(TOSVersionInfo(Addr(Info)^)); if (not Result) then begin FillChar(Info, SizeOf(TOSVersionInfoEx), 0); Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx); Result := GetVersionEx(TOSVersionInfo(Addr(Info)^)); if (not Result) then Info.dwOSVersionInfoSize := 0; end; end; function GetOSVersionText: string; var Info: TOSVersionInfoEx; Key: HKEY; begin Result := ''; if (not GetOSVersionInfo(Info)) then Exit; case Info.dwPlatformId of { Win32s } VER_PLATFORM_WIN32s: Result := 'Microsoft Win32s'; { Windows 9x } VER_PLATFORM_WIN32_WINDOWS: if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 0) then begin Result := 'Microsoft Windows 95'; if (Info.szCSDVersion[1] in ['B', 'C']) then Result := Result +' OSR2'; end else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 10) then begin Result := 'Microsoft Windows 98'; if (Info.szCSDVersion[1] = 'A') then Result := Result + ' SE'; end else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 90) then Result := 'Microsoft Windows Millennium Edition'; { Windows NT } VER_PLATFORM_WIN32_NT: begin { Version } if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then Result := 'Microsoft Windows Server 2003' else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1) then Result := 'Microsoft Windows XP' else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then Result := 'Microsoft Windows 2000' else Result := 'Microsoft Windows NT'; { Extended } if (Info.dwOSVersionInfoSize >= SizeOf(TOSVersionInfoEx)) then begin { ProductType } if (Info.wProductType = VER_NT_WORKSTATION) then begin if (Info.dwMajorVersion = 4) then Result := Result + #10'Workstation 4.0' else if(Info.wSuiteMask and VER_SUITE_PERSONAL <> 0) then Result := Result + #10'Home Edition' else Result := Result + #10'Professional'; end else if (Info.wProductType = VER_NT_SERVER) then begin if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then begin if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then Result := Result + #10'Datacenter Edition' else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then Result := Result + #10'Enterprise Edition' else if (Info.wSuiteMask = VER_SUITE_BLADE) then Result := Result + #10'Web Edition' else Result := Result + #10'Standard Edition'; end else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0) then begin if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then Result := Result + #10'Datacenter Server' else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then Result := Result + #10'Advanced Server' else Result := Result + #10'Server'; end else begin Result := Result + #10'Server ' + IntToStr(Info.dwMajorVersion) + '.' + IntToStr(Info.dwMinorVersion); if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then Result := Result + ', Enterprise Edition'; end; end; end; { CSDVersion } if (Info.dwMajorVersion = 4) and (StrIComp(Info.szCSDVersion, 'Service Pack 6') = 0) and (RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009', 0, KEY_QUERY_VALUE, Key) = ERROR_SUCCESS) then begin Result := Result + #10'Service Pack 6a'; RegCloseKey(Key); end else Result := Result + #10 + StrPas(Info.szCSDVersion); Result := Result + #10'(Build ' + IntToStr(Info.dwBuildNumber and $FFFF) + ')'; end; end; end; //////////////////////////////////////////////////////////////////////////////// procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(StringReplace(GetOSVersionText, #10, ' ', [rfReplaceAll])); end; |
Re: auslesen der windowsversion
Zitat:
|
Re: auslesen der windowsversion
Zitat:
Warum hat sich noch keiner über
Delphi-Quellcode:
beschwert?
if(osvi.szCSDVersion[0] = 'C') or
(osvi.szCSDVersion[0] = 'B') then Result := Result + 'OSR2 '; (der szCSDVersion ist in dem Falle ' A ', ' B ', ... - man achte auf die Leerzeichen :)) [edit] Und eigentlich müsste es bei mir statt
Delphi-Quellcode:
eiegntlich
if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 0) then
begin
Delphi-Quellcode:
heissen, da bei OSR2.1 und OSR2.5 die dwMinorVersion <> 0 ist...
if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion < 10) then
begin |
Re: auslesen der windowsversion
Hallo Nico,
könntest du mal die {$IFDEF}'s erklären, was das soll und warum die erste Funktion:
Delphi-Quellcode:
function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean;
|
Re: auslesen der windowsversion
Etwas kürzer:
---------------- DLL deklarieren:
Delphi-Quellcode:
{$IFDEF WIN32}
function GetVersionEx(lpOs : pointer) : BOOL; stdcall; external 'kernel32' name 'GetVersionExA'; {$ENDIF} Procedure:
Delphi-Quellcode:
Aufrufen:
procedure GetWindowsVersion(var Major : integer;
var Minor : integer); var {$IFDEF WIN32} lpOS, lpOS2 : POsVersionInfo; {$ELSE} l : longint; {$ENDIF} begin {$IFDEF WIN32} GetMem(lpOS, SizeOf(TOsVersionInfo)); lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo); while getVersionEx(lpOS) = false do begin GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1); lpOs2^.dwOSVersionInfoSize:= lpOs^.dwOSVersionInfoSize+1; FreeMem(lpOs, lpOs^.dwOSVersionInfoSize); lpOS := lpOs2; end; Major := lpOs^.dwMajorVersion; Minor := lpOs^.dwMinorVersion; FreeMem(lpOs, lpOs^.dwOSVersionInfoSize); {$ELSE} l := GetVersion; Major := LoByte(LoWord(l)); Minor := HiByte(LoWord(l)); {$ENDIF} end;
Delphi-Quellcode:
Greetz
procedure TForm1.Button1Click(Sender: TObject);
var Major : integer; Minor : integer; begin GetWindowsVersion(Major, Minor); Label1.Caption:=(IntToStr(Major)); Label2.Caption:=(IntToStr(Minor)); end; |
Re: auslesen der windowsversion
Sagt mal liegt es daran, dass ich nuicht zu Hause bin oder dass es so früh am Morgen ist? warum kapier ich heute nicht, was ihr da codet? Bei Nico wundert es mich eigentlich nicht aber bei dir, onlinehome, sthehen mir irgendwie die haare zu Berge.
Warum das:
Delphi-Quellcode:
Wenn du es eh nirgens benutzt?
{$IFDEF WIN32}
function GetVersionEx(lpOs : pointer) : BOOL; stdcall; external 'kernel32' name 'GetVersionExA'; {$ENDIF} Und das:
Delphi-Quellcode:
Sieht für mich einfach nur grausam aus. Du holst dir so lange Speicher bis es klappt? Das kann doch nicht war sein.
while getVersionEx(lpOS) = false do begin
GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1); lpOs2^.dwOSVersionInfoSize:= lpOs^.dwOSVersionInfoSize+1; FreeMem(lpOs, lpOs^.dwOSVersionInfoSize); lpOS := lpOs2; end; Alles in allem mag deine ja kürzer sein, aber erstens bekommst du so nicht die Version im Klartext und irgend was sagt mir, dass da was ganz fürchterliches im Code passiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr. |
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