Что нового

[Элементы GUI] Как обратиться к элементу GUI, входящему в группу

Tapok

Новичок
Сообщения
204
Репутация
0
Есть окно (0.png), в котором кнопки в группе (1.png). Как нажать конкретную кнопку (как узнать ее имя или ID)?

Данные группы приведены на 2.png

InqSoft Window Scanner на кнопку "Создать вопрос" (белый загнутый лист) показал следующее: (3.png)
 

Вложения

  • 1.png
    1.png
    1.1 КБ · Просмотры: 15
  • 2.png
    2.png
    21 КБ · Просмотры: 33
  • 0.png
    0.png
    21.1 КБ · Просмотры: 31
  • 3.png
    3.png
    23.6 КБ · Просмотры: 33

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Tapok,
Смотрите в справке функции _GUICtrlToolbar_*.
 

forc1k

Новичок
Сообщения
42
Репутация
1
Код:
_WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button1))
- Возвращает идентификатор указанного элемента управления
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
GUIStartGroup()
$Button1 = GUICtrlCreateButton("Button1", 216, 112, 75, 25)
$Button2 = GUICtrlCreateButton("Button2", 288, 112, 75, 25)
$Button3 = GUICtrlCreateButton("Button3", 216, 136, 75, 25)
$Button4 = GUICtrlCreateButton("Button4", 288, 136, 75, 25)
$Button5 = GUICtrlCreateButton("Button5", 216, 160, 75, 25)
$Button6 = GUICtrlCreateButton("Button6", 288, 160, 75, 25)
GUIStartGroup()


GUISetState(@SW_SHOW)
Local $hWnd = WinWait("[CLASS:AutoIt v3 GUI]", "", 10)
$test = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button1))
$test2 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button2))
$test3 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button3))
$test4 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button4))
$test5 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button5))
$test6 = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle($button6))
ControlClick($hWnd, "", $test)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $button1
			MsgBox(262144, "test", "Готово: " & "Вы велиполепны")
			ControlClick($hWnd, "", $test2)
		Case $button2
			MsgBox(262144, "test", "Готово: " & "Все еще неплохо")
	EndSwitch
WEnd

Форма с кнопками. С помощью
Код:
_WinAPI_GetDlgCtrlID
получаем идентификаторы для каждой кнопки и помещаем их в переменные.
Код:
ControlClick($hWnd, "", $test)
- нажимаем нужную кнопку.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Не совсем понял приведенный пример :-\
В нем нет группы, есть 6 кнопок в явном виде, есть их Instance, можно прямо нажимать на любую кнопку.
У меня же группа и напрямую о кнопках ничего не видно... :scratch:
Если не сложно, пример как у меня, с группой...
 

forc1k

Новичок
Сообщения
42
Репутация
1
Tapok сказал(а):
У меня же группа и напрямую о кнопках ничего не видно... :scratch:
Если не сложно, пример как у меня, с группой...
По очереди нажимает каждую кнопку из тулбара.
Код:
#include <GuiToolbar.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

$Debug_TB = False ; Проверяет ClassName передаваемый в функции. Установите True и используйте дескриптор от другого элемента, чтобы увидеть как это работает

_Main()

Func _Main()
    Local $hGUI, $hToolbar
    Local Enum $idNew = 1000, $idOpen, $idSave, $idHelp

    ; Создаёт GUI
    $hGUI = GUICreate(StringTrimRight(@ScriptName, 4), 400, 300)
    $hToolbar = _GUICtrlToolbar_Create($hGUI)
    GUISetState()

    ; Добавляет стандартный системный bitmaps
    _GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)

    ; Добавляет кнопки
    _GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_FILENEW)
    _GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
    _GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILESAVE)
    _GUICtrlToolbar_AddButtonSep($hToolbar)
    _GUICtrlToolbar_AddButton($hToolbar, $idHelp, $STD_HELP)
	Sleep(1000)
	_GUICtrlToolbar_ClickButton($hToolbar, $idSave)
	Sleep(1000)
	_GUICtrlToolbar_ClickButton($hToolbar, $idNew)
	Sleep(1000)
	_GUICtrlToolbar_ClickButton($hToolbar, $idOpen)
	Sleep(1000)
	_GUICtrlToolbar_ClickButton($hToolbar, $idHelp)
    ; Цикл выполняется, пока окно не будет закрыто
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

