Как узнать директории панелей?

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

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

Ответить
jackhab
Сообщения: 5
Зарегистрирован: Пн мар 17, 2008 23:40

Как узнать директории панелей?

Сообщение jackhab »

Если ли какой-нибудь способ узнать какие директории открыты в правой и левой панелях не прибегая к написанию плагина?
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

jackhab
Во-первых, плагины TC этим не занимаются — нет там такой функции. Во-вторых, не очень понятна сама постановка вопроса. Узнать — откуда, в каком виде и, главное, для чего? А то текущие каталоги и в главном окне в разных местах отображаются, и в wincmd.ini при необходимости принудительно сохранены могут быть в секциях [left] и [right] как значение ключа Path (пока это не сделано, вся информация о свежеоткрытых каталогах хранится только в памяти). В общем, пояснение задачи очень желательно.
Даже самая богатая фантазия
Не представит себе наши безобразия.
jackhab
Сообщения: 5
Зарегистрирован: Пн мар 17, 2008 23:40

Сообщение jackhab »

Avada писал(а):jackhab
Во-первых, плагины TC этим не занимаются — нет там такой функции. Во-вторых, не очень понятна сама постановка вопроса. Узнать — откуда, в каком виде и, главное, для чего? А то текущие каталоги и в главном окне в разных местах отображаются, и в wincmd.ini при необходимости принудительно сохранены могут быть в секциях [left] и [right] как значение ключа Path (пока это не сделано, вся информация о свежеоткрытых каталогах хранится только в памяти). В общем, пояснение задачи очень желательно.
Извиняюсь за непонятность постановки вопроса.

Допустим есть скрипт PowerShell или Autoit, который хочет узнать какие панели открыты в данный момент в активных табах.

wincmd.ini это отлично, только как принудить сохранение, так чтобы сохранялось при каждом переходе директории и переключении активных табов?
Последний раз редактировалось jackhab Вс сен 05, 2021 09:37, всего редактировалось 1 раз.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

jackhab
Параметры командной строки %P (исходный каталог) и %T (каталог назначения) вкупе с %X (трактует последующие параметры как относящиеся к левой/правой панелям вместо исходной/целевой) не подойдут?
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

sa писал(а):Параметры командной строки %P (исходный каталог) и %T (каталог назначения) вкупе с %X (трактует последующие параметры как относящиеся к левой/правой панелям вместо исходной/целевой) не подойдут?
Либо в скрипте sendmessage с параметром WM_USER+50. Подробнее см. history.txt от 08.06.16.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
jackhab
Сообщения: 5
Зарегистрирован: Пн мар 17, 2008 23:40

Сообщение jackhab »

Вахмурка писал(а):
sa писал(а):Параметры командной строки %P (исходный каталог) и %T (каталог назначения) вкупе с %X (трактует последующие параметры как относящиеся к левой/правой панелям вместо исходной/целевой) не подойдут?
Либо в скрипте sendmessage с параметром WM_USER+50. Подробнее см. history.txt от 08.06.16.
Спасибо. Похоже, что sendmessage это как раз то, что я искал (забыл упомянуть, что скрипт внешний, не запущенный из ТС).
Аватара пользователя
mf-zl
Сообщения: 71
Зарегистрирован: Вс авг 21, 2005 03:30
Откуда: BLR
Контактная информация:

Сообщение mf-zl »

Немного кода на Autohotkey по данному вопросу

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

msgbox, % "Left: " TC_WM("LP") "`nRight: " TC_WM("RP")

/*
  Get info
  Supported commands A: Active side (returns L or R), or two byte command:
  1st byte: L=left, R=right, S=source, T=target.
  2nd byte: P=current path, C=list count, I=caret index, N=name of file under caret.

*/
TC_WM(cmd) {
  Global CopyOfData
  OnMessage(0x4a, "Receive_WM_COPYDATA")
  len := StrLen(cmd) + 1
  If A_IsUnicode
  { cmdStr := cmd
    VarSetCapacity(cmd, StrPut(cmd, "cp0"))
    Loop, % len
      NumPut(Asc(SubStr(cmdStr, A_Index, 1)), cmd, A_Index - 1, "Char")
  }
  VarSetCapacity(CopyDataStruct, A_PtrSize * 3)
  NumPut(Asc("G") + 256 * Asc(A_IsUnicode ? "W" : "A"), CopyDataStruct)
  NumPut(len, CopyDataStruct, A_PtrSize)
  NumPut(&cmd, CopyDataStruct, A_PtrSize * 2)
  SendMessage, 0x4A, % A_ScriptHwnd, &CopyDataStruct,, % "ahk_id " WinExist("ahk_class TTOTAL_CMD")
  Return, CopyOfData
}

Receive_WM_COPYDATA(wParam, lParam, msg, hwnd) {
  Global CopyOfData := StrGet(NumGet(lParam + 8))
}
Ответить