问题标签 [dpi-aware]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - DX11设置全屏状态后桌面分辨率奇怪
我有一个 DPI Aware 应用程序(通过清单文件),并且在 1 个监视器系统上,以下所有方法都返回错误的桌面分辨率:
- 获取系统指标
- 获取监控信息
- GetWindowRect(GetDesktopWindow(), &desktop)
- EnumDisplaySettingsExA/ENUM_CURRENT_SETTINGS
- IDXGIOutput::GetDesc
我的显示器是 4k,但我将桌面尺寸设置为 1920x1080,比例为 100%。在窗口模式下,通过所有方法报告的分辨率都是正确的。但是,当切换到全屏时,它们都返回 1600x1200。如果是 DPI Aware 问题,它至少应该保持纵横比,例如 1600x900。
我注意到错误的结果是在调用 IDXGISwapChain::SetFullscreenState(true, output_device) 之后根据 MSDN 使用标志 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH 创建交换链对象的。
该应用程序使用 DirectX 11。
有什么建议是我的原因吗?
谢谢
windows - Windows Server 是否支持 Per-Monitor v2 Awareness?
我正在为我们的应用程序编写系统要求,我们最近在其中添加了对每监视器 DPI 感知 V2 的支持。我们已经使用 Windows 的客户端版本对其进行了测试。有人知道 Windows Server 版本是否支持此功能,如果支持,从哪个版本开始?
我查看了 MSDN 但找不到答案...
如果它很重要,我们使用此处描述的方法初始化 DPI 感知: WPF ClickOnce DPI 感知 Per-Monitor v2
c# - 如何使用窗口缩放处理 SendInput 鼠标移动?
所以我找不到任何东西可以帮助我解决这个问题,这让我发疯了。
使用Windows Input Simulator (C# SendInput Wrapper - Simulate Keyboard and Mouse)
当我的软件的用户碰巧有一个非标准的 100% 窗口缩放InputSimulator.Mouse.MoveMouseTo(toX, toY);
被抛出,移动到一个不正确的位置。
我目前的计算方式:
例如,如果用户将缩放设置为 125%,我将如何计算正确的 100% 缩放位置?
提前致谢。
windows - 稍后更改组合框的项目高度(用于 DPI 感知)
背景:
我有一个具有每显示器 DPI 感知模式的 MFC 应用程序。当我将窗口转移到另一个具有另一个屏幕缩放比例的监视器时,我会接收并处理该WM_DPICHANGED_AFTERPARENT
消息。
我的所有者绘制的组合框(带有 style CBS_OWNERDRAWFIXED
)已经填充了我需要根据新的缩放因子更新高度的项目。为此,我计算新高度并调用:
问题:在以前的缩放中尚未打开的组合框,但在更改项目高度后打开的组合框出现错误。列表以所有条目的后半部分打开,下半部分为空。关闭并重新打开它可以解决问题。
我尝试了从其他更新问题(例如,显示和隐藏组合框)中知道的解决方法Invalidate()
,但它没有帮助。完全重新填写所有条目有效,但这很慢并且会导致闪烁(我在那个窗口中有 12 个这样的框)。
任何想法?谢谢!
编辑:问题显然只发生在增加项目的高度时(所以当我的窗口从 100% 移动到 200% 监视器时)。
c++ - 设置我的应用程序 api 感知并防止系统使其模糊和错误定位
我有一个带有父窗口和 4 个子窗口的简单应用程序。它看起来很好Windows xp
并显示设置Windows 7
。125%
然而,在Windows 7
不止125%
其Windows 10
125%
本身上,窗口、菜单、文本和消息框变得模糊,并且子窗口被溢出。
我想修复它们,使它们看起来很好,所以我尝试根据 dpi 用更新的尺寸替换它们的尺寸:
但是,结果是一样的。
我还更改Compressor Reporter.exe.embed.manifest
并在其中添加application
标签,如下所示。但是当我重建我的应用程序时,我添加的内容没有出现,我看到没有application
标签。
我做错了什么,如何修复模糊的窗口、文本、菜单和消息框并使子窗口正确定位?
谢谢
wpf - 每个监视器的 WPF DPI 感知对话框定位问题
我有一个 WPF .Net 4.7 应用程序,每个监视器都有 DPI Aware。我按照此处解释的解决方案启用 DPI 意识。
我想在主窗口的左上角打开一个对话框,然后执行以下操作:
我有 2 台具有不同 DPI 比例的显示器。
如果我从 Visual Studio 运行应用程序,一切正常:无论主窗口是哪个监视器,对话框始终位于主窗口的左上角。
但是,如果我从 Windows 资源管理器运行应用程序,则对话框仅在我启动应用程序时 Windows 资源管理器所在的监视器上正确定位。
为什么会出现这种不同的行为,以及当我从 Windows 资源管理器运行应用程序时如何正确定位对话框?
java - Java Runtime 7u51 不支持 DPI?
我们有一个 Java Web 应用程序(外部且不受我们管理),它在 Win 10 的 IE11 中使用 jp2launcher.exe 运行,但在高 DPI 设备上字体显示太小。我尝试了很多方法让它看起来更好,但似乎没有任何效果?
我试过(我们使用的是 7u51 x86):
- 在浏览器中更改缩放选项,并在操作系统本身上缩放
将 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\PreferExternalManifests 设置为 DWORD 1,并创建 java.exe.manifest、javaws.exe.manifest、javaw.exe.manifest 和 jp2launcher.exe.manifest。我通过使用资源浏览器获取原始清单并将 DpiAware 更改(或添加)为 true 来创建清单。
我右键单击每个文件的属性,转到兼容性选项卡,更改高 DPI 设置并设置为覆盖系统(或系统/增强)。
我不相信清单文件甚至被读取。所以我重新启动,但没有奏效。我更新了 exe 时间戳(http://csi-windows.com/blog/all/27-csi-news-general/245-find-out-why-your-external-manifest-is-being-ignored)并且没用。然后我决定编辑内部清单并将 DpiAware 设置为 false,但这也不起作用。
- 我还检查了任务管理器,以确保我正在为正确的进程/可执行文件创建清单。我相信 DpiAware 已在 JRE9/10 9(?)中得到修复,但 Web 应用程序似乎仅适用于 x86 JRE,版本 9 及更高版本仅适用于 x64!
任何建议表示赞赏。我难住了。
wpf - 对 WPF 和 Winform 中“Screen.Bounds”的返回感到困惑
我有两个显示器(1:3840X2160 200% 比例,2:1280X1024 100% 比例)
然后我写一些东西来获得我的屏幕分辨率。
混乱来了。
TEST1:在 Winfrom 中,我得到了输出
1280,1024 1920,1080
TEST2:在 WPF 中,它显示
2560,2048 3840,2160
TSET3:检查 dpi Winform:96 WPF:192
这是我的问题:
- 为什么剂量 Winform\Wpf 返回不同的分辨率/DPI?
- 显然来自 wpf 的 '2560,2048' 是不正确的,但是为什么 wpf 返回 '1280X1024 * 200%' 呢?
- 如何从 winform 和 wpf 获得相同的输出?
winapi - 设置进程 DPI 感知,以便系统补偿缩放因子
我有以下鼠标钩子程序(为解释而简化)。
我从钩子中获得的鼠标坐标不会由显示器的缩放因子调整。
无论我将显示器的缩放系数设置为 100% 还是 200%,鼠标钩总是给我物理像素。
另一方面,GetCursorPos
winapi 函数以逻辑像素给出坐标。即如果缩放因子为200%,GetCursorPos
将给出除以2的坐标,而鼠标钩将给出未调整的数字。
如果程序不支持 DPI,系统会补偿缩放因子,以便程序继续工作,就好像什么都没发生一样。
这正是 . 的返回值所发生的情况GetCursorPos
。它提供逻辑像素而不是物理像素。
另一方面,鼠标钩子程序没有被系统调整。
我尝试在清单中将我的程序设置为不支持 DPI,如下所示:
但这没有什么区别。我还尝试将其声明为可识别 DPI,如下所示:
这也没有任何区别。
是否有任何设置可以通过清单或其他方式添加到我的程序中,这将使鼠标钩子程序能够提供逻辑坐标GetCursorPos
?
我正在 Windows 10 中测试所有这些。
跟进:
我发现了问题。我的清单文件不正确。XML 命名空间未正确设置。
这是有效的。
为了让系统为程序提供逻辑坐标,程序必须是 DPI 感知的。没有表现出 DPI 感知能力的程序将处理不一致的坐标,不仅在鼠标钩子中,也在 BitBlt、IAccesibility、UIAutomation 等中。
我不明白为什么微软决定倒退。没有表现出 DPI 意识的程序应该像往常一样运行,而不是相反。
这意味着无论何时在监视器上设置缩放因子,大多数程序都会默认中断。为了破解它们,它们必须具有 DPI 意识,并且......就像那样......它们将再次工作。
c# - 在没有清单文件的情况下设置 PerMonitorV2 DpiAwareness?
在没有清单文件的情况下执行时,我的 Winforms 应用程序显得非常模糊。有了它和添加的代码
模糊确实消失了,但它需要用户有一个额外的 .config 文件才能使应用程序在运行时看起来清晰。我尝试将表单的 AutoScaleMode 变量设置为 Font 和 Dpi,但两者都没有区别。我也在网上找到了这个SetProcessDpiAwarenessContext
功能,但我不确定这是否是我正在寻找的,我不知道如何在我的代码中实现它。
是否可以在没有清单文件的情况下从我的应用程序中消除模糊?