【C#】解决因Windows缩放导致的截图错位和鼠标位置错误

319次阅读
没有评论

共计 1094 个字符,预计需要花费 3 分钟才能阅读完成。

写代码时候有时需要临时参考代码或者结构体 / 类的定义,但是有没有第二块屏幕,这个时候截图并悬浮就很 Nice。这个功能的实现不复杂,也有很多相关项目。比如 QQ 截图就自带这个功能,什么?为什么不用 QQ 截图?因为单位不让装 QQ。

遂,我在 Github 上找到了这个项目FloatImages,它是最简洁的,没有其他我不需要的功能,但是它有个问题,就是如果 Windows 随访设置不是 100%,那么他就会出现截图缩放,鼠标位置不正确的情况。

比如我的桌面分辨率是 1920*1080,此时我把鼠标放在右下角,它获取的鼠标位置应该是 x = 192, y = 1080。但事实是 x =1535 y = 863。
【C#】解决因 Windows 缩放导致的截图错位和鼠标位置错误

我的 Windows 缩放是 125%,将这两个数×1.25 差不多就是桌面分辨率了,因此可以判断是 Windows 缩放在搞鬼。

另外他还会导致截图错位和缩放:

【C#】解决因 Windows 缩放导致的截图错位和鼠标位置错误

可以看到截的图中的文字不清晰,截图位置也不对,我的截图框框选的是 FloatImage 窗口,它却往左上平移了。

方案一 获取 Windows 缩放系数进行坐标转换

这个解决方法很直接,我们如果能获取 Windows 的缩放系数,比如 125%,那我们把鼠标位置坐标就可以做一个变换,这样就可以了。我尝试搜索或者问 ChatGPT,得到的答案都不能正确获得缩放系数,至少在我的设备上如此。那么这就不列出了,如果方案二也不行的话,可以自行搜索关键词。

方案二 设置 DPI 感知

这个方法只对 Windows 应用有效,我们只需要打开 dpi 感知即可。

Step 1

在项目中新建一个应用程序清单文件:

【C#】解决因 Windows 缩放导致的截图错位和鼠标位置错误

或者 自行添加 app.manifest 文件并把它添加到你的项目中。点击项目 - {你的项目名}属性

【C#】解决因 Windows 缩放导致的截图错位和鼠标位置错误

在清单中指定你的清单文件。

Step 2

添加如下代码或者取消注释。

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
    </windowsSettings>
  </application>

如果要查看更多信息,请参阅此处

添加后再查看效果,发现以上提到的 BUG 都解决了。

【C#】解决因 Windows 缩放导致的截图错位和鼠标位置错误

【C#】解决因 Windows 缩放导致的截图错位和鼠标位置错误

项目地址和下载

Releases · Eysent/FloatImages (github.com)
FloatImages

正文完
 0
评论(没有评论)