В этих 125% и дело. В Far.exe где-то между 4774 и 4900 поломали манифест. В 4774 манифест выглядит так:
Code: Select all
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
...
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
и это работает: процесс Far получает от системы ачивку DPI-Aware, и техническое окно, создаваемое плагином, получает ровно такие размеры, как плагин говорит системе.
В 4900 манифест выглядит так:
Code: Select all
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
...
<asmv3:application>
<windowsSettings xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
<dpiAware>true</dpiAware>
<longPathAware>true</longPathAware>
</windowsSettings>
</asmv3:application>
</assembly>
и это не работает: система просто-напросто игнорирует поддерево windowsSettings в неправильном xml namespace. Far не получает от системы ачивку DPI-Aware, техническое окно, создаваемое плагином, неожиданно растягивается пропорционально dpi, а координаты от мыши соответственно сжимаются.
Включать longPathAware правильно примерно так:
Code: Select all
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
...
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
Я, в принципе, могу в плагин запихнуть вызов SetProcessDPIAware(), но поскольку оно глобально для процесса, идеологически правильнее и менее неожиданно для других плагинов с не-консольным выводом будет пофиксить манифест в Far.exe.