![]() |
Programme im Kompatibilitätsmodus ausführen!
Hallo,
gibt es eine Möglichkeit fremde Programme von Delphi aus im Kompatibilitätsmodus zu starten? |
Re: Programme im Kompatibilitätsmodus ausführen!
Der einzige mir bekannte Weg ist die gewünschten Settings in HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers bzw. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers zu setzen und die Applikation dann zu starten.
|
Re: Programme im Kompatibilitätsmodus ausführen!
Setze vorher die Umgebungsvariable __COMPAT_LAYER.
Siehe ![]() Mit Hilfe von __COMPAT_LAYER kann man auch feststellen, ob das eigene Programm mit AppCompat-Layern ausgeführt wird. Zum Lesen und Setzen der permantenten AppCompat-Layer (Dateieigenschaften) gibt es (meines Wissens nur) undokumentierte Funktionen (welche momentan die o.g. Registrywerte lesen/setzen):
Delphi-Quellcode:
interface
uses Windows; const APPHELP_PERMLAYERS_LOCAL = $00000001; APPHELP_PERMLAYERS_GLOBAL = $00000002; APPHELP_PERMLAYERS_ALL = APPHELP_PERMLAYERS_LOCAL or APPHELP_PERMLAYERS_GLOBAL; type TFNGetPermLayers = function(wszPath: LPCWSTR; wszBuffer: LPWSTR; var pdwBytes: ULONG; dwFlags: ULONG): BOOL; stdcall; function GetPermLayers(wszPath: LPCWSTR; wszBuffer: LPWSTR; var pdwBytes: ULONG; dwFlags: ULONG): BOOL; stdcall; type TFNSetPermLayers = function(wszPath, wszLayers: LPCWSTR; bGlobal: BOOL): BOOL; stdcall; function SetPermLayers(wszPath, wszLayers: LPCWSTR; bGlobal: BOOL): BOOL; stdcall; const AppHelpLib = 'apphelp.dll'; implementation function GetPermLayers; external AppHelpLib; function SetPermLayers; external AppHelpLib; end. |
Re: Programme im Kompatibilitätsmodus ausführen!
Besten Dank, werd ich mal ausprobieren!
|
Re: Programme im Kompatibilitätsmodus ausführen!
nun hab ich's:
SetEnvironmentVariable('__COMPAT_LAYER', 'DisableThemes DisableDWM'); CreateProcess(Nil,PChar('test.exe'),Nil,Nil,False, CREATE_NO_WINDOW,Nil,Nil,si,pi); DANKE!!! |
Re: Programme im Kompatibilitätsmodus ausführen!
Du solltest __COMPAT_LAYER danach dann aber auch wieder zurück setzen, ansonsten werden alle Anwendungen mit dem Kompatibilitätslayer gestartet.
|
Re: Programme im Kompatibilitätsmodus ausführen!
Ich hatte irgendwo gelesen, dass __COMPAT_LAYER Anwendungslokal ist. Habe es nicht zurückgesetzt, da das Prog nur aus den 3 Zeilen besteht. In anderen Anwendungen ist es natürlich sinnvoll die Variable auch wieder zurückzusetzen.
|
Re: Programme im Kompatibilitätsmodus ausführen!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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