写代码时候有时需要临时参考代码或者结构体/类的定义,但是有没有第二块屏幕,这个时候截图并悬浮就很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都解决了。
0