TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

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

rust
Сообщения: 8
Зарегистрирован: Пт дек 27, 2013 08:49

Сообщение rust »

Этими вашими автохоткеями можно решить вопрос: по нажатию Вниз посылаешь панели сообщение LB_GETCOUNT (wParam=lParam=0), затем LB_GETCARETINDEX (wParam=lParam=0), и если ...
MVV, а нельзя это сделать с помощью TCFS2? "sendmsg(findwnd(`TTotal_cmd`), LB_GETXXX, 0, 0, 1)" похоже всегда возвращает либо 1, либо 0, причем без разницы отправляешь окну TTotal_cmd или TMyListbox.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Сообщения необходимо посылать именно панелям, т.к. они являются представителями класса окон-списков и реагируют на эти сообщения, возвращая информацию о себе. А из TCFS2 получить дескрипторы окон панелей не получится.

Говоря об "автохоткеях", я подразумевал именно перехват нажатий клавиш с соответствующей обработкой, TCSF2 этим не занимается.

Я пробовал отправлять панелям указанные сообщения (из InqSoft Window Scanner), возвращаемые значения соответствуют действительности.
rust
Сообщения: 8
Зарегистрирован: Пт дек 27, 2013 08:49

Сообщение rust »

А вот если через TCFS2 отправить сообщение на TTotal_cmd, равно как напрямую на $10320 (в данную минуту это TMyListbox), то TMyListbox возвращает корректное значение например lb_getcaretindex, но либо до TCFS2 оно не доходит, либо TCFS2 интерпретирует по-своему, либо до меня чего-то не доходит.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Имею левую панель с дескриптором окна $20462.

Выполняю в командной строке:

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

tcfs2 /ef "set_tcini(tcfs2, lpos, sendmsg($20462, $19f))"
И в параметр lpos секции tcfs2 файла wincmd.ini записывается правильное значение текущей позиции ($19f - это LB_GETCARETINDEX).

Выполняю:

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

tcfs2 /ef "sendmsg($20462, $19e, sendmsg($20462, $19f)-1, 0)"
И курсор сдвигается на 1 элемент вверх ($19e - это LB_SETCARETINDEX).
rust
Сообщения: 8
Зарегистрирован: Пт дек 27, 2013 08:49

Сообщение rust »

дошло, я вешаю на кнопку "sendmsg(findwnd(`TTotal_cmd`), $19f)" и вижу в окне spy++ текущую позицию GetCaretIndex, затем вешаю на ту же кнопку cmd.exe и вижу то же самое, оказывается не я один хочу получить позицию курсора :)
Хотел красиво решить проблему потери индекса файла в панели ТС после multirename, если курсор находится среди выделенных файлов, не знаю сделает-ли это Гислер. Сейчас тупо повесил на ctrl+down

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

param=/ef "msg($0B, 0, 0) send(`{end}`) tcm(2054,1) send(`^(){down}`) msg($0B, 1, 0) tcm(2918)"
позиционирует курсор на первом файле после выделенных, на нем и остается курсор после MRT.
{end} ушли в конец списка
2054 - cm_GotoPrevSelected попали на последний выделенный
^() перед {down} - как бы "ловушка" для ctrl, чтобы срабатывал down, а не циклился ctrl+down
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
А ты можешь сделать, чтобы в tem запускались команды с параметрами, где задействован %A?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Они же и так запускаются. Или я чего-то не знаю? Для команды в tem можно указать параметры, и они будут подставлены тоталом вместо %A...

Например, юзер-команда em_Cd с командой cd и параметром %A. И можно делать так:

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

TCFS2 /ef "tem(`em_Cd c:\`)"
Или юзер-команда em_Exec с командой Exec.exe (из Virtual Panel) и параметром %A, и можно из TCFS2 запускать любые программы:

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

TCFS2 /ef "tem(`em_Exec notepad.exe d:\1.txt`)"
Аналогичным образом можно написать юзер-команды для смены набора колонок, загрузки шаблона синхронизации и т.п.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А если вместо notepad.exe указать полный путь до проги с пробелами в пути?

[cut]Кстати, а в чём прикол, что у тебя Exec занял ровно 1 Кб?[/cut]
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Там проблема с кавычками. Чтобы указывать полный путь с пробелами, надо этот путь в кавычки заключать. Но тогда это будет работать только из TCFS2.ini:

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

test=tem(`em_Exec "C:\Program Files (x86)\7-Zip\7zFM.exe" "F:\My Archive.7z"`)

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

TCFS2 /ei test
Я не придумал пока, как красиво добавить возможность вставки кавычек через командную строку.

Ещё тотал не поддерживает юникод в сообщениях вызова юзер-команд.

[cut]Да нет там прикола, всё нормально, минимум кода, точка входа переопределена, чтобы не включать CRT в файл, и секции кода и данных объединены. :) Когда секция всего одна, на заголовок хватает 512 байт, и секция уложилась в 512. В 64-битном варианте есть ещё неотключаемая секция, поэтому заголовок 1024 байта плюс две секции.[/cut]
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Но тогда это будет работать только из TCFS2.ini
Подобного как раз и требуется избежать, чтобы не плодить лишнего в конфигах (таких команд будет много). Хотя бы для начала без параметра к проге (аля notepad).
Отсутствие Юникода в данном случае совершенно не пугает.

[cut]Заголовок 512 + секция 512. Хм. Занятно.[/cut]
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

Сообщение MVV »

Да всё возможно, но не знаю, насколько это правильно игнорировать двойные кавычки внутри косых.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
Да нормально, пока подводных камней не вижу. Всё гуд. Спасибо.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Одно знаю точно - если в именах папок или файлов есть эти самые обратные апострофы, будут проблемы.
Или их в свою очередь надо игнорировать внутри двойных кавычек, которые внутри косых? :lol:
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Можно, конечно. Но не то чтобы очень нужно. :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить