找回密码
 加入
搜索
查看: 906|回复: 7

[AU3基础] 被坐标和像素两概念弄蒙了,坐标移1就是1个像素吗[已解决]

[复制链接]
发表于 2022-6-25 07:43:14 | 显示全部楼层 |阅读模式
本帖最后由 z761003 于 2022-6-25 23:22 编辑

今天在调试一个鼠标拖动同时在屏幕上画个框的程序代码,发现在WIN7里正常,换到分辨率更高的WIN10笔记本电脑上不正常了,鼠标指针所在矩形小,画出来的框却要大些。
更仔细发现AU3里坐标100,好像不是系统的第100个像素。。。


上图,位置1是我鼠标从屏幕左上角拖动后终点位置,底部显示用MouseGetPos测得的位置为100*100; 图中2的位置是我用winmove移动控制面板窗口到坐标100*100的位置,且我用代码画的框右下角也在2的位置。
两者不在同一个位置。
另外我用截图软件截100*100像素的图片,发现也在1的位置

结论:MouseGetPos取到的和鼠标实际位置和截图软件 这三项是匹配的,但和winmove和画线代码是不匹配的,下面是我画线的代码
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <GuiConstants.au3>
#include <WindowsConstants.au3>

        Global $MouseGui = GUICreate("pen", 1, 1, 1, 1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS), _
                        BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
        GUISetBkColor(0xFF0000, $MouseGui)

pen_DrawGuiRgn(2, 2, 100, 100, 0, 0)
Sleep(10000)

Func pen_DrawGuiRgn($BORDER_LF_RI_SIZE, $BORDER_TO_BO_SIZE, $WIDTH, $HEIGHT, $LEFT, $TOP) ;识图笔刷
        Local $W = $BORDER_LF_RI_SIZE * 2 + $WIDTH
        Local $H = $BORDER_TO_BO_SIZE * 2 + $HEIGHT

        _WinAPI_SetWindowPos($MouseGui, 0, $LEFT, $TOP, $LEFT + $W, $TOP + $H, 0)
        ;Sleep(20) 自删
        Local $hREG1 = _WinAPI_CreateRectRgn(0, 0, $W, $H)
        Local $hREG2 = _WinAPI_CreateRectRgn($BORDER_LF_RI_SIZE, $BORDER_TO_BO_SIZE, $BORDER_LF_RI_SIZE + $WIDTH, $BORDER_TO_BO_SIZE + $HEIGHT)
        Local $hREG3 = _WinAPI_CreateRectRgn(0, 0, 0, 0)
        _WinAPI_CombineRgn($hREG3, $hREG1, $hREG2, $RGN_DIFF)
        _WinAPI_DeleteObject($hREG1)
        _WinAPI_DeleteObject($hREG2)
        _WinAPI_SetWindowRgn($MouseGui, $hREG3)
        _WinAPI_DeleteObject($hREG3)
        GUISetState(@SW_SHOW, $MouseGui)
EndFunc
 
 
#CS
$A=WinGetHandle("控制面板")
WinActivate($A)
WinMove($A,"",100,100)
While 1
   Local $ls=MouseGetPos()
   CW($LS[0]&"+"&$LS[1])
WEnd
#CE
代码如何修改才能在WIN10下正常,请明白指点下,谢谢


本帖子中包含更多资源

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

×
发表于 2022-6-25 10:30:56 | 显示全部楼层
目测win10屏幕缩放了150%,DPI
 楼主| 发表于 2022-6-25 14:27:16 | 显示全部楼层
本帖最后由 z761003 于 2022-6-25 14:47 编辑
afan 发表于 2022-6-25 10:30
目测win10屏幕缩放了150%,DPI

好像是有这么回事,,,不知道是不是所有的WIN10都缩放这个比例
发表于 2022-6-25 14:59:06 | 显示全部楼层
z761003 发表于 2022-6-25 14:27
好像是有这么回事,,,不知道是不是所有的WIN10都缩放这个比例

WIN7与WIN10分辨率会一样吗?
 楼主| 发表于 2022-6-25 16:04:06 | 显示全部楼层
chzj589 发表于 2022-6-25 14:59
WIN7与WIN10分辨率会一样吗?

我用的两系统分辨率不一样的
 楼主| 发表于 2022-6-25 16:09:12 | 显示全部楼层
按afan提示的,加了两行代码$WIDTH=$WIDTH*100/150 和 $HEIGHT=$HEIGHT*100/150,即缩了150%后,如果在左上角画,正常了,不过在屏幕中间或右下位置画,还是一样鼠标和框不在同个位置,看来可能是画框的代码不兼容WIN10
发表于 2022-6-25 16:26:19 | 显示全部楼层
z761003 发表于 2022-6-25 16:09
按afan提示的,加了两行代码$WIDTH=$WIDTH*100/150 和 $HEIGHT=$HEIGHT*100/150,即缩了150%后,如果在左上 ...

我提示的是 DPI
你可以禁用DPI感知,这是最简单的,你如果搜索关键字DPI就会有收获
也可以根据缩放比例调整坐标。你上面的测试调整了宽高,却没有调整XY
 楼主| 发表于 2022-6-25 23:21:33 | 显示全部楼层
afan 发表于 2022-6-25 16:26
我提示的是 DPI
你可以禁用DPI感知,这是最简单的,你如果搜索关键字DPI就会有收获
也可以根据缩放比例 ...

谢谢提示,确实是DPI的缩放引起,我已经偺了调整
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 08:50 , Processed in 0.076179 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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