1 (изменено: yalanne, 2015-02-20 20:24:30)

Тема: AHK: Работа с библиотекой Acc Library. Вывод информации

Как с помощью библиотеки Acc Library вывести значение функции Acc.accName(child) НЕ через позицию мыши, а у конкретного контрола другого окна?

    Acc := Acc_ObjectFromPoint(Child)
    msgbox %  Acc.accName(child)

2

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Acc_ObjectFromWindow.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3 (изменено: yalanne, 2015-02-20 21:53:01)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Cам разобрался. у меня получилось через Acc_ObjectFromEvent.

hWnd_ctrl := ; hwnd нужного контрола.
Acc := Acc_ObjectFromEvent(Child, hWnd_ctrl,0, 0)
msgbox %  Acc.accName(child)

4 (изменено: yalanne, 2015-02-20 21:53:13)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

А как наоборот сделать, что бы изменить этот параметр а не прочесть?

5

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

yalanne, не нужно цитировать предыдущий пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

teadrinker пишет:

yalanne, не нужно цитировать предыдущий пост.

Поправил

7

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Насколько я помню, он неменяется.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Всем привет. Никто не пробовал через ID потомка выбрать элемент?
Нашел вот такой пример:

acc := acc_get("Object", "3.1", 0, "ahk_class TTOTAL_CMD")
acc.accDoDefaultAction(0) ; Set Focus

Только он находит строку меню и все. Остальные элементы тотала он не видит.

Как вариант, нужно в панели TMyListBox2 (там отображено содержимое диска С:) установить курсор на любую папку или файл.

9

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Ошибка выходит в результате запуска скрипта по автозапуску при включении ноутбука. Приходится запускать скрипт вручную, тогда ошибка не выходит. Как решить проблему?

http://puu.sh/yOvuU/a836f2458c.png

10

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Это сильно вряд ли относится к "Acc". Я наблюдаю такое же сообщение, когда все виртуальные машины включаю за раз, тогда есть вероятность, что на какой-либо машине случится подобное. Видимо, у Вас на момент запуска на устройстве, грузится вместе со скриптом ещё, довольно критичное количество программ, сервисов и прочих, или HDD стареет и таким образом проявляет себя. Попробуйте отложенную автозагрузку таким способом, или используйте тулзы для этой настройки, например, я пользую Anvir.

11

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Прописать полный путь к файлу acc.ahk, пробовали?

12 (изменено: stealzy, 2017-12-27 16:32:12)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

becauseim, дело в рабочей директории, если вы не прописали ее отдельно в ярлыке, ею становится директория установки интерпретатора, а в ней конечно файл Acc.ahk отсутствует.
Решение - прописать раб. дир. в ярлыке, либо прописать в скрипте первым инклудом #Include %A_ScriptDir%, либо указать полный путь инклуда.

13

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

У меня над инклюдами во всех сценариях значится -> SetWorkingDir, A_ScriptDir. У этой директивы настолько меньше приоритета при загрузке контента, нежели прямое указание пути к файлу, что это так влияет на загрузку основного документа?

14

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

SetWorkingDir на Include не влияет.

15 (изменено: stealzy, 2017-12-28 15:36:52)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

KusochekDobra, ни одна команда на директивы не влияет, потому что команды выполняются в ходе исполнения скрипта, а директивы - до.
И разумеется SetWorkingDir не директива, потому что директивы пишутся с #.

16

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

stealzy пишет:

ни одна команда на директивы не влияет

Как же не влияет?

SetWorkingDir, c:\
#If (A_ScriptDir != A_WorkingDir)
f1::msgbox

17

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

В общем, SetWorkingDir никак не помог. Только полный путь после #Include. Хотя ранее или в более легких по объему скриптах этого не требовалось.

18

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Malcev пишет:

Как же не влияет?

Это влияние на условие директивы а не на нее саму.
Если бы можно было командой выключить директиву, или создать новую, или изменить выражение в условии...
Но по ходу выполнения скрипта даже невозможно создать хоткей с произвольным условием в #If, это условие должно быть прописано в коде скрипта.

Справка по Hotkey пишет:

Counterpart of #If Expression. Expression must match exactly the text of an existing #If Expression, excluding "#If"
...
Although this command is unable to create new expressions

19 (изменено: Malcev, 2017-12-28 07:16:39)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

stealzy пишет:

Если бы можно было командой выключить директиву

#InputLevel 1
f1::f2
#InputLevel 0
f2::Msgbox
f3::Hotkey, f2,,I1  ; изменяем inputlevel

20

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Благодарю за разъяснения. Но, всё же, раз я на своём опыте встречаю такие ошибки исключительно в момент крайней загрузки ЖД, то связываю проблему именно с этим. Во всех остальных случаях, работает как описано в той же справке, которая говорит, что если полный путь указан не был, то поиск осуществляется вначале в каталоге скрипта.

