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

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

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

sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Mint86 писал(а):получаю подробный режим отображения вместо краткого.
В таком случае плагин AutoRun в помощь. Можно принудительно установить краткий режим при загрузке тотала и даже сразу вызвать
TCFS2.exe "/ef tem(em_GoToPhoneBook) /ei sp_set_active(85)"
Flasher писал(а):С wfx ничего меняться не должно.
Попробуй с Phonebook.
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Ранее поднимал задачу по автоматической смене панели инструментов с возвратом через 15 секунд + "стопор", прерывающий смену (решалась в текущей теме, была затронута и другая смежная тема). Что получилось, напомню:

1. Автоматическая смена панели инструментов с возвратом через 15 секунд

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

/ei quick_bar

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

set_bar=if(#1 == 1, tem(em_1)) if(#1 == 2, tem(em_2)) if(#1 > 0, set_tcini(Layout, ButtonBar, 1), run_item(tb0)) set_tcini(TCFS2, Bar, #1), , set_bar(1)

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

quick_bar=set_tcini(TCFS2, #0, 0) run_item(set_bar, 1), test(tcini(TCFS2, Bar, #)==2) | set_tcini(TCFS2, #0, @sid) run_item(set_bar, 2) delay(15000) if(tcini(TCFS2, #0, # == @sid), run_item(set_bar, 1))
2. "Стопор"

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

/ei quick_bar_stop

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

quick_bar_stop=set_tcini(TCFS2, quick_bar, 0)
К сожалению, есть один нюанс. Очень часто я закрываю TC, будучи во второй панели, а когда его открываю, чтобы перейти на эту (вторую) панель мне приходиться запускать команду автоматической смены дважды. Loopback в своем Autorun как раз таки предоставил возможность, которой, считаю, необходимо воспользоваться. Какую команду выполнить Autorun-ом при закрытии TC, чтобы решить проблему?
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вообще, я давным давно писал плагин для Autorun.wdx, позволяющий выполнять команды при закрытии тотала (из батника).

Вряд ли тут так уж необходима возможность выполнять команды при закрытии тотала. Абсолютно одинаково, выполнять их при закрытии или при следующем открытии.

Судя по команде, она может не включить вторую панель только если tcini(TCFS2, Bar, #)==2. Не совсем понимаю, почему при запуске тотала там может быть 2, ведь по идее при закрытии тотала ожидающий экземпляр TCFS2 всё равно запишет туда 1... А решение по идее простое - при запуске тотала надо вызывать set_bar(1), или даже просто set_tcini(TCFS2, Bar, 1), т.к. панель и так тотал будет включать основную.
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

MVV писал(а):или даже просто set_tcini(TCFS2, Bar, 1)
Отлично, спасибо.
Надеюсь, на этом точка.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Я проверял с кнопки 1-й панели инструментов и после переходил без проблем на 2-ю, но, прописав команду в Autorun, ничего не изменилось. Я в тупике и, надеюсь, эта команда не выполняется - неверно её прописал в чужой среде.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Если вручную выполнить команду и потом запустить тотал, эффект должен быть таким же. Если работает, команда правильная. А запускается ли она - обсудим в теме по Autorun.

Я, кстати, имею в папке Windows маленькую программку msg.exe, которая просто показывает сообщение с командной строкой, переданной ей. И если надо проверить, выполняется ли команда, работает ли кнопка, вызывается ли аддон мультиарка и т.п., приписываю перед этой командой msg и выполняю. Хотя, в случае с плагином Autorun просто так не припишешь, т.к. имя программы и параметры разделены.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Слегка обновил TCFS2. Добавилась возможность записывать строки в INI (как есть, без какой-либо обработки), а также удалять ключи.

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

TCFS2 /ef "set_tcini(`Buttonbar`, `Buttonbar`, `%COMMANDER_PATH%\Bars\Default.bar`)"

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

TCFS2 /ef "set_tcini(MkDirHistory, 20, )"
Названия секции и ключа заключать в косые кавычки не обязательно, но это нужно, если они содержат пробелы.


Экспериментировал с получением дескрипторов активных окон тотала в TCFS2Tools, чтобы можно было посылать им сообщения из TCFS2, ничего путного пока не получилось. Функции GetFocus и GetActiveWindow тупо возвращают нули, если окна тотала не имеют фокуса. Получается, нужно вызывать их заранее, но в какой момент? По таймеру не хочется, а по событию потери фокуса не получается - это нужно перехватывать события каждого окна тотала. Думал о хуке, но нельзя поставить хук на процесс, можно лишь на поток (мало) или на рабочий стол (слишком много).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение MVV »

Вот текст из переменных/макросов бы добавлять туда - было бы вообще замечательно.
В переменных и макросах есть только числа. :) Остальное - скриптами/батниками генерировать командную строку.
Если вызывать команды ТС по SendMessage, то мы ждём когда окно активируется, потом уже будут срабатывать последующие функции и возращать то, что требуется.
Когда мы посылаем сообщения окну тотала, нам всё равно, активно ли оно. А здесь окно должно быть активным, чтобы можно было узнать, кто имеет фокус...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):В переменных и макросах есть только числа.
Они и нужны, только в комбинации с текстом. Например: `текст текст ` && макрос && ` текст`.
MVV писал(а):Остальное - скриптами/батниками генерировать командную строку.
Ну, скриптами вообще можно всё это без TCFS2 проделывать. Нам же нужно упрощение с записью в одну кнопку/команду и соотвествующая скорость отработки.
MVV писал(а):А здесь окно должно быть активным, чтобы можно было узнать, кто имеет фокус
Так я и пишу, что сперва окно активируется с запуском команды, а потом ему передаётся фокус.
Например, можно в такой команде притворить: tcm(508, 1), где 1 - это использование SendMessage и последующая передача рабочего фокуса.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение Flasher »

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

Сообщение MVV »

На момент, пока ты его пишешь - да. Но если делаешь паузу, другое окно может перехватить фокус...

Сидишь себе в тотале, браузишь папочки... тут вылетает на экран какая-нибудь скотина с тупым вопросом и хватает ентер, который предназначался тоталу для входа в очередную папку. :D Мышатник тут ехидно ухмыльнётся...

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

Сообщение Flasher »

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

Сообщение MVV »

Ты не понял. :) Задача у меня в том, чтобы можно было посылать сообщения окну, которое имеет фокус. Чтобы, например, можно было закрыть диалоговое окно тотала. Для этого нужно знать дескрипторы активного окна и активного контрола. А их можно получить только из такущего процесса, и только когда текущий процесс имеет фокус.
Ответить