Verbieten geht nicht, aber man kann verhindern, dass durch Windows es automatisch aktiviert wird.
Du könntest GetSystemInfo mit GetNativeSystemInfo vergleichen und versuchen zu erkennen, ob der Kompatibilitätsmodus aktiv ist und dann den Nutzer
warnen informieren.
"Automatisch" geht der Kompatibilitätsmodus eigentlich nur an, wenn die ID der jeweiligen Windows-Version nicht in der Liste der supportedOS enthalten ist.
Es wird dann davon ausgegangen daß die Anwendung nicht kompatibel ist und über eine Heuristik oder Sonstwas wird dann versucht zu erkennen was vermutlich nötig ist.
z.B. wird über Keywords im Dateinamen, wie z.B. "setup" oder "install", davon ausgegangen, dass es ein "Installer" ist und demnach Adminrechte benötigt.
Manuell kann man aber dennoch daran etwas verändern.
Delphi 11.2 sieht diesbezüglich OK aus.
Code:
<compatibility xmlns="urn:schemas-microsoft-
com:compatibility.v1">
<application>
<!--The ID below indicates app support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates app support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!--The ID below indicates app support for Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!--The ID below indicates app support for Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!--The ID below indicates app support for Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
Ja, Windows 11 fehlt scheinbar, aber auch nur, wenn man nicht bedenkt, dass Windows 11 keine neue ID bekommen hat und immernoch die Windows 10-ID benutzt.