光标位置函数返回错误值

Cursor position functions returning wrong value

我有一个 2160 x 1440 的小屏幕,所以我在 Windows 中使用了 150% 的缩放比例。

使用 Cursor.Position 甚至 GetCursorPos / GetPhysicalCursorPos 我总是在我的屏幕上得到缩放坐标(例如 (2160, 1440) 变成 (1440, 960)。

我确信这是最近的更改,因为我之前在此屏幕上使用 Cursor.Position 没有问题。

如何解释这种行为?为什么 GetCursorPosGetPhysicalCursorPos return 的值在我的屏幕上本应不同?

最重要的是,使用 DPI 调整这些功能 return 是获得正确值的唯一方法吗?

对于遇到这个问题的人,我仍然无法解释为什么在使用 GetPhysicalCursorPosGetCursorPos 检索它们时物理坐标和逻辑坐标之间没有区别。 PhysicalToLogicalPoint 不起作用,因为它在 Windows 8.1.

之后不再受支持

但是,通过在其 app.manifest 中制作 dpiAware 形式,似乎可以使所有程序保持一致。这基本上使所有坐标都符合逻辑,无需使用系统的 dpi 来计算它。 例如,在运行时更改表单的宽度与在编辑器中更改时的更改量不同(多 1.5 倍)。另一个例子是使用 Graphics.CopyFromScreen,它希望我检索到的坐标 * 1.5 能够正常工作。更改 dpi 感知后,现在一切正常。