![]() |
Falscher Product Type in OSVersionInfoEx
Moin,
ich ermittle wie folgt die Windowsversion
Delphi-Quellcode:
Was ich nicht verstehe: mein Programm läuft auf einem Windows 7 in einer virtuellen Maschine. Nach der Zeile (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 1) hab ich in OSInfo.wProductType ein 0 stehen. Ich würde hier eine 1 (=VER_NT_WORKSTATION) erwarten. Was mache ich falsch?
function GetOSVersionInfoEx : TOSVersionInfoEx;
var OSVersionInfo : TOSVersionInfo absolute Result; Done : Boolean; begin FillChar(Result, SizeOf(Result), #0); Done := False; try Result.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx); Done := GetOSVersionEx(Result); except end; if not(Done) then begin try FillChar(Result, SizeOf(Result), #0); Result.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(OSVersionInfo); except end; end; end; function GetWinVersion : string; var OSInfo : TOSVersionInfoEx; begin Result := 'Unbekannte Windows-Version'; OSInfo := GetOSVersionInfoEx; case OSInfo.dwPlatformId of VER_PLATFORM_WIN32s: begin Result := 'Win32s'; end; VER_PLATFORM_WIN32_WINDOWS: begin if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0) then Result := 'Windows 95'; if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 10) then Result := 'Windows 98'; if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 90) then Result := 'Windows Millennium Edition'; end; VER_PLATFORM_WIN32_NT: begin if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0) then Result := 'Windows NT'; if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 0) then Result := 'Windows 2000'; if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 1) then Result := 'Windows XP'; if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 2) then begin if GetSystemMetrics(SM_SERVERR2) <> 0 then Result := 'Windows Server 2003 "R2"' else if (OSInfo.wProductType = VER_NT_WORKSTATION) then Result := 'Windows XP x64' else if OSInfo.wSuiteMask = VER_SUITE_WH_SERVER then Result := 'Windows Home Server' else Result := 'Windows Server 2003'; end; if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 0) then begin if (OSInfo.wProductType = VER_NT_WORKSTATION) then Result := 'Windows Vista' else Result := 'Windows Server 2008'; end; if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 1) then begin if (OSInfo.wProductType = VER_NT_WORKSTATION) then Result := 'Windows 7' else Result := 'Windows Server 2008 R2'; end; if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 2) then begin if (OSInfo.wProductType = VER_NT_WORKSTATION) then result := 'Windows 8' else result := 'Windows Server 2012'; end; if (OSInfo.wSuiteMask and VER_SUITE_PERSONAL) = VER_SUITE_PERSONAL then Result := Result + ' Home Edition' else Result := Result + ' Professional'; end; end; Result := Trim(Result + ' ' + OSInfo.szCSDVersion); end; Danke! Jens |
AW: Falscher Product Type in OSVersionInfoEx
Hat wahrscheinlich nichts mit deinem Problem zu tun, aber wenn deine Except-Abschnitte leer sind, kannst du gleich das ganze try-expect Konstrukt weglassen. Davon mal abgesehen, dass WinAPI Funktionen keine Delphi Exceptions werfen.
|
AW: Falscher Product Type in OSVersionInfoEx
Zitat:
|
AW: Falscher Product Type in OSVersionInfoEx
Soweit ich es sehe machst du nix falsch. Ich arbeite derzeit auch wiedermal an einer Klasse die wir hier benutzen und zumindest bis Windows 7 (inklusive), mache ich es genauso wie du.
Mir sind aber zwei Details aufgefallen:
Dann noch zwei Fragen:
|
AW: Falscher Product Type in OSVersionInfoEx
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
dieses Thema ist doch schon so alt wie Nachbar's Katze. Warum macht man denn nicht mal was, das jeder einfach verwenden kann, anstatt dass jeder sein eigenes Süppchen kocht? Da ich heute auch mal wieder an dem Thema dran war, hab ich das Beispiel ein bischen angepasst und das Ergebnis mal ran gehängt. Scheint alles zu funktionieren. |
AW: Falscher Product Type in OSVersionInfoEx
Zitat:
Und: Überraschung, Überraschung ... auch deine Unit darf man nicht legal von anderen verwenden, da sie dem deutschen Urheberrecht unterliegt und du keine Lizenzbedingungen (ala MIT, BSD, X11, zlib, GPL) angegeben hast unter denen die Unit verwendet werden darf. Also: selber besser machen :zwinker: ... Zitat:
Delphi-Quellcode:
wäre.
Result := (0 <> GetVersionInfoEx(...));
|
AW: Falscher Product Type in OSVersionInfoEx
Nur kurz, ich werde versuchen heute Abend Deine Fragen zu beantworten. Vorher schaffe ich es leider nicht.
|
AW: Falscher Product Type in OSVersionInfoEx
Zitat:
function GetOSVersionInfo(var OSInfo: TOSVersionInfoEx): boolean; begin FillChar(OSInfo,SizeOf(OSInfo),0); // OSInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx); Result := GetVersionEx(OSInfo); end; und schon ist der Result false. Es klappt also immer noch :) Hab soeben noch den WindowsVersionString erweitert, weil man ja - wenn es beim Kunden klemmt - wissen muss, wo man bei neuen unbekannten Versionen nachbessern/erweitern muss: Zitat:
|
AW: Falscher Product Type in OSVersionInfoEx
Der Result wird durchaus
Delphi-Quellcode:
er wird aber niemals
false
Delphi-Quellcode:
sondern
true
Delphi-Quellcode:
not false
|
AW: Falscher Product Type in OSVersionInfoEx
Zitat:
$100 ist als Byte in der Tat identisch mit $0, weil alles oberhalb von 8bit abgeschnitten wird beim Typecast. Als BOOL (also 32bit-Wert) hingegen nicht. Daß eine 32bittige 0 einer 8bittigen 0 entspricht ist mir auch klar. Das war aber hier nicht die Frage, bzw. das Problem. Ich bin ja hier nicht so modern ausgestattet. Aber Delphi 2009 habe ich auch. Also hab ich es mal getestet. Entwarnung. Delphi hat natürlich mal wieder den Weg des geringsten Widerstands gewählt und offenbar Compiler-Magic dafür engagiert damit Delphianer solche Dummheiten nicht machen. Was vermutlich dann bei allen die korrektes Verhalten erwarten - mal wieder - zu Überraschungen führt. Aber egal, bin ja kaum noch auf Delphi unterwegs. Habe es übrigens hiermit getestet:
Delphi-Quellcode:
Übrigens bist du auf das Lizenzproblem noch nichtmal eingegangen. Danke (oder wegen) Urheberrecht kann sich eben nicht mal jeder deinen Code krallen, es sei denn du machst ihn unter einer entsprechenden Lizenz verfügbar.
program booltest;
{$APPTYPE CONSOLE} uses SysUtils, Windows; function DeinApiAufruf(): LongBool; begin Result := LongBool($100); end; function DeinDelphiWrapper(): Boolean; begin Result := DeinApiAufruf(); end; begin Write('Sagt: '); if DeinDelphiWrapper() then Writeln('True') else Writeln('False'); end. |
AW: Falscher Product Type in OSVersionInfoEx
Zitat:
|
AW: Falscher Product Type in OSVersionInfoEx
Zitat:
Zitat:
Ich finde das Konzept "geistiges Eigentum" schon krank, weil dich dann theoretisch jeder Lehrer und deine Eltern verklagen können müßten - und allgemein jeder bei dem du Erfahrungen jedweder Art sammelst. Aber das ist ein anderes Thema. |
AW: Falscher Product Type in OSVersionInfoEx
In letzter Zeit diskutieren wir hier aber ständig irgendwelche Lizenzfragen...
Zum Thems: Hier mal ein Auszug aus meinem DelphiWorks 1.5 Beta (wobei ich noch nicht dazu gekommen bin, Windows 8 und seine Varianten einzupflegen):
Delphi-Quellcode:
Man findet ja die komplette Aufstellung bis Win 95 zurück nicht mehr im MSDN. Ich habs auch nur über die Jahre immer mitgepflegt, heute nachträglich müsste man schon ganz schön suchen. Die N-Versionen werden ja auch größtenteils totgeschwiegen.
function dwGetOS: TDWOSType;
var OSV: TOSVersionInfoEx; SI: TSystemInfo; begin dwGetWindowsVersionEx(OSV); ZeroMemory(@SI, SizeOf(TSystemInfo)); GetSystemInfo(SI); result:= OS_UNKNOWN; if OSV.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then begin case OSV.dwMinorVersion of 0: case (OSV.dwBuildNumber and $FFFF) of 950: if (UpperCase(OSV.szCSDVersion) = 'A') then result:= OS_WIN95A else result:= OS_WIN95; 1111: result:= OS_WIN95OSR2A; else result:= OS_WIN95; end; // case (OSV.dwBuildNumber and $FFFF) 3: if (UpperCase(OSV.szCSDVersion) = 'B') then result:= OS_WIN95OSR2B else result:= OS_WIN95OSR2C; 10: case (OSV.dwBuildNumber and $FFFF) of 1998: result:= OS_WIN98; 2222: result:= OS_WIN98SE; else result:= OS_WIN98; end; // case (OSV.dwBuildNumber and $FFFF) 90: case (OSV.dwBuildNumber and $FFFF) of 2476: result:= OS_WINMEBETA; 3000: result:= OS_WINME; else result:= OS_WINME; end; // case (OSV.dwBuildNumber and $FFFF) end; // case OSV.dwMinorVersion end // if OSV.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS else if OSV.dwPlatformId = VER_PLATFORM_WIN32_NT then begin case OSV.dwMajorVersion of 3: case OSV.dwMinorVersion of 1: result:= OS_NT31; 5, 50: result:= OS_NT350; else result:= OS_NT351; end; // case OSV.dwMinorVersion 4: case OSV.wProductType of VER_NT_DOMAIN_CONTROLLER: result:= OS_NT4_DOMAINCONTROLLER; VER_NT_SERVER: result:= OS_NT4_SERVER; VER_NT_WORKSTATION: result:= OS_NT4_WORKSTATION; end; // case OSV.wProductType 5: case OSV.dwMinorVersion of 0: if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WIN2000_ADVSERVER; end else if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WIN2000_DATACENTER; end else begin result:= OS_WIN2000; end; 1: if GetSystemMetrics(SM_MEDIACENTER) <> 0 then begin result:= OS_WINXP_MEDIACENTER; end else if GetSystemMetrics(SM_STARTER) <> 0 then begin result:= OS_WINXP_STARTER; end else if GetSystemMetrics(SM_TABLETPC) <> 0 then begin result:= OS_WINXP_TABLET; end else begin if OSV.wSuiteMask and VER_SUITE_PERSONAL > 0 then begin result:= OS_WINXP_HOME; end else if OSV.wSuiteMask and VER_SUITE_ENTERPRISE > 0 then begin result:= OS_DOTNETSERVER; end else if OSV.wSuiteMask and VER_SUITE_EMBEDDEDNT > 0 then begin result:= OS_WINXP_EMBEDDED; end else begin if SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64 then begin result:= OS_WINXP_IA64; end else begin result:= OS_WINXP_PROFESSIONAL; end; end; end; 2: if GetSystemMetrics(SM_SERVERr2) = 0 then begin if (OSV.wProductType = VER_NT_WORKSTATION) and ((SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning) then result:= OS_WINXP_PROFESSIONAL_X64 else // if OSV.wProductType = VER_NT_WORKSTATION if SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64 then begin if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_DATACENTER_ITANIUM; end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_ENTERPRISE_ITANIUM; end; end else if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then begin if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_DATACENTER_X64; end else if (OSV.wSuiteMask and VER_SUITE_COMPUTE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_COMPUTE_CLUSTER_X64; end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_ENTERPRISE_X64; end else if (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS <> 0) and (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS_RESTRICTED <> 0) then begin result:= OS_WINDOWS_SERVER_2003_SMALL_BUSINESS_X64; end else if (OSV.wSuiteMask and VER_SUITE_STORAGE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_STORAGE_SERVER_X64; end else if (OSV.wSuiteMask and VER_SUITE_WH_SERVER) <> 0 then begin result:= OS_WINDOWS_HOME_SERVER_2003_X64; end else begin result:= OS_WINDOWS_SERVER_2003_X64; end; end else begin if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_DATACENTER; end else if (OSV.wSuiteMask and VER_SUITE_COMPUTE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_COMPUTE_CLUSTER; end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_ENTERPRISE; end else if (OSV.wSuiteMask and VER_SUITE_SECURITY_APPLIANCE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_SECAPPL; end else if (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS <> 0) and (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS_RESTRICTED <> 0) then begin result:= OS_WINDOWS_SERVER_2003_SMALL_BUSINESS; end else if (OSV.wSuiteMask and VER_SUITE_STORAGE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_STORAGE_SERVER; end else if (OSV.wSuiteMask and VER_SUITE_BLADE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_WEBEDITION; end else if (OSV.wSuiteMask and VER_SUITE_WH_SERVER) <> 0 then begin result:= OS_WINDOWS_HOME_SERVER_2003; end else begin result:= OS_WINDOWS_SERVER_2003; end; end; end else begin // GetSystemMetrics(SM_SERVERr2) = 0 if SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64 then begin if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_DATACENTER_ITANIUM; end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_ENTERPRISE_ITANIUM; end; end else if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then begin if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_DATACENTER_X64; end else if (OSV.wSuiteMask and VER_SUITE_COMPUTE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_COMPUTE_CLUSTER_X64; end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_ENTERPRISE_X64; end else if (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS <> 0) and (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS_RESTRICTED <> 0) then begin result:= OS_WINDOWS_SERVER_2003_R2_SMALL_BUSINESS_X64; end else if (OSV.wSuiteMask and VER_SUITE_STORAGE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_STORAGE_SERVER_X64; end else if (OSV.wSuiteMask and VER_SUITE_WH_SERVER) <> 0 then begin result:= OS_WINDOWS_HOME_SERVER_2003_R2_X64; end else begin result:= OS_WINDOWS_SERVER_2003_R2_X64; end; end else begin if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_DATACENTER; end else if (OSV.wSuiteMask and VER_SUITE_COMPUTE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_COMPUTE_CLUSTER; end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_ENTERPRISE; end else if (OSV.wSuiteMask and VER_SUITE_SECURITY_APPLIANCE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_SECAPPL; end else if (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS <> 0) and (OSV.wSuiteMask and VER_SUITE_SMALLBUSINESS_RESTRICTED <> 0) then begin result:= OS_WINDOWS_SERVER_2003_R2_SMALL_BUSINESS; end else if (OSV.wSuiteMask and VER_SUITE_STORAGE_SERVER) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_STORAGE_SERVER; end else if (OSV.wSuiteMask and VER_SUITE_BLADE) <> 0 then begin result:= OS_WINDOWS_SERVER_2003_R2_WEBEDITION; end else if (OSV.wSuiteMask and VER_SUITE_WH_SERVER) <> 0 then begin result:= OS_WINDOWS_HOME_SERVER_2003_R2; end else begin result:= OS_WINDOWS_SERVER_2003_R2; end; end; end; // GetSystemMetrics(SM_SERVERr2) = 0 end; // case OSV.dwMinorVersion 6: case OSV.dwMinorVersion of 0: // <-- Vista series case OSV.wProductType of VER_NT_WORKSTATION: case dwiGetProductInfo(OSV) of PRODUCT_UNKNOWN: result:= OS_WINDOWS_VISTA; PRODUCT_STARTER: result:= OS_WINDOWS_VISTA_STARTER; PRODUCT_HOME_BASIC: result:= OS_WINDOWS_VISTA_HOME_BASIC; PRODUCT_HOME_BASIC_N: result:= OS_WINDOWS_VISTA_HOME_BASIC_N; PRODUCT_HOME_PREMIUM: result:= OS_WINDOWS_VISTA_HOME_PREMIUM; PRODUCT_HOME_PREMIUM_N: result:= OS_WINDOWS_VISTA_HOME_PREMIUM_N; PRODUCT_BUSINESS: result:= OS_WINDOWS_VISTA_BUSINESS; PRODUCT_BUSINESS_N: result:= OS_WINDOWS_VISTA_BUSINESS_N; PRODUCT_ENTERPRISE: result:= OS_WINDOWS_VISTA_ENTERPRISE; PRODUCT_ENTERPRISE_N: result:= OS_WINDOWS_VISTA_ENTERPRISE_N; PRODUCT_ULTIMATE: result:= OS_WINDOWS_VISTA_ULTIMATE; PRODUCT_ULTIMATE_N: result:= OS_WINDOWS_VISTA_ULTIMATE_N; end; // case dwiGetProductInfo(OSV) else // case OSV.wProductType case dwiGetProductInfo(OSV) of PRODUCT_UNKNOWN: result:= OS_WINDOWS_SERVER_2008; PRODUCT_SERVER_FOUNDATION: result:= OS_WINDOWS_SERVER_2008_FOUNDATION; PRODUCT_STANDARD_SERVER: result:= OS_WINDOWS_SERVER_2008_STANDARD; PRODUCT_STANDARD_SERVER_CORE: result:= OS_WINDOWS_SERVER_2008_STANDARD_CORE; PRODUCT_STANDARD_SERVER_CORE_V: result:= OS_WINDOWS_SERVER_2008_STANDARD_CORE_V; PRODUCT_ENTERPRISE_SERVER: result:= OS_WINDOWS_SERVER_2008_ENTERPRISE; PRODUCT_ENTERPRISE_SERVER_V: result:= OS_WINDOWS_SERVER_2008_ENTERPRISE_V; PRODUCT_ENTERPRISE_SERVER_CORE: result:= OS_WINDOWS_SERVER_2008_ENTERPRISE_CORE; PRODUCT_ENTERPRISE_SERVER_CORE_V: result:= OS_WINDOWS_SERVER_2008_ENTERPRISE_CORE_V; PRODUCT_ENTERPRISE_SERVER_IA64: result:= OS_WINDOWS_SERVER_2008_IA64; end; // case dwiGetProductInfo(OSV) end; // case dwiGetProductInfo(OSV) 1: // <-- Seven series case OSV.wProductType of VER_NT_WORKSTATION: case dwiGetProductInfo(OSV) of PRODUCT_STARTER: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_STARTER_X64 else result:= OS_WINDOWS_7_STARTER; PRODUCT_HOME_BASIC: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_HOME_BASIC_X64 else result:= OS_WINDOWS_7_HOME_BASIC; PRODUCT_HOME_BASIC_N: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_HOME_BASIC_N_X64 else result:= OS_WINDOWS_7_HOME_BASIC_N; PRODUCT_HOME_PREMIUM: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_HOME_PREMIUM_X64 else result:= OS_WINDOWS_7_HOME_PREMIUM; PRODUCT_HOME_PREMIUM_N: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_HOME_PREMIUM_N_X64 else result:= OS_WINDOWS_7_HOME_PREMIUM_N; PRODUCT_HOME_PREMIUM_SERVER: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_HOME_SERVER_2011_X64 else result:= OS_WINDOWS_HOME_SERVER_2011; PRODUCT_HOME_SERVER: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_STORAGE_SERVER_2008_R2_ESSENTIALS_X64 else result:= OS_WINDOWS_STORAGE_SERVER_2008_R2_ESSENTIALS; PRODUCT_PROFESSIONAL: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_PROFESSIONAL_X64 else result:= OS_WINDOWS_7_PROFESSIONAL; PRODUCT_PROFESSIONAL_N: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_PROFESSIONAL_N_X64 else result:= OS_WINDOWS_7_PROFESSIONAL_N; PRODUCT_ENTERPRISE: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_ENTERPRISE_X64 else result:= OS_WINDOWS_7_ENTERPRISE; PRODUCT_ENTERPRISE_N: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_ENTERPRISE_N_X64 else result:= OS_WINDOWS_7_ENTERPRISE_N; PRODUCT_ULTIMATE: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_ULTIMATE_X64 else result:= OS_WINDOWS_7_ULTIMATE; PRODUCT_ULTIMATE_N: if (SI.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) or dwWOW64IsRunning then result:= OS_WINDOWS_7_ULTIMATE_N_X64 else result:= OS_WINDOWS_7_ULTIMATE_N; end; // case dwiGetProductInfo(OSV) else //case OSV.wProductType case dwiGetProductInfo(OSV) of PRODUCT_UNKNOWN: result:= OS_WINDOWS_SERVER_2008_R2; PRODUCT_SERVER_FOUNDATION: result:= OS_WINDOWS_SERVER_2008_R2_FOUNDATION; PRODUCT_STANDARD_SERVER: result:= OS_WINDOWS_SERVER_2008_R2_STANDARD; PRODUCT_STANDARD_SERVER_CORE: result:= OS_WINDOWS_SERVER_2008_R2_STANDARD_CORE; PRODUCT_STANDARD_SERVER_CORE_V: result:= OS_WINDOWS_SERVER_2008_R2_STANDARD_CORE_V; PRODUCT_ENTERPRISE_SERVER: result:= OS_WINDOWS_SERVER_2008_R2_ENTERPRISE; PRODUCT_ENTERPRISE_SERVER_V: result:= OS_WINDOWS_SERVER_2008_R2_ENTERPRISE_V; PRODUCT_ENTERPRISE_SERVER_CORE: result:= OS_WINDOWS_SERVER_2008_R2_ENTERPRISE_CORE; PRODUCT_ENTERPRISE_SERVER_CORE_V: result:= OS_WINDOWS_SERVER_2008_R2_ENTERPRISE_CORE_V; PRODUCT_ENTERPRISE_SERVER_IA64: result:= OS_WINDOWS_SERVER_2008_R2_IA64; PRODUCT_HOME_PREMIUM_SERVER: result:= OS_WINDOWS_HOME_SERVER_2011; PRODUCT_HOME_SERVER: result:= OS_WINDOWS_STORAGE_SERVER_2008_R2_ESSENTIALS; end; // case dwiGetProductInfo(OSV) end; // case OSV.wProductType 2: // <-- Eight series begin // (When its time... ) end; end; // case OSV.dwMinorVersion end; // case OSV.dwMajorVersion end; // else if OSV.dwPlatformId = VER_PLATFORM_WIN32_NT end; |
AW: Falscher Product Type in OSVersionInfoEx
@Codehunter
Schon extrem genial - Bitte weiter so ! Für mich auf jeden Fall extrem hilfreich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz