Контролы файловых панелей (Autoit, AHK)

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Контролы файловых панелей (Autoit, AHK)

Сообщение LonerD »

Как известно, в зависимости от наличия открытых в сеансе работы фтп-соединений и "дерев каталогов в отдельных панелях" - имена контролов файловых панелей изменяются, и могут принимать значения от TMyListBox1 до TMyListBox5 (в 64-х битном Тотале - соответственно LCLListBox).
Зачастую нужно определить в данный конкретный момент времени имя контрола правой и левой файловых панелей (как один из примеров - для того, чтобы узнать в какой панели находится курсор).

Пока что я дошёл до единственного решения.
Считываем текст в контролах TMyListBox1 - TMyListBox3, и если он равен W_TreeList1, то значит открыто одно дерево в отдельной панели, если W_TreeList2 - то два дерева. Далее зная это можно сделать предположения об именах контролов файловых панелей, но приходится узнавать список контролов окна Тотала и перебирать их чтобы узнать - было ли в процессе работы открыто ftp-соединение.
Пример реализации этого варианта - в скрипте.

Второй вариант попроще, но менее элегантный - считать имя контролла активной панели, заморозить окно Тотала, поместить курсор в правую панель, считать имя контрола, потом поместить курсор в левую панель, считать имя контрола, вернуть всё как было, разморозить окно.

Может есть какой-то более простой вариант с запросом к окну или процессу Тотала?
Последний раз редактировалось LonerD Пн июн 09, 2014 19:11, всего редактировалось 1 раз.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Если установлен TCFS2Tools, можно запрашивать дескрипторы файловых панелей отправкой сообщения окну тотала.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

MVV
Тоже вариант. Но это надо использовать плагин Autorun, подплагин к нему, плюс утилиту TCFS2... Да к тому же мы не получаем имя контрола, а только ответ правая/левая панель.
А каким образом TCFS2Tools получает информацию об активной панели - постоянно резидентно отслеживает активность?
Можно ли из TCFS2Tools напрямую (минуя TCFS2) непосредственно в скрипте получать информацию об активной панели (какими-то запросами к dll-библиотеке)?
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Достаточно только TCFS2Tools, её можно установить на манер Autorun, а посылать ему сообщения из AHK банальным SendMessage (чем TCSF2 и занимается).
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Функция появилась в последней версии (билд 188), сообщение нужно отправить следующее:

Код: Выделить всё

SendMessage(hTcWnd, 0x0433, 65556, 1 или 2)
Здесь выбираем 1 или 2 для левой или правой панели, функция вернёт дескриптор окна списка файлов.

Кстати, узнать, в какой панели курсор, можно только из контекста процесса тотала, т.к. извне эта информация недоступна. Но TCFS2Tools позволяет определять, какая из панелей активна, и обмен происходит также через сообщения.
Ответить