EndFunc   ;==>_Main
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
И все-таки я не понял, если я не сам создаю GUI, как мне узнать $hToolbar в коде выше?
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
спасибо!

Если не сложно, приведите код, нажимающий кнопку "Отправить письма в очереди" в почтовой программе (прикреплен скрин) Должно появится сообщение "Нет писем, подготовленных к отправке". Алгоритм, по-моему, такой же, как в моем примере должен быть.
 

Вложения

  • bat.png
    bat.png
    16.3 КБ · Просмотры: 12

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tapok
Панели - они бывают разные. То, что подходит для одних - не подходит для других. Некоторые элементы только выглядят, как панели, но на самом деле таковыми не являются.
Вам удалось определить CLASS и INSTANCE панели Конструктора тестов? Если нет, то пример для панели The Bat вам не поможет. Если да, то зачем делать пример для панели The Bat, когда можно попробовать сделать сразу для панели Конструктора.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Скриншоты параметров окна "Тест1" и интересующих кнопок во вложении, только что с ними делать-не знаю :'(
 

Вложения

  • Окно кнопок.png
    Окно кнопок.png
    20.8 КБ · Просмотры: 16
  • Окно Тест1.png
    Окно Тест1.png
    20.9 КБ · Просмотры: 13

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tapok
интересующих кнопок
Кнопки и панели - это элементы. Вы показываете вкладку окна, а нужна вкладка Control. А ещё лучше - вся информация с вкладки Summary. И можно добавить информацию wInformer (правый клик на любом пункте дерева - "Copy All Info").

Можно этот Конструктор где-нибудь скачать посмотреть?
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Прикрепил более подробные файлы об окне и о группе кнопок.
 

Вложения

  • All.zip
    135.7 КБ · Просмотры: 7

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tapok
Не пойму, откуда там Static :stars:
Покажите область, которую подсвечивает wInformer при наведении курсора на первую кнопку (белый листок). Снимок выделенного элемента можно сделать нажатием Win+Ctrl.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Прикрепил
 

Вложения

  • Screen 001.png
    Screen 001.png
    32.2 КБ · Просмотры: 21
  • Screenshot.png
    Screenshot.png
    247 байт · Просмотры: 114
  • Screenshot-2.png
    Screenshot-2.png
    16.5 КБ · Просмотры: 14

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Tapok, ваши кнопки имеют такую же природу, что и кнопки редактора SciTE. Научитесь работать с одним, поймете и принцип работы с другим. В данном случае вы даже выделить элемент не можете. Скачайте Control Viewer и, если Toolbar не выделяется напрямую, пощелкайте по списку элементов, который находится внизу окна программы. Искомый элемент скорее всего имеет класс ToolbarWindow32.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Tapok
На первом скриншоте wInformer отображает элемент с классом TCaptureForm. Вероятно, это какая-то программа для снятия скриншотов, но никак не окно Конструктора. На третьем скриншоте - это вообще информация рабочего стола.

Так. Давайте попробуем ещё раз.
Закройте все ненужные программы. Запустите wInformer.exe. Нажмите кнопку START. Наведите курсор мыши на кнопку с белым листом. Должна появиться красная рамка либо вокруг самой кнопки, либо вокруг панели с этой кнопкой, либо вокруг рамки "Список вопросов", либо вокруг окна "Тест1". Во всплывающей подсказке в Control Info в поле Class должно быть что-то связанное с Toolbar, Panel, Button или даже Static. И вот теперь, не сдвигая курсор с кнопки, нажмите Win+Shift. Появится окно wInformer, в дереве которого будет информация из тултипа. Вот эту информацию и нужно показать.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Все решилось гораздо проще, wInformer выдаёт более детальную информацию, конкретно по кнопке "Создать вопрос" (белый лист) выдал
Код:
"ID:1"
этого оказалось достаточно для нажатия:

Код:
ControlClick("Конструктор тестов", '', '[ID:1]', "main", 1) ; "Создать вопрос"


У соседней кнопки "Добавить вопрос"
Код:
"ID:2"
тоже нажимается без проблем.

Выходит, что есть смысл сменить "Autoit v3 Window Info" на "wInformer".

Всем большое спасибо за помощь! Дело движется вперед! :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Tapok сказал(а):
Выходит, что есть смысл сменить "Autoit v3 Window Info" на "wInformer".
Замечательный вывод (сарказм). :smile:
 
Верх