我需要能夠將我的應用程序的清單中的dpiAware屬性設置爲「每個顯示器」。屬性中的可用選項僅用於啓用或禁用DPI認知。這些設置都不適用於我。如果我不在exe中嵌入清單,則可以獲得我想要的應用程序的行爲,然後手動編輯清單。我想自動生成並嵌入清單。有什麼我失蹤? (我使用Visual Studio 2013年)如何在Visual Studio中將Windows應用程序清單中的dpiAware屬性設置爲「每個顯示器」?
回答
此清單作品,<dpiAware>True/PM</dpiAware>
是最重要的部分:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
</application>
</compatibility>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</asmv1:assembly>
新在Windows 10是dpiAwareness以及dpiAware,所以我們需要稍微更新這個例子。現在,它是好的,因爲如果dpiAwareness不存在,那麼設置將從dpiAware繼承。
要啓用DPI意識十足,與最新的Win10支持(見參考文獻網址爲其他可能的選項),其中包括「permonitor」和「permonitorv2」,我會用,而不是「系統」,因爲你的問題提出問題。
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- legacy -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to pm if pmv2 is not available -->
</asmv3:windowsSettings>
</asmv3:application>
要禁用,你會做相反的(不需要dpiAwareness
因爲我們不支持它):
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">unaware</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
然後甚至有 'gdiScaling' 如果你恰巧使用GDI對象來繪製一些你自己的東西。
<asmv3:application>
<asmv3:windowsSettings>
<gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
</asmv3:windowsSettings>
</asmv3:application>
參考:Microsoft on DPI Awareness as of latest Windows 10 build(也有關於如何使你的代碼DPI知道教程,即使是在大的項目有點乏味)
感謝您的編輯IInspectable,我從一些不良的清單中剔除了我顯然,躺在身邊。謹慎對待任何用戶的一句話:如果你得到的錯誤是明顯的,那麼你的字面意思就是你的應用程序不能以'並行配置錯誤'運行。 –
在Windows 10 1607引入了一個名爲dpiAwareness
新屬性。它允許選擇回退DPI縮放選項並覆蓋dpiAware
屬性(如果存在)。爲了達到最佳兼容性,您應該指定這兩者,並確保您的應用程序能夠使用所有DPI認知級別。
以下清單能夠在Windows 10 1607+每監視器DPI意識版本2,每個監視器DPI意識在Windows 8.1+和系統DPI意識在Windows 7:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity type="win32" name="MyApplication" version="1.0.0.0" processorArchitecture="amd64"/>
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- fallback for Windows 7 and 8 -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to per-monitor if per-monitor v2 is not supported -->
<gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling> <!-- enables GDI DPI scaling -->
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
要禁用DPI感知,您可以簡單地保持DPI感知未指定(默認情況下不知道),或指定dpiAware
爲false
。
另請注意gdiScaling
屬性,該屬性在Windows 10 1607中添加。如果設置爲true
,它將啓用自動GDI縮放。如果您的應用程序使用GDI繪圖,這非常有用。
參考文獻:
High-DPI scaling since Windows 10 1607
Writing DPI-aware applications
Application manifests
謝謝。在屏幕上移動時,GDI Scaling似乎會影響dialogex的拖動框的大小。需要更多研究! –
- 1. 如何在Visual Studio 2010中設置單頁面應用程序
- 2. Visual Studio 2010中的Windows應用程序框架屬性
- 3. 如何在Windows應用程序中的每個20secs中單獨顯示datagridview?
- 4. 如何爲通用Windows應用程序設置應用程序磁貼屬性
- 5. Visual Studio Web應用程序中的多個配置設置?
- 6. 如何將應用程序設置爲Android Studio中的庫?
- 7. Visual Studio中的配置和程序功能Windows應用程序
- 8. 如何停止Visual Studio爲設計器中的控件生成屬性設置?
- 9. Visual Studio 2010中:如何嵌入清單使用默認設置
- 10. 如何在Visual Studio 2008中爲我的應用程序設置圖標?
- 11. 在Visual Studio 2015中顯示單元測試的描述屬性
- 12. 如何在Visual Studio社區中將複製本地屬性設置爲true 2015
- 13. 如何在Django中爲每個應用程序設置不同的設置?
- 14. Visual Studio DebuggerStepThrough屬性設置器
- 15. 如何使Visual Studio插件在設計器中設置控件的Visible屬性
- 16. 將一個UserControl屬性設置爲在VS屬性窗口中不顯示
- 17. JSF2中的顯示清單屬性
- 18. 如何設置屬性爲每個「subUIBezierPath」
- 19. 如何在ROO生成的應用程序的selectbox中顯示屬性屬性
- 20. 如何在Visual Studio報表中設置動態參數屬性?
- 21. Visual Studio 2012應用程序設置
- 22. Visual Studio - 應用程序設置
- 23. 如何在Visual Studio 2010中組織Windows窗體應用程序
- 24. 如何在Visual Studio 2008中開發Windows Mobile應用程序?
- 25. 如何在主題中設置應用程序佈局屬性?
- 26. 在Visual Studio中設置多個文件的屬性
- 27. 部署和設置在Visual Studio中的Windows應用程序項目2010
- 28. 在Visual Studio 2010中重新排列屬性設置順序
- 29. 如何在新貴中設置每個應用程序的gopath?
- 30. 如何在Visual Studio中爲項目引用設置「特定版本」屬性
隨着VS 2013,你不需要UAC的要素標註被自動添加,因爲是''dpiAware''元素。您只需要兼容性GUID。請注意,此示例僅列出Windows 8.1 GUID。請參閱[本博客文章](https://blogs.msdn.microsoft.com/chuckw/2013/09/10/manifest-madness/) –