Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erkennen des Vista Kompatibilitätsmodus (https://www.delphipraxis.net/117971-erkennen-des-vista-kompatibilitaetsmodus.html)

DevidEspenschied 29. Jul 2008 11:24


Erkennen des Vista Kompatibilitätsmodus
 
Hi,

kennt jemand Möglichkeiten, den Windows Vista Kompatibilitätsmodus innerhalb von Delphi zu erkennen ?

Ich muss herausfinden, welche genaue Betriebssystemversion installiert ist, und dafür gibt es hier ja auch bereits Komponenten. Die Erkennung des Kompatibilitätsmodus (etwa für Windows XP SP2) gestaltet sich aber schwerer. Denn man kann hier nicht etwa GetVersionEx verwenden, da diese ebenfalls die Werte des Kompatibilitätsmodus zurückliefert. Die aktuelle Toolbox-Ausgabe schlägt hier folgendes vor:

- Überprüfung evtl. nur unter Vista vorhandener DLL-Dateien im System32-Verzeichnis (hier kenne ich aber nicht die Dateien und wage zu bezweifeln, dass diese Methode sicher genug ist)
- Überprüfung, ob bestimmte unter Vista verfügbare API-Funktionen lauffähig sind (etwa GetProductInfo)
- Überprüfung bestimmter Registryeinträge

Hat jemand noch andere Vorschläge bzw. bereits eine Funktion, um den Kompatibilitätsmodus zu ermitteln ?

Danke für die Antworten...

Assertor 29. Jul 2008 11:29

Re: Erkennen des Vista Kompatibilitätsmodus
 
Hi,
Zitat:

Zitat von devidespe
Ich muss herausfinden, welche genaue Betriebssystemversion installiert ist

Wenn ein Programm im Kompatibilitätsmodus versetzt wird, gibt es meist gute Gründe dafür. Warum möchtest Du denn das genau machen?

Gruß Assertor

DevidEspenschied 29. Jul 2008 11:51

Re: Erkennen des Vista Kompatibilitätsmodus
 
Das Erkennen des Vista-Kompatibilitätsmodus wird benötigt, weil mein Programm bestimmte Vista-Extensions benutzt, und ich diese erst freischalte, wenn wirklich Vista geladen ist.

hitzi 29. Jul 2008 12:10

Re: Erkennen des Vista Kompatibilitätsmodus
 
Lies mal hier: http://17slon.com/blogs/gabr/2007/02...ect-vista.html

Assertor 29. Jul 2008 12:17

Re: Erkennen des Vista Kompatibilitätsmodus
 
Und auf der Seite steht auch:
Zitat:

some API functions work more like they did in the selected OS version
Ich halte nichts davon, den Kompatibilitätsmodus zu umgehen. Wofür? Welche "Extension" ist es denn? Der TaskDialog?

Gruß Assertor

hitzi 29. Jul 2008 12:21

Re: Erkennen des Vista Kompatibilitätsmodus
 
Lass ihn doch ;)

Ist mir zwar auch schleierhaft, wozu er das braucht, da Vista nur auf Vista laufen kann. Oder kann XP jetzt schon Vista emulieren? Und wenn jemand ein speziell für Vista entwickeltes Programm unter Vista in den Kompatibilitätsmodus schickt ist selber schuld ;)

DevidEspenschied 29. Jul 2008 12:23

Re: Erkennen des Vista Kompatibilitätsmodus
 
Danke, der Link scheint sich mit diesem Thema genauer zu befassen.

@Assertor: Es handelt sich bei meine Applikation um eine Unternehmenslösung, bei der klar in den Systemvoraussetzungen steht, dass der Kompatibilitätsmodus nicht aktiv sein darf. Auch wenn Du nicht so viel davon hälst, ich brauche dieses Feature...

nicodex 29. Jul 2008 12:46

Re: Erkennen des Vista Kompatibilitätsmodus
 
Am einfachsten lässt sich AppCompat über die Umgebungsvariable "entdecken":
Delphi-Quellcode:
const
  AppCompatLayerEnvironmentVariable = '__COMPAT_LAYER';

const
  // OS Version
  AppCompatLayerNameWin95         = 'Win95';
  AppCompatLayerNameNT4SP5        = 'NT4SP5';
  AppCompatLayerNameWin98         = 'Win98';
  AppCompatLayerNameWin2000       = 'Win2000';
  AppCompatLayerNameWinXPSP2      = 'WinXPSp2';
  AppCompatLayerNameWinSrv03SP1   = 'WinSrv03Sp1';
  // Display Settings
  AppCompatLayerName256Color     = '256Color';
  AppCompatLayerName640x480       = '640X480';
  AppCompatLayerNameDisableThemes = 'DisableThemes';
  AppCompatLayerNameDisableDWM   = 'DisableDWM';
  AppCompatLayerNameHighDpiAware = 'HighDpiAware';
  AppCompatLayerNameDisableCicero = 'DisableCicero';
  // LUA
  AppCompatLayerNameRunAsAdmin   = 'RunAsAdmin';
  AppCompatLayerNameLUA          = 'LUA';
  AppCompatLayerNameLuaCleanup   = 'LUACleanup';
  // Misc
  AppCompatLayerNameInternational = 'International';
  AppCompatLayerNameProfilesSetup = 'ProfilesSetup';
ps: Es gibt noch (wahrscheinlich undokumentierte) Funktionen, um die permanenten AppCompat-Flags (aus der Registry) zu lesen/setzen: apphelp!GetPermLayers und apphelp!SetPermLayers.
pps: Wenn du die echte Version wissen willst, kannst Du WMI verwenden (Win32_OperatingSystem), um AppCompat zu umgehen... das Parsen der Eigenschaften ist halt relativ aufwendig zu implementieren.

Assertor 29. Jul 2008 12:50

Re: Erkennen des Vista Kompatibilitätsmodus
 
Zitat:

Zitat von devidespe
@Assertor: Es handelt sich bei meine Applikation um eine Unternehmenslösung, bei der klar in den Systemvoraussetzungen steht, dass der Kompatibilitätsmodus nicht aktiv sein darf. Auch wenn Du nicht so viel davon hälst, ich brauche dieses Feature...

Sehr merkwürdig :| Wenns später nicht läuft, dank eines ServicePacks oder so, aber nicht beschweren ;)

Gruß Assertor

DevidEspenschied 29. Jul 2008 13:11

Re: Erkennen des Vista Kompatibilitätsmodus
 
Zitat:

Zitat von nicodex
Am einfachsten lässt sich AppCompat über die Umgebungsvariable "entdecken":

Delphi-Quellcode:
const
  AppCompatLayerEnvironmentVariable = '__COMPAT_LAYER';
  ...

Der Weg über die Umgebungsvariable ist meiner Meinung nach am effektivsten, leider existiert '__COMPAT_LAYER' in meinem Vista Business nicht. Zumindest über das Set-Kommando der Kommandozeile.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Seite 1 von 2  1 2      

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