Button 自动热键-在窗口中单击某个按钮时触发脚本

Button 自动热键-在窗口中单击某个按钮时触发脚本,button,handle,autohotkey,buttonclick,hwnd,Button,Handle,Autohotkey,Buttonclick,Hwnd,我知道实际的按钮手柄。我想检查的是,该按钮是否被单击,以及是否会触发自动热键脚本 提前谢谢 您是否尝试过使用ImgSearch“动态”查找按钮的XY坐标,然后执行if(MouseX=>ImageX和MouseX=ImageX和MouseX=ImageY和MouseY=

我知道实际的按钮手柄。我想检查的是,该按钮是否被单击,以及是否会触发自动热键脚本


提前谢谢

您是否尝试过使用ImgSearch“动态”查找按钮的XY坐标,然后执行if(MouseX=>ImageX和MouseX= 伪代码(未测试):
Settimer,FindButton,1000
Settitlematchmode,2
返回
FindButton:
IfWinActive,您的AppWindowTitle
ImageSearch,ImageX,ImageY,0,0,A_屏幕宽度,A_屏幕高度,C:\ButtonImage.bmp
返回
#IfWinActive,您的AppWindowTitle
~LButton::
MouseGetPos,MouseX,MouseY
if(MouseX=>ImageX和MouseX=ImageY和MouseY=
你说得对。你可以用它代替ImgSearch

ControlGetPos, x, y, w, h, button1, ahk_class CalcFrame
MsgBox, %x% %y% %w% %h%
return
因此,您必须在每次鼠标单击后运行ControlGetPos(仅当目标窗口标题处于活动状态时),然后将实际鼠标坐标与按钮单击区域进行比较

以下是计算器的一些代码:

#SingleInstance Force
#Persistent

#IfWinActive, ahk_class CalcFrame
    ~LButton::
    MouseGetPos, MouseX, MouseY
    ControlGetPos, ButtonX, ButtonY, ButtonW, ButtonH, button1, ahk_class CalcFrame
    ButtonX2:=ButtonX + ButtonW
    ButtonY2:=ButtonY + ButtonH
    if MouseX between %ButtonX% and %ButtonX2%
    {
        if MouseY between %ButtonY% and %ButtonY2%
        {
            MsgBox, You pressed the MC button
        }
    }
    Return
#IfWinActive

这其实不是个坏主意。然而,我宁愿使用该按钮的手柄id,因为它更安全,并且不依赖于坐标(在其他PC上可能会发生变化)。我理解,可能值得寻找id解决方案。我厌倦了用定时器“移动”按钮(不同的屏幕、屏幕上的窗口移动等)来解决问题。
#SingleInstance Force
#Persistent

#IfWinActive, ahk_class CalcFrame
    ~LButton::
    MouseGetPos, MouseX, MouseY
    ControlGetPos, ButtonX, ButtonY, ButtonW, ButtonH, button1, ahk_class CalcFrame
    ButtonX2:=ButtonX + ButtonW
    ButtonY2:=ButtonY + ButtonH
    if MouseX between %ButtonX% and %ButtonX2%
    {
        if MouseY between %ButtonY% and %ButtonY2%
        {
            MsgBox, You pressed the MC button
        }
    }
    Return
#IfWinActive