21

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Malcev, с моей точки зрения вы выключили отдельную ГК, а не директиву. Под директивой могут находится и другие ГК.
Вообще, суть моего сообщения о порядке выполнения директив и команд. Конечно команды влияют друг на друга, даже если на одни из них оказывают влияние директивы.
Ну никак нельзя оказать влияние на выполнение директивы до начала хода исполнения скрипта поместив команду выше нее.

22 (изменено: Malcev, 2017-12-28 16:32:47)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

stealzy пишет:

Ну никак нельзя оказать влияние на выполнение директивы до начала хода исполнения скрипта поместив команду выше нее.

Так у f1 inputlevel будет равен 2, а не 1 (как указано в директиве):

Hotkey, f1,,I2  ; изменяем inputlevel
#InputLevel 1
f1::msgbox % A_SendLevel

23 (изменено: stealzy, 2017-12-28 19:19:56)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Malcev, вы узнаете чему будет равен inputlevel только когда нажмете ГК. В самом начале исполнения, очевидно, inputlevel будет 1.
Не понимаю, вы не согласны что директивы выполняются до старта исполнения последовательности команд в коде? Если нет, тогда увольте...

24 (изменено: Malcev, 2017-12-28 16:42:37)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

stealzy пишет:

Malcev, вы узнаете чему будет равен inputlevel только когда нажмете ГК. В самом начале исполнения, очевидно, inputlevel будет 1.

Inputlevel можно посмотреть в Hotkeys and their methods.

stealzy пишет:

директивы иполняются до старта исполнения последовательности команд в коде?

Судя по всему некоторые команды (в частности hotkey) тоже до старта исполнения и имеют приоритет над директивами.
Я не согласен с тем, что "ни одна команда на директивы не влияет".

25 (изменено: stealzy, 2017-12-28 17:43:56)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Malcev пишет:

Судя по всему некоторые команды (в частности hotkey) тоже до старта исполнения

Наивное предположение. :: а не Hotkey, причем это даже и не команда.

Sleep 5000
Hotkey, f1,,I2  ; изменяем inputlevel
#InputLevel 1
f1::msgbox % A_SendLevel

26

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Да, действительно.
А что по вашему hotkey, как не команда?

27 (изменено: stealzy, 2017-12-28 18:14:54)

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

Hotkey конечно команда, имел ввиду ::.

28

Re: AHK: Работа с библиотекой Acc Library. Вывод информации

В общем, разобрался со своим вопросом.

Как обычно, все оказалось не так уж и сложно, стоило только вникнуть в суть. Хотя и там без своих заморочек не обошлось, но куда же без этого)?

Распишу моменты, которые понял, может еще кому пригодится.

Сразу ссылка на Acc.ahk, а то было непросто ее найти.

Для начала, очень полезной оказалась программка Accessible Info Viewer (AIV). С ее помощью находим элемент, который нам нужен, копируем порядок дочерних элементов (к примеру, 4.3.4.1), добавляем в функцию acc_get и все. Дальше делаем с найденным элементом все, что захочется (в пределах возможностей acc, конечно) ).

Как пример, выберем папку в окне проводника:

#include Acc.ahk

WinGet, hWnd, ID, ahk_class CabinetWClass
Acc := Acc_Get("Object", "4.3.4.1.4.1.4.4.4.1.4.2", 0, "ahk_id " hWnd)
Acc.accSelect(9,0)

Кстати, можно поиграться с первым значением accSelect() и выбрать необходимый режим выделения элементов.

А теперь самое интересное: этот метод подходит не для всех программ. К примеру, тот код, который я приводил в своем первом сообщении, действительно оказался нерабочим. Мало того, если исследовать AIV Total Commander, то окажется, что элементы из панелей TMyListBox (папки и файлы) вообще не отображаются в окне AIV. Т.е. таким способом информацию об этих элементах мы не узнаем, а также не сможем с ними взаимодействовать.

И здесь можно применить другой способ:

#include Acc.ahk

ControlGet, hwnd, hwnd, , TMyListBox2, ahk_class TTOTAL_CMD
Acc :=   Acc_ObjectFromWindow(hWnd)
For i, child in Acc_Children(Acc)	
	Acc.accSelect(9,i)

Но, опять-таки, есть своё но: в последней (найденной) версии Acc.ahk (last updated 10/25/2012), в функции Acc_ObjectFromWindow был изменен параметр idObject = 0. И при выполнении код завершается ошибкой. Если изменить его на старое значение idObject = -4, то все выполняется как нужно.

Не буду утверждать, что это универсальный вариант, возможно у кого-то будет работать и с новым значением.

У кого будут какие дополнения - пишите, лишним точно не будет.

P.S.

А вообще, было бы отлично создать общую тему для Acc. Их (вопросов по acc) не так много, но иногда долго ищешь необходимую тебе информацию из всего списка найденного.