ControlClick点击鼠标目前位置相关问题

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

wei9133
Posts: 11
Joined: 08 Sep 2014, 13:01

ControlClick点击鼠标目前位置相关问题

Post by wei9133 » 25 Sep 2023, 18:30

状况是这样的,希望可以运用ControlClick点击非激活窗口,所以我先获取了鼠标下的相关资料
并对该窗口进行ControlClick,但是是无效的,可若是将该窗口激活,则可以运作
(多个屏幕所以X&Y可能为负数)

i hope click mouse Current position but Not Active windows
(Multiple screens so X&Y may be negative)

Code: Select all

CoordMode, Mouse, Screen
CoordMode, Pixel, Screen
SetTitleMatchMode, 2

f9::
MouseGetPos, mx, my, mid, mnn,  ;獲取滑鼠游標下的位置,ID,ClassNN
TOOLTIP % MX . "`r`n" . my . "`r`n" . MID . "`r`n" . MNN
ControlClick , X%MX% Y%MY% , ahk_id %MID%, , l, 1, , , NA
RETURN
若先纪录原本激活的窗口,再获取鼠标下的窗口相关消息,并激活鼠标下窗口>发送ControlClick>激活原本窗口
一样无法正常运作,请问有解法吗?

Code: Select all

f10::
SetControlDelay -1  ; 提升可靠性并减少副作用.
WinGetActiveStats, NOW_WIN, Width, Height, X, Y ;獲取目前激活窗口的名稱
WinGet,WIN_ID,ID,%NOW_WIN% ;用目前激活窗口的的名稱去獲取ID
MouseGetPos, mx, my, mid, mnn,  ;獲取滑鼠游標下的位置,ID,ClassNN
WinActivate , ahk_id %MID%, , , ;激活鼠標下窗口
TOOLTIP % MX . "`r`n" . my . "`r`n" . MID . "`r`n" . MNN
ControlClick , X%MX% Y%MY% , ahk_id %MID%, , l, 1, , , NA ;点击鼠標目前位置
WinActivate , ahk_id %WIN_ID%, , , ;激活原本的窗口
RETURN

WKen
Posts: 204
Joined: 21 Feb 2023, 00:01

Re: ControlClick点击鼠标目前位置相关问题

Post by WKen » 26 Sep 2023, 12:46

答案在帮助文档中,CoordMode不包含ControlClick
image.png
image.png (54.83 KiB) Viewed 1312 times
ControlClik使用当前窗口位置,所以不激活窗口无法工作
image.png
image.png (68.06 KiB) Viewed 1312 times
但是你可以通过MouseGetPosControlGetPos来获得正确的坐标,新手不会v1,转换为v2

Code: Select all

#Requires AutoHotkey v2.0
CoordMode("Mouse", "Screen")
CoordMode("Pixel", "Screen")
SetTitleMatchMode(2)

f9::
{ ; V1toV2: Added bracket
MouseGetPos(&mx, &my, &mid, &mnn)  ;獲取滑鼠游標下的位置,ID,ClassNN
ToolTip(MX . "`r`n" . my . "`r`n" . mid . "`r`n" . MNN)
;ControlClick("X" MX " Y" MY, "ahk_id " MID, , "l", 1, , , "NA")

ControlGetPos &cx, &cy, &cw, &ch, mnn, mid   ; 获得控件在窗口中的位置和宽高
ControlClick("X" cx " Y" cy, mid, , "l", 1, , , "NA")   ; cx、cy是控件的左上角位置

RETURN
} ; V1toV2: Added bracket in the end

wei9133
Posts: 11
Joined: 08 Sep 2014, 13:01

Re: ControlClick点击鼠标目前位置相关问题

Post by wei9133 » 28 Sep 2023, 13:40

我想我大概知道问题在哪了,问题出在你说的
ControlClik使用当前窗口位置,所以不激活窗口无法工作
但激活鼠標下的窗口後x & y的位置已經變成窗口的相對位置
而不是非激活狀態下的位置,所以重新再拿一次位置就可以了(MouseGetPos)

結果如下

Code: Select all

