В утилите Inspect в меню Action выбор пункта LegacyIAccessible.DoDefaultAction тоже не срабатывает?А это не срабатывает
А если в меню Action выбрать пункт Invoke.Invoke - сработает?
В утилите Inspect в меню Action выбор пункта LegacyIAccessible.DoDefaultAction тоже не срабатывает?А это не срабатывает
LegacyIAccessible.DoDefaultAction не срабатывает, а вот Toggle.Toggle срабатываетВ утилите Inspect в меню Action выбор пункта LegacyIAccessible.DoDefaultAction тоже не срабатывает?
А если в меню Action выбрать пункт Invoke.Invoke - сработает?
Да, увидел. Шаблон Invoke отсутствует. Вероятно, поэтому DefaultAction не срабатывает.Toggle.Toggle срабатывает
How found: Selected from tree...
Name: "Деталь"
ControlType: UIA_MenuItemControlTypeId (0xC35B)
LocalizedControlType: "элемент меню"
IsEnabled: true
IsOffscreen: true
IsKeyboardFocusable: false
HasKeyboardFocus: false
AcceleratorKey: ""
AccessKey: ""
ProcessId: 18808
RuntimeId: [7.4978.24BC5BE]
AutomationId: "|ItemKompas.m3d57600"
FrameworkId: "WPF"
ClassName: "MenuItem"
IsControlElement: true
IsContentElement: true
ProviderDescription: "[pid:18808,providerId:0x0 Main(parent link):Unidentified Provider (managed:MS.Internal.Automation.ElementProxy, PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)]"
IsPassword: false
ItemStatus: ""
ItemType: ""
IsRequiredForForm: false
HelpText: ""
ClickablePoint: {x:-2147483648 y:-2147483648}
Orientation: 0
IsAnnotationPatternAvailable: false
IsDragPatternAvailable: false
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: true
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: false
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: false
IsSpreadsheetPatternAvailable: false
IsStylesPatternAvailable: false
IsSynchronizedInputPatternAvailable: true
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: false
IsTextEditPatternAvailable: false
IsTextPatternAvailable: false
IsTextPattern2Available: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: false
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
IsCustomNavigationPatternAvailable: false
FirstChild: "" текст
LastChild: "" текст
Next: "Сборка" элемент меню
Previous: "" разделитель
Other Props: Object has no additional properties
Children: "" текст
"" текст
"" текст
"" текст
"" текст
"Деталь" текст
"" текст
Ancestors: "" область
"" окно
[ No Parent ]
How found: Mouse move (35,138)
hwnd=0x00530260 64bit class="HwndWrapper[DefaultDomain;;02f2be48-4901-4030-b587-df39a9d72247]" style=0x96000000 ex=0x8080088
Name: "Деталь"
ControlType: UIA_MenuItemControlTypeId (0xC35B)
LocalizedControlType: "элемент меню"
BoundingRectangle: {l:27 t:124 r:205 b:148}
IsEnabled: true
IsOffscreen: false
IsKeyboardFocusable: true
HasKeyboardFocus: true
AcceleratorKey: ""
AccessKey: ""
ProcessId: 18808
RuntimeId: [7.4978.24BC5BE]
AutomationId: "|ItemKompas.m3d57600"
FrameworkId: "WPF"
ClassName: "MenuItem"
IsControlElement: true
IsContentElement: true
ProviderDescription: "[pid:18808,providerId:0x0 Main(parent link):Unidentified Provider (managed:MS.Internal.Automation.ElementProxy, PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)]"
IsPassword: false
ItemStatus: ""
ItemType: ""
IsRequiredForForm: false
HelpText: ""
ClickablePoint: {x:116 y:136}
Orientation: 0
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: "Выполнить"
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "Деталь"
LegacyIAccessible.Role: элемент меню (0xC)
LegacyIAccessible.State: с фокусом ввода,фокусируемое (0x100004)
LegacyIAccessible.Value: ""
IsAnnotationPatternAvailable: false
IsDragPatternAvailable: false
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: true
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: false
IsSpreadsheetPatternAvailable: false
IsStylesPatternAvailable: false
IsSynchronizedInputPatternAvailable: true
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: false
IsTextEditPatternAvailable: false
IsTextPatternAvailable: false
IsTextPattern2Available: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: false
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
IsCustomNavigationPatternAvailable: false
FirstChild: "" текст
LastChild: "" текст
Next: "Сборка" элемент меню
Previous: "" разделитель
Other Props: Object has no additional properties
Children: "" текст
"" текст
"" текст
"" текст
"" текст
"Деталь" текст
"" текст
Ancestors: "" область
"" окно
"КОМПАС-3D v22 Beta (releases/v22 build 1221)" окно
"Рабочий стол 1" панель
[ No Parent ]
$oElem = _UIA_GetControlTypeElement($oParent, "UIA_MenuItemControlTypeId", "Деталь")
; или так, если идентификатор m3d57600 уникальный и не меняется при каждом запуске
; $oElem = _UIA_GetControlTypeElement($oParent, "UIA_MenuItemControlTypeId", "|ItemKompas.m3d57600", "AutomationId")
Func _UIA_ElementToggle($oElement)
If Not IsObj($oElement) Then Return SetError(1, __UIA_ConsoleWriteError("_UIA_ElementToggle : параметр не является объектом"), 0)
Local $pToggle, $oToggle
$oElement.GetCurrentPattern($UIA_TogglePatternId, $pToggle)
$oToggle = ObjCreateInterface($pToggle, $sIID_IUIAutomationTogglePattern, $dtagIUIAutomationTogglePattern)
If Not IsObj($oToggle) Then Return SetError(2, __UIA_ConsoleWriteError("_UIA_ElementToggle : ошибка создания объекта на основе шаблона Toggle"), 0)
Local $iErrorCode = $oToggle.Toggle()
If $iErrorCode Then Return SetError(3, __UIA_ConsoleWriteError("_UIA_ElementToggle : ошибка выполнения метода (0x" & Hex($iErrorCode) & ")"), 0)
Return 1
EndFunc ; _UIA_ElementToggle
Неплохометод Toggle
$hWnd = WinWait("Viber", "", 3)
WinActivate("Viber")
Sleep(1111)
If Not $hWnd Then Exit MsgBox(0x40000, "UIAutomate", "Окно V не найдено", 3)
$oParent = _UIA_GetElementFromHandle($hWnd)
$oPanelPa = _UIA_WaitControlTypeElement($oParent, "StackView_QMLTYPE_231", "ClassName")
$oElement = _UIA_GetControlTypeElement($oPanelPa, "SplitView_QMLTYPE_601_QML_685", "ClassName")
_UIA_ElementMouseClick($oElement)
_UIA_ElementSetFocus($oElement)
_UIA_ElementMouseClick($oElement)
MouseWheel("up",1000)
How found: Mouse move (1148,487)
hwnd=0x00030106 32bit class="Qt5153QWindowOwnDCIcon" style=0x96CF0000 ex=0x100
RuntimeId: "[42.196870.2.-2147483641]"
BoundingRectangle: {l:460 t:211 r:1435 b:837}
ProcessId: 1752
ControlType: UIA_PaneControlTypeId (0xC371)
LocalizedControlType: "панель"
Name: ""
AccessKey: ""
HasKeyboardFocus: false
IsKeyboardFocusable: false
IsEnabled: true
AutomationId: ""
ClassName: "SplitView_QMLTYPE_601_QML_685"
HelpText: ""
IsControlElement: true
IsContentElement: true
IsPassword: false
IsOffscreen: false
FrameworkId: "Qt"
ProviderDescription: "[pid:1752,hwnd:0x0 Main(parent link):Unidentified Provider (unmanaged:qwindows.dll)]"
Value.IsReadOnly: false
Value.Value: ""
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: "Нажать"
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: ""
LegacyIAccessible.Role: панель (0x10)
LegacyIAccessible.State: обычный (0x0)
LegacyIAccessible.Value: ""
IsDockPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: true
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollPatternAvailable: false
IsScrollItemPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsTablePatternAvailable: false
IsTableItemPatternAvailable: false
IsTextPatternAvailable: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsValuePatternAvailable: true
IsWindowPatternAvailable: false
IsItemContainerPatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsSynchronizedInputPatternAvailable: false
FirstChild: [null]
LastChild: [null]
Next: [null]
Previous: [null]
Other Props: Object has no additional properties
Children: Container has no children
Ancestors: "" особый
"Viber" окно
"Рабочий стол" панель
[ No Parent ]
Создайте скрипт из двух строк: Sleep и MouseWheel. За время Sleep вручную кликните по элементу и убедитесь, что MouseWheel работает.заскроллить в вайбере окно с чатом
я так уже делаю. Но нужно каждый день и не по одному сообществу. В ручную - тяжкоСоздайте скрипт из двух строк: Sleep и MouseWheel. За время Sleep вручную кликните по элементу и убедитесь, что MouseWheel работает.
Встроенными - не пробовал. По координатам не хотелось, потом все надо будет привязывать к разрешению экрана, а работает на виртуалке все это дело.После выполнения uia-кода курсор мыши находится над тем же элементом, что и при ручном клике?
Сообщение автоматически объединено:
А вы пробовали встроенными функциями AutoIt работать с контролом "[class:Qt5153QWindowOwnDCIcon]"?
Найти его положение и размеры, кликнуть мышью по его координатам или установить ему фокус?
Попробуйте. Вдруг получится.Встроенными - не пробовал
А вы думаете, как работает _UIA_ElementMouseClick? Находит позицию и размеры элемента, вычисляет центр, перемещает мышь и кликает. То же самое можно сделать через ControlGetPos.По координатам не хотелось
Неплохо
Позволю пару замечаний.
1. Метод называется Toggle, поэтому название функции лучше сделать _UIA_ElementToggle
2. В описании ошибки нужно поправить: ... на основе шаблона Toggle
3. В именах переменных можно заменить "IAccess" на "Toggle" для лучшей читаемости
How found: Selected from tree...
Name: "Execute_Command"
ControlType: UIA_ButtonControlTypeId (0xC350)
LocalizedControlType: "кнопка"
BoundingRectangle: {l:0 t:77 r:120 b:102}
IsEnabled: true
IsOffscreen: false
IsKeyboardFocusable: true
HasKeyboardFocus: false
AcceleratorKey: "Execute_Command"
AccessKey: ""
ProcessId: 26348
RuntimeId: [7.66EC.A49637]
AutomationId: "TbSetcdw_spc1"
FrameworkId: "WPF"
ClassName: "Button"
IsControlElement: true
IsContentElement: true
ProviderDescription: "[pid:26348,providerId:0x0 Main(parent link):Unidentified Provider (managed:MS.Internal.Automation.ElementProxy, PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)]"
IsPassword: false
ItemStatus: ""
ItemType: ""
IsRequiredForForm: false
HelpText: "Управление"
ClickablePoint: {x:60 y:89}
Orientation: 0
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: "Нажать"
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: "Управление"
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "Execute_Command"
LegacyIAccessible.Role: кнопка (0x2B)
LegacyIAccessible.State: фокусируемое (0x100000)
LegacyIAccessible.Value: ""
Toggle.ToggleState: Off (0)
IsAnnotationPatternAvailable: false
IsDragPatternAvailable: false
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: false
IsSpreadsheetPatternAvailable: false
IsStylesPatternAvailable: false
IsSynchronizedInputPatternAvailable: true
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: false
IsTextEditPatternAvailable: false
IsTextPatternAvailable: false
IsTextPattern2Available: false
IsTogglePatternAvailable: true
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: false
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
IsCustomNavigationPatternAvailable: false
FirstChild: "" текст
LastChild: "Управление" текст
Next: "Execute_Command" кнопка
Previous: "Execute_Command" кнопка
Other Props: Object has no additional properties
Children: "" текст
"" текст
"" текст
"" текст
"" текст
"" текст
"Управление" текст
Ancestors: "" особый
"" особый
"Рабочий стол 1" панель
[ No Parent ]
Неплохо
Позволю пару замечаний.
1. Метод называется Toggle, поэтому название функции лучше сделать _UIA_ElementToggle
2. В описании ошибки нужно поправить: ... на основе шаблона Toggle
3. В именах переменных можно заменить "IAccess" на "Toggle" для лучшей читаемости
Шаблоны - это описания методов (интерфейсы). Чтобы методы работали разработчик должен их реализовать - написать код, выполняющий определённые действия при возникновении конкретного события (получении сообщения). В данном случае либо метод Toggle не реализован (если это возможно), либо ничего не делает. Такое часто случается даже у Microsoft: реализуют обработчик клика мыши (DoDefaultAction) и пропускают специфичные методы, которые обычным пользователям не нужны. Бывает, даже Invoke не работает, хотя этот метод фактически обёртка для DoDefaultAction.шаблоны toggle не работает
Работать с Firefox через IUIAutomation очень сложно. Лучше сразу изучайте WebDriver на официальном сайте.в Mozila firefox
#include <UIAutomate.au3>
; окно firefox
$oParent = _UIA_GetElementFromHandle(WinGetHandle("[RegexpTitle:.*Mozilla Firefox]"))
; контейнер страницы
$oDocument = _UIA_GetControlTypeElement($oParent, "UIA_DocumentControlTypeId", "UIAutomate", "Name", True)
; поиск по части текста (поле Edit, не Text)
$oEdit = _UIA_GetControlTypeElement($oDocument, "UIA_EditControlTypeId", "автоматизация нестандартных", "Name", True)
; получение всего текста
$sText = _UIA_ElementGetPropertyValue($oEdit, "Name")
ConsoleWrite($sText & @CRLF)
; ссылка "СПРАВКА"
; имя ссылки начинается со значка, поэтому ищем по части текста
$oItem = _UIA_GetControlTypeElement($oDocument, "UIA_HyperlinkControlTypeId", "СПРАВКА", "Name", True)
; переход по ссылке
_UIA_ElementDoDefaultAction($oItem)
!> _UIA_FindAllElementsEx : ошибка создания объекта массива
!> _UIA_FindAllElements : ошибка создания массива элементов (объектов)
!> _UIA_GetControlTypeElement : ошибка создания массива элементов (объектов)
!> _UIA_GetControlTypeElement : первый параметр не является объектом
!> _UIA_ElementGetPropertyValue : первый параметр не является объектом
0
!> _UIA_GetControlTypeElement : первый параметр не является объектом
!> _UIA_ElementDoDefaultAction : параметр не является объектом
+>00:09:15 AutoIt3.exe ended.rc:0
Firefox перечисляет все вкладки, поэтому объектов может быть много. Попробуйте с одной вкладкой.Ошибку выдает