Что нового

Вопрос по чекбоксам

S

sacredboy

Гость
Ребята подскажите пожалуйста почему здесь снятие чекбоксов срабатывает:



Код:
ControlClick ("Installation of Mail.Ru Agent", "", "Button5")
ControlClick ("Installation of Mail.Ru Agent", "", "Button6")
ControlClick ("Installation of Mail.Ru Agent", "", "Button7")
ControlClick ("Installation of Mail.Ru Agent", "", "Button10")


а здесь не срабатывает:



Код:
ControlClick ("Installation of Mail.Ru Agent", "", "Button1")
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
P.S
А вместо ControlClick лучше использовать ControlCommand для отметки птички.
 
Автор
S

sacredboy

Гость
CreatoR сказал(а):
Ну видимо там другой ID (ClassNameNN) у кнопки. Что показывает Au3Info Tool?



Вроде все верно.

Поправьте пожалуйста если я не туда смотрю.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
ControlClick ("Installation of Mail.Ru Agent", "", "Button1")

Не хорошо оставлять пустым поле видимого текста. Могут быть конфликты. В данном случае можно попробовать так:
Код:
ControlClick ("Installation of Mail.Ru Agent", "Mail.Ru Agent successfully installed!", "[CLASS:Button; INSTANCE:1]")

И еще я думаю может вы WinWait не используете?(Точно ни о чем судить не могу, т.к. нет кода)

И что то я немного не понимаю. Почему у тебя 2 разные установки Мейл Агента?!! Может просто проблема в языках??!!
 
Автор
S

sacredboy

Гость
Medic84 сказал(а):
В данном случае можно попробовать так:
Код:
ControlClick ("Installation of Mail.Ru Agent", "Mail.Ru Agent successfully installed!", "[CLASS:Button; INSTANCE:1]")

И еще я думаю может вы WinWait не используете?(Точно ни о чем судить не могу, т.к. нет кода)

Сделал так:

Код:
WinWaitActive ("Installation of Mail.Ru Agent")
ControlClick ("Installation of Mail.Ru Agent", "Mail.Ru Agent successfully installed!", "[CLASS:Button; INSTANCE:1]")


но так тоже не работает.

Medic84 сказал(а):
И что то я немного не понимаю. Почему у тебя 2 разные установки Мейл Агента?!! Может просто проблема в языках??!!

Дело в том что при запуске exe'шника окно интерфейс окна на русском языке, но при переключении радиобаттона на установку на английском языке интерфейс окна установки переходит на вид с английским языком.

Вот полный текст скрипта:

Код:
Run ("E:\My Soft\magentsetup.exe")
Sleep (1000)
WinWaitActive ("Установка Mail.Ru Агента")
Sleep (1000)
ControlCommand ("Установка Mail.Ru Агента", "", "English", "Check")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Next >")
Sleep (1000)
ControlSetText ("Installation of Mail.Ru Agent", "", "Edit1", @ProgramFilesDir & "\Mail.Ru Agent 5.5")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button5")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button6")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button7")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button10")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Next >")
Sleep (1000)
WinWaitActive ("Installation of Mail.Ru Agent")
ControlClick ("Installation of Mail.Ru Agent", "Mail.Ru Agent successfully installed!", "[CLASS:Button; INSTANCE:1]")
ControlClick ("Installation of Mail.Ru Agent", "", "End")


Вот последние две строки и не работают.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А если зделать так:

Код:
$hWnd = WinWaitActive ("Установка Mail.Ru Агента")


И дальше работать с переменной $hWnd.
 
Автор
S

sacredboy

Гость
Решилось так:

Код:
Run ("E:\My Soft\magentsetup.exe")
Sleep (1000)
WinWaitActive ("Установка Mail.Ru Агента")
Sleep (1000)
ControlCommand ("Установка Mail.Ru Агента", "", "English", "Check")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Next >")
Sleep (1000)
ControlSetText ("Installation of Mail.Ru Agent", "", "Edit1", @ProgramFilesDir & "\Mail.Ru Agent 5.5")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button5")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button6")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button7")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Button10")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "Next >")
Sleep (1000)
WinWaitActive ("Installation of Mail.Ru Agent")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "Mail.Ru Agent successfully installed!", "[CLASS:Button; INSTANCE:1]")
Sleep (1000)
ControlClick ("Installation of Mail.Ru Agent", "", "End")
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
sacredboy
На будующее. У нас есть специальный код [autoit][/autoit] называется... В него свой код нужно заключать... :-X
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sacredboy « Ответ #7, Отправлен: Сегодня в 14:03:50 »
Решение не очень практичное, на (очень?) медленных машинах или при зависании может и не сработать (я уже не говорю о лишних задержках).