f10::
SetControlDelay -1  ; 提升可靠性并减少副作用.
WinGetActiveStats, NOW_WIN, Width, Height, X, Y ;獲取目前執行視窗的名稱
WinGet,WIN_ID,ID,%NOW_WIN% ;用目前正在使用的窗口名稱去獲取ID
MouseGetPos, mx, my, mid, mnn,  ;獲取滑鼠游標下的位置,ID,ClassNN
WinActivate , ahk_id %MID%, , , ;激活鼠標下窗口
MouseGetPos, mx, my, mid, mnn,  
/*
重新獲取激活狀態窗口下的滑鼠游標下的位置,ID,ClassNN
因為上面獲取的位置是相對於原本的窗口,現在獲得的才是激活後的窗口位置
才能給予ControlClick正確的點擊位置。
*/
;TOOLTIP % MX . "`r`n" . my . "`r`n" . MID . "`r`n" . MNN
ControlClick , X%MX% Y%MY% , ahk_id %MID%, , l, 1, , , NA ;點擊鼠標目前位置
WinActivate , ahk_id %WIN_ID%, , , ;喚回原本的窗口
RETURN
[\CODE]

WKen
Posts: 204
Joined: 21 Feb 2023, 00:01

Re: ControlClick点击鼠标目前位置相关问题

Post by WKen » 28 Sep 2023, 19:03

通过计算坐标位置可以不激活鼠标悬停的窗口

wei9133
Posts: 11
Joined: 08 Sep 2014, 13:01

Re: ControlClick点击鼠标目前位置相关问题

Post by wei9133 » 04 Oct 2023, 14:02

FIDM下載暫存新增_test.ahk_-_Notepad++_[Administrator]-2023-10-05-02-51-40.png
FIDM下載暫存新增_test.ahk_-_Notepad++_[Administrator]-2023-10-05-02-51-40.png (8.28 KiB) Viewed 1064 times
你好
我用ControlGetPos获得了控件在窗口的位置
但我应该用什么方法去计算正确的鼠标位置呢?
有办法获得鼠标下的位置在目前控件相对的位置在那?

Code: Select all

CoordMode, Mouse, Screen
CoordMode, Pixel, Screen
SetTitleMatchMode, 2

F9::
MouseGetPos, mx, my, mid, mnn,  ;獲取滑鼠游標下的位置,ID,ClassNN
TOOLTIP % "鼠標下的X位置:" . MX . "`r`n" . "鼠標下的X位置:" . my . "`r`n" . "鼠標下的窗口ID:" . MID . "`r`n" . "鼠標下的ClassNN:" . MNN,100,100,1
ControlGetPos , NOW_MOUSE_X, NOW_MOUSE_Y, , , %MNN% ,ahk_id %mid% ;獲取到游標下控件的左上角
tooltip % "控件的X位置:" . NOW_MOUSE_X . "`r`n" . "控件的Y位置:" . NOW_MOUSE_Y . "`r`n" . "控件的窗口ID:" . MID . "`r`n" . "ClassNN名稱:" . MNN,100,180,2
ControlClick , X%NOW_MOUSE_X% Y%NOW_MOUSE_Y% , ahk_id %MID%, , l, 1, , , NA ;点击鼠標目前位置
RETURN
[\code]

WKen
Posts: 204
Joined: 21 Feb 2023, 00:01

Re: ControlClick点击鼠标目前位置相关问题

Post by WKen » 04 Oct 2023, 16:15

Code: Select all

#Requires AutoHotkey v2.0
CoordMode("Mouse", "Screen")
CoordMode("Pixel", "Screen")
SetTitleMatchMode(2)

f9::
{ ; V1toV2: Added bracket
MouseGetPos(&mx, &my, &mid, &mnn)  ;獲取滑鼠游標下的位置,ID,ClassNN

ControlGetPos &cx, &cy, &cw, &ch, mnn, mid   ; 获得控件在窗口中的位置和宽高
WinGetPos &wx, &wy, , , mid  ; 获得窗口左上角的坐标
rx := mx-wx   ; 鼠标位置减去窗口位置=鼠标在窗口中的实际坐标
ry := my-wy   ; Y轴可能有偏差my-wy-ch(原因:可能是部分不可见)
ToolTip(MX . "`r`n" . my . "`r`n" . mid . "`r`n" . MNN " x" rx " y" ry)
ControlClick("X" rx " Y" ry, mid, , "Left", 1, , , "NA")

RETURN
} ; V1toV2: Added bracket in the end

Post Reply

Return to “请求帮助”