Страница 1 из 1

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

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

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

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

Может есть какой-то более простой вариант с запросом к окну или процессу Тотала?

Добавлено: Пн июн 09, 2014 18:58
MVV
Если установлен TCFS2Tools, можно запрашивать дескрипторы файловых панелей отправкой сообщения окну тотала.

Добавлено: Пн июн 09, 2014 19:14
LonerD
MVV
Тоже вариант. Но это надо использовать плагин Autorun, подплагин к нему, плюс утилиту TCFS2... Да к тому же мы не получаем имя контрола, а только ответ правая/левая панель.
А каким образом TCFS2Tools получает информацию об активной панели - постоянно резидентно отслеживает активность?
Можно ли из TCFS2Tools напрямую (минуя TCFS2) непосредственно в скрипте получать информацию об активной панели (какими-то запросами к dll-библиотеке)?

Добавлено: Пн июн 09, 2014 19:35
MVV
Достаточно только TCFS2Tools, её можно установить на манер Autorun, а посылать ему сообщения из AHK банальным SendMessage (чем TCSF2 и занимается).

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

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

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

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