Я бы сделал так:

Код:
Opt("WinWaitDelay", 0)

;~ Run("E:\My Soft\magentsetup.exe")
Run(@ScriptDir & "\magentsetup.exe")

If WinWait("Mail.Ru Agent", "This version of the Mail.Ru Agent is already installed", 2) Then
	ControlClick("Mail.Ru Agent", "This version of the Mail.Ru Agent is already installed", "Button2")
	MsgBox(48, 'Error', 'Sorry, Mail.Ru Agent already installed.' & @CRLF & @CRLF & 'OK ==> EXIT')
	Exit
EndIf

_WinWaitVisible("[REGEXPTITLE:.*Mail.Ru.*]", "English")
ControlCommand("Установка Mail.Ru Агента", "Выберите язык установки", "English", "Check")

_WinWaitVisible("Installation of Mail.Ru Agent")
WinSetOnTop("Installation of Mail.Ru Agent", "", 1)

ControlClick("Installation of Mail.Ru Agent", "Select installation language", "Next >")
_WinWaitVisible("Installation of Mail.Ru Agent", "Layout")

ControlSetText("Installation of Mail.Ru Agent", "", "Edit1", @ProgramFilesDir & "\Mail.Ru Agent 5.5")
ControlCommand("Installation of Mail.Ru Agent", "", "Button5", "UnCheck")
ControlCommand("Installation of Mail.Ru Agent", "", "Button6", "UnCheck")
ControlCommand("Installation of Mail.Ru Agent", "", "Button7", "UnCheck")
ControlCommand("Installation of Mail.Ru Agent", "", "Button10", "UnCheck")
ControlClick("Installation of Mail.Ru Agent", "", "Next >")

_WinWaitVisible("Installation of Mail.Ru Agent", "Start Mail.Ru Agent")
ControlCommand("Installation of Mail.Ru Agent", "Start Mail.Ru Agent", "Button1", "UnCheck")
ControlClick("Installation of Mail.Ru Agent", "", "End")

Func _WinWaitVisible($sTitle, $sText="")
	While Not BitAND(WinGetState($sTitle, $sText), 2)
		Sleep(10)
	WEnd
	
	Return WinExists($sTitle, $sText)
EndFunc
 
Автор
S

sacredboy

Гость
Спасибо. Учту. Просто я только начинаю и пока писать усложненные скрипты не умею. Например вот этот кусок:

Код:
Func _WinWaitVisible($sTitle, $sText="")
While Not BitAND(WinGetState($sTitle, $sText), 2)
Sleep(10)
WEnd

Return WinExists($sTitle, $sText)
EndFunc


мне вообще непонятен.

Попутно такой вопрос: как быть с такими чекбоксами? Какой функцией их снимать? Вроде и чекбоксы но AutoIT Window Info определяет их как SysTreeView32.



Куда ни наведи везде INSTANCE один и тот же SysTreeView32.

И как раскрыть деревья внутри которых такие же чекбоксы?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Эта функция ожидает появления окна с указанным заголовком ($sTitle), точнее когда оно станет видимым. Собственно последняя строчка для меня тоже не понятна, можешь ее смело убрать или заменить на Return 1.

Код:
Func _WinWaitVisible($sTitle, $sText = "")
    While Not BitAND(WinGetState($sTitle, $sText), 2)
        Sleep(10)
    WEnd
EndFunc   ;==>_WinWaitVisible
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
sacredboy сказал(а):
Куда ни наведи везде INSTANCE один и тот же SysTreeView32.И как раскрыть деревья внутри которых такие же чекбоксы?
Встречался с такими чекбоксами. Кажется снять их можно только через клавиши TAB и SPACE

