C# 返回错误值的游标位置函数

C# 返回错误值的游标位置函数,c#,.net,windows,screen,coordinates,C#,.net,Windows,Screen,Coordinates,我有一个2160 x 1440的小屏幕,所以我在Windows中使用了150%的缩放比例 使用Cursor.Position或甚至GetCursorPos/getphysicallustorpos我总是在屏幕上获得缩放坐标(例如,(21601440)变为(1440960) 我确信这是最近的一次更改,因为我使用了Cursor.Position,在这个屏幕上没有任何问题 如何解释这种行为?为什么GetCursorPos和GetPhysicalCalcuersorPos在我的屏幕上应该不同时返回相同的

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

使用
Cursor.Position
或甚至
GetCursorPos/getphysicallustorpos
我总是在屏幕上获得缩放坐标(例如,(21601440)变为(1440960)

我确信这是最近的一次更改,因为我使用了
Cursor.Position
,在这个屏幕上没有任何问题

如何解释这种行为?为什么
GetCursorPos
GetPhysicalCalcuersorPos
在我的屏幕上应该不同时返回相同的值


最重要的是,使用DPI调整这些函数返回的值是否是获得正确值的唯一方法?

对于遇到此问题的人,我仍然无法解释为什么在使用
GetPhysicalCalcuorSorpos
GetCursorPos检索时物理坐标和逻辑坐标之间没有区别
PhysicalToLogicalPoint
无法工作,因为Windows 8.1之后不再支持它

然而,通过在其app.manifest中创建
dpiAware
表单,似乎可以使所有程序保持一致。这基本上使所有坐标都符合逻辑,无需使用系统的dpi计算。
例如,在运行时更改窗体的宽度会比在编辑器中更改窗体时更改的宽度大1.5倍。另一个例子是使用
Graphics.CopyFromScreen
,它希望me*1.5检索到的坐标能正常工作。更改dpi感知后,这一切现在都能正常工作。

您是否尝试过使用
PhysicalLogicalPoint
函数?只需使用
GetDesktopWindow()尝试一下
作为句柄。不幸的是,坐标值没有改变。还有其他建议吗?