AutoHotkey-如何单击ClassNN更改的控件?

时间:2018-07-31 18:58:33

标签: winforms autohotkey

我正在尝试使程序中的工作流程自动化,并且遇到了障碍。我通常使用ControlClick单击按钮,但是对于此特定控件,每次重新加载程序时ClassNN都会更改。我尝试使用控件文本,但是窗口中有两个控件具有相同的文本,这似乎阻止了命令的执行。

还有其他我可以尝试使ControlClick工作的东西吗?还是我可以采取另一种方法?我不想单击(x,y)坐标,因为控件可能会移动,具体取决于用户的分辨率和任务窗格的大小。

我正在使用的命令是:

ControlClick, checkButton3, Bystronic BySoft 7

这适用于其他相邻按钮,因为它们具有唯一的控制文本。

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

WinGet, List, ControlList, Bystronic BySoft 7
Loop, Parse, List, `n
{
    If InStr(A_LoopField, "WindowsForms10.Window") ; use only the part of the name that is always shown in WS
    {
        ControlGetText, Text, %A_LoopField%, Bystronic BySoft 7
        If InStr(Text, "checkButton3")
        {
            ControlGetPos, XX, YY, WW, HH, %A_LoopField%, Bystronic BySoft 7
            If (XX < ... && YY... &&...) ; relative position, you don't have to define it exactly)
            {
                ControlClick, %A_LoopField%, Bystronic BySoft 7
                    break
            }       
        }
    }
}

编辑:

如果始终按相同的顺序检查控件,则可以尝试以下操作:

Index := ""
WinGet, List, ControlList, Bystronic BySoft 7
Loop, Parse, List, `n
{
    If InStr(A_LoopField, "WindowsForms10.Window") ; use only the part of the name that is always shown in WS
    {
        ControlGetText, Text, %A_LoopField%, Bystronic BySoft 7
        If (Text = "checkButton3")
        {
            Index++
            If (Index = 2) ; try also "If (Index = 3)" and "If (Index = 4)" until  you find the right one. If "If (Index = 1)" is the right one you don't need the variable Index.
            {
                ControlClick, %A_LoopField%, Bystronic BySoft 7
                    break
            }       
        }
    }
}

答案 1 :(得分:0)

我在一个应用程序中遇到同样的问题。两个按钮交换ClassNN。

称它们为按钮%Up%和%Down%。它们是Button7或Button9,可以是WindowsForms 10.xxx.yyy.zzz 1234或WindowsForms 10.xxx.yyy.zzz 1235。

我应该注意,两个按钮始终是以上两个值之一。应用程序中的所有其他控件保持不变。应用程序运行后,%Up%和%Down%按钮不会更改。

在应用程序启动时,我使用WindowsForms 10.xxx.yyy.zzz 1234的ControlGetPos和WindowsForms 10.xxx.yyy.zzz 1235的另一个ControlGetPos寻找两个按钮的位置。

%Up%按钮位于屏幕上的%Down%按钮上方,因此屏幕位置较高的ControlGetPos变为%Up%,另一个变为%Down%

ControlClick,%Up%,Wintitle。 %Up%是WindowsForms 10.xxx.yyy.zzz 123吗?屏幕较高位置的位置

无论屏幕分辨率如何,按钮相对于其他按钮的位置都决定了将被标记的内容。