/ 其他 / 228浏览

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

文章目录

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

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

比如我的桌面分辨率是1920*1080,此时我把鼠标放在右下角,它获取的鼠标位置应该是x = 192, y = 1080。但事实是x=1535 y = 863。

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

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

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

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

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

方案二 设置DPI感知

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

Step 1

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

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

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

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都解决了。

项目地址和下载

Releases · Eysent/FloatImages (github.com)
FloatImages

Eysent
【C】如何计算结构体占用内存大小
【C】如何计算结构体占用内存大小
修复WordPress错误 – 打开错误日志方法并排查问题
修复WordPress错误 – 打开错误日志方法并排查问题
【Python】回溯递归法一键解决数独谜题
【Python】回溯递归法一键解决数独谜题
【C#】C#实现单片机上位机,串口通信示例
【C#】C#实现单片机上位机,串口通信示例
【CE】某网盘加速下载方法,无需破解或其他下载器
【CE】某网盘加速下载方法,无需破解或其他下载器
【HTML/CSS/JS】网页实现猫猫眼睛跟随鼠标转动,可用Wallpaer Engine当作壁纸
【HTML/CSS/JS】网页实现猫猫眼睛跟随鼠标转动,可用Wallpaer Engine当作壁纸

0

  1. This post has no comment yet

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注