Как проверить, существует ли кнопка в окне с AutoHotkey? - PullRequest
3 голосов
/ 21 декабря 2011

В моем случае бывают случаи, когда определенная кнопка будет существовать, а не существовать.

Есть ли способ проверить, существует ли определенная кнопка в окне с помощью AutoHotkey?

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

Если вы используете ControlGet с командой, а элемент управления не существует, то ErrorLevel будет установлен в 1.

Вы можете использовать ControlGet , чтобы получить дескриптор окна (HWND) элемента управления. Если элемент управления существует, дескриптор окна будет помещен в вашу выходную переменную, а ErrorLevel будет установлен в 0, в противном случае выходной переменный будет пустым, а ErrorLevel будет 1.

В приведенном ниже примере первые две строки получают дескриптор окна для кнопки «ОК» на экране «О программе» в блокноте (для работы он, конечно, должен быть показан экран «около») и отображают результаты в MsgBox. ClassNN кнопки Ok - Button1.

Вторые две строки одного и того же, но для элемента управления с ClassNN из Button2, который не существует.

ControlGet, Handle, Hwnd,, Button1, About Notepad ahk_class #32770
MsgBox Handle: %Handle%`n`nError: %ErrorLevel%

ControlGet, Handle, Hwnd,, Button2, About Notepad ahk_class #32770
MsgBox Handle: %Handle%`n`nError: %ErrorLevel%
0 голосов
/ 26 января 2019

Вот пример кода из notepadplusplus_toogle_find_window.ahk с использованием ControlGet:

; Button1 is the class name for the title bar and close button of the results pane when docked
ControlGet, OutputVar, Visible,, Button1, Notepad++
if ErrorLevel = 0
{
    If OutputVar > 0
    {
        ; Found it docked
        Open := 1
        ; Get the size and coordinates of the title bar and button
        ControlGetPos, X, Y, Width, Height, Button1
        ; Set the coordinates of the close button
        X := Width - 9
        Y := 5
        ; Send a click
        ControlClick, Button1,,,,, NA x%X% y%Y%
    }
}
...