找回密码
 加入
搜索
查看: 239|回复: 12

分辨率缩放影响定位怎么办

[复制链接]
发表于 2024-5-24 16:32:43 | 显示全部楼层 |阅读模式
在做软件安装时明明在本机测试都正常。一到客户机就卡在某些安装步骤上。经过测试发现大多数是win10/11笔记本电脑。都有个共性 屏幕缩放超过100%,比如125% 150%时原本的定位开始不准。虽然已经把安装窗口移动到左上角(0,0),用绝对定位。但是由于缩放软件的尺寸也变大了,坐标都变了。请问有什么好方法能解决呢。



这是非标准软件。controlclick无法使用。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2024-5-24 16:57:45 | 显示全部楼层
检测后呢。。给他设置成100%缩放?
发表于 2024-5-24 16:39:54 | 显示全部楼层
你的程序运行坐标逻辑中要先检测一下DPI...

---------------------
发表于 2024-5-24 20:04:36 来自手机 | 显示全部楼层
编译AU3程序的时候,参数里禁用DPI自适应缩放。AU3程序获取的就会是屏幕绝对坐标,而不是缩放后的虚拟坐标了。
发表于 2024-5-24 20:55:25 | 显示全部楼层
MsgBox(0, "", "DPI缩放后的-分辨率:" & @DesktopWidth & "x" & @DesktopHeight)
_SetProcessDPIAware()
MsgBox(0, "", "原始分辨率-分辨率:" & @DesktopWidth & "x" & @DesktopHeight)

Func _SetProcessDPIAware()
        Local $aRet
        If @OSBuild < 6000 Then Return ;判断系统版本 Windows Vista
        If @OSBuild < 9600 Then ;判断系统版本  win8.1(9600)
                $aRet = DllCall("User32.dll", "BOOL", "IsProcessDPIAware") ;检查进程是否支持DPI感知
                Return $aRet[0]
                If $aRet[0] = False Then
                        $aRet = DllCall('User32.dll', 'BOOL', 'SetProcessDPIAware') ;设置:系统DPI感知
                        If @error Then Return SetError(@error, 0, False)
                        Return
                EndIf
        Else
                $aRet = DllCall("Shcore.dll", "BOOL", "GetProcessDpiAwareness", "HWND", 0, "int*", 0) ;检查进程是否支持DPI感知
                If @error Then Return SetError(@error, 0, False)
                If $aRet[2] <> 2 Then ;0不支持DPI感知 1,系统DPI感知  2,监视器DPI感知
                        $aRet = DllCall("Shcore.dll", "BOOL", "SetProcessDpiAwareness", "int", 2) ;设置:监视器DPI感知
                        If @error Then Return SetError(@error, 0, False)
                        Return
                EndIf
        EndIf
EndFunc   ;==>_SetProcessDPIAware
#EndRegion DPI函数
发表于 2024-5-24 23:16:24 | 显示全部楼层

不看名字还以为是afan呢...

-------------------------
 楼主| 发表于 2024-5-25 00:11:17 | 显示全部楼层
本帖最后由 vud3d 于 2024-5-25 00:16 编辑
gyp2000 发表于 2024-5-24 20:04
编译AU3程序的时候,参数里禁用DPI自适应缩放。AU3程序获取的就会是屏幕绝对坐标,而不是缩放后的虚拟坐标 ...

非常感谢。应该能解决了
发表于 2024-5-26 11:02:14 | 显示全部楼层
本帖最后由 anythinging 于 2024-5-26 11:04 编辑

我运行这个代码,缩放后和原始分辨率是一样的,系统是win11,放大了125%

点评

如果缩放设置不是选择列表里的125%,而是启用高级缩放里的自定义缩放,并设置小于等于125%。AU3程序将不会被DPI设置所影响。  发表于 2024-5-26 18:12
发表于 2024-5-27 21:53:17 | 显示全部楼层
anythinging 发表于 2024-5-26 11:02
我运行这个代码,缩放后和原始分辨率是一样的,系统是win11,放大了125%

感谢指点,我调成系统自带的缩放仍没效果,我再进一步测试看看。
 楼主| 发表于 2024-5-28 08:34:50 | 显示全部楼层

恕我小白。。。这个代码要怎么应用到我的代码里呢。是直接把这个函数复制进去。运行一次_SetProcessDPIAware()吗
发表于 2024-5-28 12:22:47 | 显示全部楼层
可以尝试用uia或者spy++ 来定位,根据dpi来定位,要写好几套定位
 楼主| 发表于 2024-5-28 15:50:17 | 显示全部楼层
skysmile 发表于 2024-5-28 12:22
可以尝试用uia或者spy++ 来定位,根据dpi来定位,要写好几套定位

有没有相关参考。。纯小白。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-18 20:58 , Processed in 0.087976 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表