C#, Winforms, .manifest: Как определить Scale?
Уважаемые господа,
я пытаюсь в приложении (C#, .NET Framework 4.8 под Windows 10) определить параметр Scale - показан на картинке.
Предыстория вопроса: хочу заставить приложение работать одинаково, несмотря на то, как у пользователя установлен этот параметр.
После многих экспериментов я понял, что единственный способ написать такое приложение - сделать, чтобы независимо от Scale у меня всегда рисовалось окно из одного и того же числа точек на экране.
То есть, фактически, я хочу сам управлять тем, как у меня будет отрисовано окно приложения.
Прописав приложению так называемый manifest-файл, точнее, добавив в него такую секцию:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
я добился того, что окно приложения, независимо от установок Scale, рисуется - в точках - одинакового размера.
Но при этом изменяются размеры шрифта, которым сделаны надписи в форме, пример на следующих двух картинках, соответсвующих scale=100% и scale=125%:
Я попробовал определить установленный scale (для того, чтобы "вручную" подправить размер шрифта), и убедится, что первые несколько примеров, найденных на SO, не работают, всегда выдавая мне результат "у тебя установлен Scale 100%".
Что я пробовал:
наивный способ отсюда
чуть более замороченный способ отсюда
способ, который ну должен уже работать, суда по фундаментальности подхода, отсюда
Сам проект, который можно загрузить и запустить, лежит здесь (гитхаб)
Код из примеров вставлен прямо в Program.cs, и вызывается из единственной формы в событии Shown.
Нельзя ли навести меня на правильный способ определения scale в таком приложении?
Спасибо большое!


