Что нового

[Автоматизация] Как програмно кликнуть кнопку ButtonBar'a

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Имеется приложение : Total Commander.
Нужно выполнить клик по выбранной кнопке ButtonBar'a

Класс окна : "[CLASS:TTOTAL_CMD]"
Класс ButtonBar'a : '[CLASS:TButtonBar; INSTANCE:1]'

Хотелось бы без клика по кординатам.
Если возможно , и без "{Left}" ,"Send" :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
что-то я не понял, разве ControlClick не работает?
Код:
ControlClick ("[CLASS:TTOTAL_CMD]", "", "[CLASS:TButtonBar; INSTANCE:1]")

иначе, как понять
gregaz [?]
Если возможно , и без "{Left}"
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Kaster [?]
что-то я не понял, разве ControlClick не работает?

Для того ,чтобы выполнить ControlClick(или "Send") требуется выполнить n-ое кол-во "{Left}".
После выполнения каждого ControlClick"а и попытке выполнить клик по другой кнопке,
исходное положение положение меняется (остается в последем кликнутом положении)
Кроме того это положение зависит от того сворачивалось ли окно или нет.
Нулевого положения нет.Крутится по кругу.
Т.е. возникает геморрой при определении кол-ва "{Left}"

Поэтому я думаю есть другой способ (через WinAPI или SendMessage.au3 или GuiToolbar.au3)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
gregaz [?]
Для того ,чтобы выполнить ControlClick(или "Send") требуется выполнить n-ое кол-во "{Left}".
поясни :smile: надо сделать несколько кликов что ли?
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Kaster [?]
поясни
smiley.gif
надо сделать несколько кликов что ли?

Кнопок много.
Надо иметь возможность перидически кликнуть на нужную.
других INSTANCE вроде нет
Как определить Handle Нужной кнопки ?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Код:
ControlGetHandle
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
ControlGetHandle("чего ?")
Идентификатора кнопки то нет
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
че-то я окончательно запутался, а проверить возможности нет. '[CLASS:TButtonBar; INSTANCE:1]' вот это что?
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
При наведении на любую кнопку(из этого ряда) выдает этот класс
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
gregaz
а инструмент Yashied'a использовал? он вроде выдавал такие заморочки, с перекрытием контролов. попробуй
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: [Автоматизация] Как програмно кликнуть кнопку ButtonBar\'a

Kaster [?]
а инструмент Yashied'a использовал? он вроде выдавал такие заморочки, с перекрытием контролов. попробуй

Пробовал все. Даже InqSoft Scanner

Видимо это задача не из простых.

Придется вернуться к {Left}" ,"Send"
Только надо добиться однозначной установки фокуса в какую то точку после выполнения операции.
Я заметил. если свернуть окно системной кнопкой, то вроде устанавливаетс я в исходную позицию.
А если задать ему WinSetState("[CLASS:TTOTAL_CMD]", "", @SW_MINIMIZE), - то нет. Остается в кликнутой позиции.




Добавлено:
Сообщение автоматически объединено:

Хотя нет этим способом лучше не пользоваться.
Там есть кнопки,которые лучше и не нажимать. Уже как-то обжигался.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Можно по другому еще попробовать.
Конфигурация - Панель инструментов
Там выделяем интересующую иконку
и смотрим что в поле Команда.
Например значек Соединиться с FTP:
команда - cm_FtpConnect

Теперь самый примитивный скрипт:
Код:
Sleep(5000)
Send("cm_FtpConnect")
Send("{ENTER}")

Еще в поле Панель есть путь к интересному файлу Default.bar,
его можно просматривать и редактировать в Блокноте.
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: [Автоматизация] Как програмно кликнуть кнопку ButtonBar\'a

Yuriy [?]
Теперь самый примитивный скрипт:

Это было бы замечательно, но так тоже не работает.
При этом просто раскрывается 1 папка в окне или запускается 1-й файл окна



Добавлено:
Сообщение автоматически объединено:

Yuriy [?]
Еще в поле Панель есть путь к интересному файлу Default.bar,

А здесь задается номер иконки и команды наверное
button25=Wcmicons.dll,9
cmd25=cm_CompareFilesByContent
Как это можно использовать :(
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
gregaz
У меня так работает, в свернутом и развернутом окне.
Код:
ControlCommand("[CLASS:TTOTAL_CMD]", "", "[ClassNN:TButtonBar1]", "Check", "cm_SearchFor")

Не, не работает
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
gregaz
Вот еще так можно.
Уже есть готовый список меню, подменю в
\totalcmd\language\wcmd_rus.mnu
Читается Блокнотом.
Код:
Выбираем, что нужно и состаляем команды.
WinMenuSelectItem("[CLASS:TTOTAL_CMD]", "", "Ви&д", "О&бновить окно")
WinMenuSelectItem("[CLASS:TTOTAL_CMD]", "", "Ви&д", "&Краткий")
WinMenuSelectItem("[CLASS:TTOTAL_CMD]", "", "К&оманды", "&Информация о системе")
WinMenuSelectItem("[CLASS:TTOTAL_CMD]", "", "&Файлы", "&Упаковать")
; и т.д.

Попробуй.
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Клик по координатам самое простое к сожалению:
Код:
ControlClick('Title', '', '[CLASS:TToolbar;INSTANCE:1]','left',1,72,13)

Находил примеры на Delphi, там для по крайней мере очень сложно, но можно кликнуть на кнопку панели, внедрившись в процесс...
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
r35p3ct [?]
Клик по координатам самое простое к сожалению:

Да ,возможно.

Yuriy [?]

Попробовал,но не работает, к тому же нужной мне кнопки в меню нет.
Однако здесь нашел возможность однозначной установки курсора на начало панели инструментов. Через горячие клавиши.
Теперь в принципе можно работать так:
Код:
WinActivate("[CLASS:TTOTAL_CMD]", "")
Send("!+{F11}"); Перейти на панель инструментов				
Send ("{LEFT 14}")	
Send ('{ENTER}' )


Не очень красиво,но на безрыбье...
 
Верх