win10缩放125%,150%导致获取坐标不准确。
win10缩放125%,150%导致获取坐标不准确。100%写好了脚本,系统缩放不是100%了,坐标位置就变动了。如果获取125%,150%的系统状态,多做几遍适配也行。但是找了好久好像没有很好的解决办法 Func get_Desktop_Scale()$hDC = _WinAPI_GetDC(0)
$Scale = _WinAPI_GetDeviceCaps($hDC, 118) / @DesktopWidth
_WinAPI_ReleaseDC($hGUI, $hDC)
Return $Scale
EndFunc ;==>get_Desktop_Scale
;1.获取显示的缩放比例
;2.坐标乘以scale(缩放比率) 获取DPI值 /96得到缩放比例,坐标*比例 afan 发表于 2022-9-13 18:20
获取DPI值 /96得到缩放比例,坐标*比例
试了几个函数,但是都不行,console输出的比例都相同,无论是125% or 150% 使用1楼的代码得到了正确的缩放倍率,现在有个问题,是不是每行代码的 左侧,顶部, 宽度,高度 这4项都要分别乘倍率,示例如下
Func get_Desktop_Scale()
Local $hDC, $Scale, $hGUI
$hDC = _WinAPI_GetDC(0)
$Scale = _WinAPI_GetDeviceCaps($hDC, 118) / @DesktopWidth
_WinAPI_ReleaseDC($hGUI, $hDC)
Return $Scale
EndFunc ;==>get_Desktop_Scale
Local $HiDpi = get_Desktop_Scale()
;GUI窗口和按钮
$GUI = GUICreate("测试", $HiDpi * 322, $HiDpi * 200)
;标签
GUICtrlCreateLabel("系统DPI自适应测试", $HiDpi * 87, $HiDpi * 61, $HiDpi * 230, $HiDpi * 15)
GUISetState(@SW_SHOW)
有没有简单点的代码,不必要每行代码都要乘倍率就能自动全局自适应
h111666b 发表于 2022-9-14 12:12
使用1楼的代码得到了正确的缩放倍率,现在有个问题,是不是每行代码的 左侧,顶部, 宽度,高度 这4项都 ...
在 100% 缩放状态下编写好GUI代码
前面添加 Opt("GUIResizeMode", 1)
获取 DPI 缩放比例
根据比例 WinMove() 缩放窗口大小即可,内部控件均会等比例放大。若有特殊限位再调整控件坐标 刚刚试了下,不会弄,DPI缩放比例是1.25,就是不起效,老大帮忙下
;缩放比例
$DPI = 1.25
;GUI窗口和按钮
$GUI = GUICreate("测试", $HiDpi * 322, $HiDpi * 200)
;这一行不会弄,DPI缩放是1.25
WinMove($GUI, "", Default * $DPI, Default * $DPI, $Width * $DPI, $Height * $DPI)
;标签
GUICtrlCreateLabel("系统DPI自适应测试", $HiDpi * 87, $HiDpi * 61, $HiDpi * 230, $HiDpi * 15)
GUISetState(@SW_SHOW) 本帖最后由 afan 于 2022-9-14 14:16 编辑
h111666b 发表于 2022-9-14 13:46
刚刚试了下,不会弄,DPI缩放比例是1.25,就是不起效,老大帮忙下
;缩放比例
DllCall('User32.dll', 'BOOL', 'SetProcessDPIAware')
Opt("GUIResizeMode", 1)
;GUI窗口和按钮
$GUI = GUICreate("测试", 322, 200)
;标签
GUICtrlCreateLabel("系统DPI自适应测试", 87, 61, 230, 15)
;缩放比例
$DPI = 1.25
WinMove($GUI, "", Default, Default, 322 * $DPI, 200 * $DPI)
GUISetState(@SW_SHOW)
Sleep(2000)
已经完美自动适应,感谢老大,还有个小问题,WinMove执行后GUI窗口在屏幕上居中不了,有点偏右,不能自动居中 居中问题已经解决,善用搜索能解决很多问题,论坛窗口居中贴https://www.autoitx.com/forum.php?mod=viewthread&tid=29109&highlight=%BE%D3%D6%D0 afan 发表于 2022-9-14 13:09
在 100% 缩放状态下编写好GUI代码
前面添加 Opt("GUIResizeMode", 1)
获取 DPI 缩放比例
厉害了,我也成功了。用au3写的窗口没问题。但是想适配第三方的程序不会弄
6053377 发表于 2022-9-14 22:15
厉害了,我也成功了。用au3写的窗口没问题。但是想适配第三方的程序不会弄
如果是标准控件,可以试试
#Include <GuiListView.au3>
_GUICtrlListView_SetColumnWidth(获取的listview句柄, 3, 宽度值) afan 发表于 2022-9-14 23:09
如果是标准控件,可以试试
#Include
_GUICtrlListView_SetColumnWidth(获取的listview句柄, 3, 宽度值 ...
谢谢老大
字数补丁
页:
[1]