Что нового

UIAutomate - автоматизация нестандартных элементов GUI

lettterssino

Новичок
Сообщения
51
Репутация
3
Код:
_UIA_ElementDoDefaultAction()



Интерфейс UIAutomation не работает со скрытыми элементами. Он их просто не находит.
Я не так выразился, неактивный сеанс пользователя, в этом случае любые маусклики не работают, а первая функция почему то не делает клики, а лишь завершается со статусом 0.
Код:
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "|LongDelayItem_NewItemButton", "AutomationId")
_UIA_ElementDoDefaultAction($oElement)

Или может я не так что-то делаю, хочу сделать нажатие элемента, но без команды
Код:
_UIA_ElementMouseClick($oElement)

А вот весь кусок кода может так легче будет понять
Код:
Run(@ComSpec & " /c " & $Dir, "", @SW_HIDE)
$ssc = WinWait($DistroTitle, 'mdihost')
$hwie = WinGetHandle($ssc)
$oParent = _UIA_GetElementFromHandle($hwie)

_UIA_WaitControlTypeElement($oParent, "UIA_MenuItemControlTypeId", "Файл", "LegacyIAccessible.Name", "", 60)

$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "|LongDelayItem_NewItemButton", "AutomationId")
_UIA_ElementDoDefaultAction($oElement)
;_UIA_ElementMouseClick($oElement)

_UIA_WaitControlTypeElement($oParent, "UIA_MenuItemControlTypeId", "Чертеж", "LegacyIAccessible.Name", "", 45)

$oElement = _UIA_GetControlTypeElement($oParent, "UIA_MenuItemControlTypeId", "Чертеж")
_UIA_ElementMouseClick($oElement)
 
Последнее редактирование:
Автор
I

InnI

AutoIT Гуру
Сообщения
4,740
Репутация
1,361
неактивный сеанс пользователя
Вы имеете в виду подключение по RDP с последующим закрытием окна RDP? То есть аналог блокировки по Win+L?
Если да, то я проверил DoDefaultAction в блокноте на заблокированном компьютере. Работает без проблем.
К тому же вы пишите, что "завершается со статусом 0". Следовательно, метод отрабатывает без ошибок. Вероятно, сам контрол не реагирует.

Попробуйте эту функцию. Аналог DoDefaultAction уровнем выше. Но она у меня зависает при заблокированном компьютере. Вероятно из-за того, что пытается активировать окно.
Код:
Func _UIA_ElementInvoke($oElement)
  If Not IsObj($oElement) Then Return SetError(1, __UIA_ConsoleWriteError("_UIA_ElementInvoke : параметр не является объектом"), 0)
  Local $pInvoke, $oInvoke
  $oElement.GetCurrentPattern($UIA_InvokePatternId, $pInvoke)
  $oInvoke = ObjCreateInterface($pInvoke, $sIID_IUIAutomationInvokePattern, $dtagIUIAutomationInvokePattern)
  If Not IsObj($oInvoke) Then Return SetError(2, __UIA_ConsoleWriteError("_UIA_ElementInvoke : ошибка создания объекта на основе шаблона Invoke"), 0)
  Local $iErrorCode = $oInvoke.Invoke()
  If $iErrorCode Then Return SetError(3, __UIA_ConsoleWriteError("_UIA_ElementInvoke : ошибка выполнения метода (0x" & Hex($iErrorCode) & ")"), 0)
  Return 1
EndFunc ; _UIA_ElementInvoke
 
Верх