Можно и так, а можно в папку \Program Files\AutoIt3\Include - и тогда эти файлы будут доступны из любого места и их не надо будет каждый раз копировать...dr.room сказал(а):Правильно ли я понимаю - понадобиться в папку с моим макросом поместить 2 файла : UIAutomate.au3,
UIAConstants.au3
Спасибо большое, alex33.alex33 сказал(а):Можно и так...
Создайте отдельную тему и подробно опишите проблему. Попробуем поискать.найти на любой веб странице, в браузере Google Chrome, гиперссылки
Ок - СоздалInnI сказал(а):Создайте отдельную тему
_UIA_FindAllElementsEx
$oEl = _UIA_GetControlTypeElement($oP, 0xC352, '')
_UIA_FindAllElementsEx($oEl)
_UIA_ElementSetFocus($aArray[2])
$aArray = _UIA_FindAllElements($oP, "ControlType", 0xC352)
If IsArray($aArray) Then _UIA_ElementSetFocus($aArray[2])
InnI сказал(а):ini
Если вам нужно получить массив чекбоксов, то такА функция _UIA_FindAllElementsEx() работает не с элементом, а с предварительно созданным условием.Код:$aArray = _UIA_FindAllElements($oP, "ControlType", 0xC352) If IsArray($aArray) Then _UIA_ElementSetFocus($aArray[2])
How found: Mouse move (554,85)
hwnd=0x002E1376 32bit class="Chrome_WidgetWin_1" style=0x17CF0000 ex=0x100
Name: "YouTube"
ControlType: UIA_TextControlTypeId (0xC364)
LocalizedControlType: "текстовый"
BoundingRectangle: {l:524 t:67 r:583 b:93}
IsEnabled: true
IsOffscreen: false
IsKeyboardFocusable: true
HasKeyboardFocus: false
AccessKey: ""
ProcessId: 4524
ProviderDescription: "[pid:4524,hwnd:0x0 Main(parent link):Microsoft: MSAA Proxy (unmanaged:uiautomationcore.dll)]"
IsPeripheral: [Not supported]
LiveSettingProperty: [Not supported]
IsPassword: false
HelpText: ""
FlowsFrom: [Not supported]
OptimizeForVisualContent: [Not supported]
PositionInSet: [Not supported]
SizeOfSet: [Not supported]
Level: [Not supported]
AnnotationTypes: [Not supported]
AnnotationObjects: [Not supported]
LandmarkType: [Not supported]
LocalizedLandmarkType: [Not supported]
Annotation.AnnotationAuthor: [Not supported]
Annotation.AnnotationTypeId: [Not supported]
Annotation.Author: [Not supported]
Annotation.DateTime: [Not supported]
Annotation.Target: [Not supported]
Drag.DropEffect: [Not supported]
Drag.DropEffects: [Not supported]
Drag.GrabbedItems: [Not supported]
Drag.IsGrabbed: [Not supported]
DropTarget.DropTargetEffect: [Not supported]
DropTarget.DropTargetEffects: [Not supported]
LegacyIAccessible.ChildId: 0
LegacyIAccessible.DefaultAction: ""
LegacyIAccessible.Description: ""
LegacyIAccessible.Help: ""
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "YouTube"
LegacyIAccessible.Role: текст (0x29)
LegacyIAccessible.State: только чтение,фокусируемое (0x100040)
LegacyIAccessible.Value: ""
ObjectModel.UnderlyingObjectModel: [Error: calling getter for this property: hr=0x80070057 - Параметр задан неверно.]
SpreadsheetItem.AnnotationObjects: [Not supported]
SpreadsheetItem.AnnotationTypes: [Not supported]
SpreadsheetItem.Formula: [Not supported]
Style.ExtendedProperties: [Not supported]
Style.FillColor: [Not supported]
Style.FillPatternColor: [Not supported]
Style.FillPatternStyle: [Not supported]
Style.Shape: [Not supported]
Style.StyleId: [Not supported]
Style.StyleName: [Not supported]
Transform2.CanZoom: [Not supported]
Transform2.ZoomLevel: [Not supported]
Transform2.ZoomMinimum: [Not supported]
Transform2.ZoomMaximum: [Not supported]
IsAnnotationPatternAvailable: [Not supported]
IsDragPatternAvailable: [Not supported]
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: [Not supported]
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: [Not supported]
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: false
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: [Not supported]
IsSpreadsheetPatternAvailable: [Not supported]
IsStylesPatternAvailable: [Not supported]
IsSynchronizedInputPatternAvailable: false
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: [Not supported]
IsTextEditPatternAvailable: [Not supported]
IsTextPatternAvailable: false
IsTextPattern2Available: [Not supported]
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: [Not supported]
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
IsCustomNavigationPatternAvailable: [Not supported]
FirstChild: [null]
LastChild: [null]
Next: [null]
Previous: "" рисунок
Other Props: Object has no additional properties
Children: Container has no children
Ancestors: "YouTube" кнопка
"Закладки" панель инструментов
""
"Google Chrome"
"Новая вкладка - Google Chrome" окно
"Рабочий стол" панель
[ No Parent ]
Ссылка UIA_HyperlinkControlTypeId и кнопка UIA_ButtonControlTypeId - это разные элементы. Но каждый из них, как правило, реагирует на функцию _UIA_ElementDoDefaultAction(). Это фактически клик без использования мыши (как ControlClick для стандартного элемента).ссылка (кнопка)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", "YouTube")
_UIA_ElementMouseClick($oElement)
У меня уровень знания скриптов ~0 (та получилось )InnI сказал(а):но вы можете по нему кликнуть мышью
Для самостоятельной работы с UDF этого слишком мало.уровень знания скриптов ~0
$oElement - это тот элемент, по которому кликаем. $oParent - это родительский элемент, по дочерним элементам которого производится поиск. Но я не знаю, как это объяснить человеку с уровнем знаний ~0.что есть $oElement и $oParent
InnI сказал(а):Но я не знаю, как это объяснить человеку с уровнем знаний ~0
Согласен, трудновато. НоInnI сказал(а):Для самостоятельной работы с UDF этого слишком мало.
Если не заработает, покажите ошибки, выводимые в консоль, и приложите скриншот части дерева, чтобы видно было родителей этого текстаполный вариант кода
#include "UIAutomate.au3"
Opt("WinTitleMatchMode", 2)
$hWnd = WinWait(" - Google Chrome", "", 3)
If Not $hWnd Then Exit ConsoleWrite("!> Окно браузера не найдено" & @CRLF)
$oParent = _UIA_GetElementFromHandle($hWnd)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", "YouTube")
_UIA_ElementMouseClick($oElement)
Напротив - всё работает, спасибоInnI сказал(а):Если не заработает
$hWnd
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.14.2
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
;~ подключаем библиотеку
#include "UIAutomate.au3"
;~ меняем способ поиска заголовка окна при сопоставлении с образцом: с полного совпадения на частичный
Opt("WinTitleMatchMode", 2)
;~ останавливаем работу скрипта до появления нужного заголовка окна - и ждем 3 сек
$hWnd = WinWait(" - Google Chrome", "", 3)
;~ Ставим условие: Если искомое окно так и не найдено в отпущенное для этого время , то выводим в консоль сообщение и выходим
;~ "а не найдено Окно браузера " :). Вы такой скрин запрашивали, если что -то не так ?
If Not $hWnd Then Exit ConsoleWrite("!> Окно браузера не найдено" & @CRLF)
;~ создаём дескриптор для родительского элемента - а именно : для Google Chrome. Но название окна пишем через переменную
;~ т.е через $hWnd
$oParent = _UIA_GetElementFromHandle($hWnd)
;~ Находим дочерний элемент, который: через родителя т.е. от него и начнём поиск ,
;~ обладающего собственным ID и способом управления (текстовый тип управления) и именем YouTube
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", "YouTube")
;~ уж коли элемент определён и найден - почему бы не кликнуть по нему :)
;~ укажем для этого дела не координаты клика а свойство искомого элемента - через переменную...
_UIA_ElementMouseClick($oElement)
с нажатым Cntrl или Shift
Send("{SHIFTDOWN}")
_UIA_ElementMouseClick($oElement)
Send("{SHIFTUP}")
В этой функции используются именно координаты. Но, если вы их не указали, то используются по умолчанию - середина ширины и высоты.укажем для этого дела не координаты клика
Основы программирования под Windows никакого отношения к данной теме не имеют.процесс получения дескриптора окна
В этом случае выходит, что координаты будут указываться относительно границ самого элемента?InnI сказал(а):В этой функции используются именно координаты.
Да, только координаты границ - экранные. Т.е. нужно прибавить координату левого верхнего угла. Вот так будет правильнее кликать с нажатым Shiftотносительно границ самого элемента
$oParent = _UIA_GetElementFromHandle($hWnd) ; родитель
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", "YouTube") ; элемент
$aRect = _UIA_ElementGetBoundingRectangle($oElement) ; экранные координаты элемента
If IsArray($aRect) Then
$iX = ($aRect[2] - $aRect[0]) / 2 ; середина ширины элемента
$iY = ($aRect[3] - $aRect[1]) / 2 ; середина высоты элемента
MouseMove($aRect[0] + $iX, $aRect[1] + $iY, 0) ; смещение мыши в середину элемента с учётом левого верхнего угла элемента
Send("{SHIFTDOWN}") ; нажатие Shift
MouseClick("left") ; клик в текущие координаты курсора
Send("{SHIFTUP}") ; отпускание Shift
EndIf