Код:
Send("{TAB}")
Send("{SPACE}")
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
sacredboy сказал(а):
Попутно такой вопрос: как быть с такими чекбоксами? Какой функцией их снимать? Вроде и чекбоксы но AutoIT Window Info определяет их как SysTreeView32.

Куда ни наведи везде INSTANCE один и тот же SysTreeView32.

И как раскрыть деревья внутри которых такие же чекбоксы?

Код:
#Include <GUITreeView.au3>
#Include <WindowsConstants.au3>

GUI()

; Смотри только на этот кусок кода

; Получаем хэндл окна и дальше работаеи только с ним, а не с названием окна
$hWnd = WinGetHandle('My Title')
; Получаем хэндл списка TreeView
$hList = ControlGetHandle($hWnd, '', '[CLASS:SysTreeView32; INSTANCE:1]')
; Получаем хэндл для элемента списка, например "Item 2"
$hItem = _GUICtrlTreeView_FindItem($hList, 'Item 2')
; "Зачекиваем" этот элемент
_GUICtrlTreeView_SetChecked($hList, $hItem, True)
; Получаем хэндл для элемента списка, например "Item 3"
$hItem = _GUICtrlTreeView_FindItem($hList, 'Item 3')
; Разворачиваем этот элемент, если этого не требуется, то следующую строку можно пропустить
; Для "зачекивания" субэлемента нет необходимости разворачивать вышестоящие элементы, здесь это только для наглядности
_GUICtrlTreeView_Expand($hList, $hItem, True)
; Получаем хэндл для субэлемента, например "Option 3", элемента "Item 3"
$hItem = _GUICtrlTreeView_FindItem($hList, 'Option 3', False, $hItem)
; "Зачекиваем" этот субэлемент
_GUICtrlTreeView_SetChecked($hList, $hItem, True)

Do
Until GUIGetMsg() = -3

Func GUI()
    GUICreate('My Title', 400, 300)
    $hTreeView = GUICtrlCreateTreeView(5, 5, 390, 290, BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    GUISetState()
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $i = 1 To 4
        $hItem = _GUICtrlTreeView_Add($hTreeView, 0, 'Item ' & $i)
        For $j = 1 To 3
            _GUICtrlTreeView_AddChild($hTreeView, $hItem, 'Option ' & $j)
        Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)
    GUISetState()
EndFunc   ;==>GUI
 
Автор
S

sacredboy

Гость
Re: Вопрос по чекбоксам

Yashied, видимо я что то упустил. Посмотри пожалуйста.



Что то не нравится в строчке:

Код:
GUI ()
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
sacredboy
А ты точно весь текст скопировал? Мне кажется что ты забыл про функцию GUI() :-X
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Вопрос по чекбоксам

Medic84 сказал(а):
sacredboy
А ты точно весь текст скопировал? Мне кажется что ты забыл про функцию GUI() :-X

Нет, Medic84, посмотри на скриншот (название скрипта и номер строки с ошибкой). Он просто взял и поставил весь текст ЦЕЛИКОМ в свой код!

:smile:

sacredboy сказал(а):
Yashied, видимо я что то упустил. Посмотри пожалуйста.

Я предлагаю тебе немного разобраться в примере, который я тебе дал (я его специально снабдил комментариями). Это не готовый скрипт для тебя, это всего лишь наглядный пример.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Yashied сказал(а):
Нет, Medic84, посмотри на скриншот (название скрипта и номер строки с ошибкой). Он просто взял и поставил весь текст ЦЕЛИКОМ в свой код!
Ну да или так.
 

magold

Новичок
Сообщения
2
Репутация
0
[Автоматизация] Re: Вопрос по чекбоксам

Вопрос: как снимать чекбоксы у элемента класса: TNewCheckListBox
Вышеописанное решение работает частично: получаю хендл окна, хендл листбокса, а хендл итема не получаю, говорит что 0.
100% я не так понял пример, наверно поиск элемента "item N", работает только для данного примера, а в моем случае элементы называются по другому....
 

magold

Новичок
Сообщения
2
Репутация
0
Еще раз перечитал тему, снял с помощью TAB и SPACE, но все же хотелось бы узнать как получить доступ к элементам массива TNewCheckListBox.
 
Верх