Кнопка,работающая с учетом нажатых клавиш

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

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

Ответить
Аватара пользователя
Monarch-LFV
Сообщения: 360
Зарегистрирован: Пн июл 22, 2019 13:20

Кнопка,работающая с учетом нажатых клавиш

Сообщение Monarch-LFV »

Может быть уже была такая же тема (даже не может быть, а скорее всего): как сделать кнопку на панели, функции которой будут различными в зависимости от зажатых на клавиатуре клавиш. То есть, например, обычное нажатие на кнопку - выполняется одна команда, а с зажатым Shift’ом - другая. Если где-то уже обсуждалось прошу навести, так не смог найти.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Monarch-LFV
Нормальными способами никак не сделать. Из, скажем так, менее нормальных, известно, например, вот это. Я не пользовался и не собираюсь, так что — всяческих успехов в самостоятельном изучении, а с моей стороны больше никаких комментариев.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Помимо вышеупомянутого скрипта ButtonBar eXtended, ещё в TCFS2 есть такой функционал.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Monarch-LFV
Сообщения: 360
Зарегистрирован: Пн июл 22, 2019 13:20

Сообщение Monarch-LFV »

Avada
Спасибо за наводку, попробовал ее - не совсем то, что нужно, да и не работает с вертикальной панелью (в 2011 году ее еще не было).
LonerD
А вот про TCFS2 интересно, можно поподробнее, как сделать такую кнопку? Мануал не короткий, да и ветка содержит 128 страниц, искать нужное сложно.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Re: Кнопка на панели с разными параметрами

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

Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Monarch-LFV
Сообщения: 360
Зарегистрирован: Пн июл 22, 2019 13:20

Сообщение Monarch-LFV »

Вахмурка
О! То что нужно, спасибо!
Единственное, нужно заморочиться с созданием пользовательских команд, коих у меня будет немало.
Просто пользую консольную утилиту CPDF, для нее наделал много батников и, соответственно, кнопок с разным функционалом, но для каждой еще хотелось бы иметь вариации, типа:
1. Выходные файлы будут заменять исходные - просто нажатие
2. Выходные файлы записываются в отдельную папку - нажатие c CTRL
3. Выходные файлы записываются в ту же директорию, где исходные, но с добавлением суффикса в имени файла - нажатие с SHIFT
И еще нюанс, если в батнике прописать запрос на ввод данных, то при нажатии с CTRL или ALT или SHIFT - теряется фокус окна консоли (немного раздражает), поэтому надо придумывать батники без ввода - как всегда, костыли. :roll:
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

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

2Админ(ы)
Данную утилиту я нашел убей не помню на каком ресурсе, но сейчас найти не смог нигде (даже на totalcmd.net), кроме как у себя на диске. Почему бы не выложить ее на сайте?
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Monarch-LFV писал(а):А вот про TCFS2 интересно, можно поподробнее, как сделать такую кнопку?
Например, вот так оформляется выполнение двух em-команд, одна при простом нажатии левой кнопкой мыши, вторая - при одновременном зажатии ПКМ, СКМ, Ctrl или Shift.

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

[em_myCommand]
cmd=%commander_path%\Plugins\exe\TCFS2\TCFS2.exe /ef "tem(em_myCommand1), test(pressedCtrl || pressedShift || pressedMButton || pressedRButton) | tcm(em_myCommand2)"
В файле TCFS2.Core.ini можно дописать варианты с разными клавишами клавиатуры.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Обсуждается привлечение сторонних средств автоматизации, явно выходящие за рамки стандартного поведения. (К стандарту относится только поведение кнопки, выполняющей с разными клавишами команду cm_Pack, но об этом предостаточно сказано в других местах.) В "Общих вопросах" теме делать нечего, она переносится в "Автоматизацию". Заголовок вместо прежнего "Кнопка на панели с разными параметрами" сделан более вразумительным.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Откуда: Москва
Контактная информация:

Сообщение CaptainFlint »

Вахмурка писал(а):2Админ(ы)
Данную утилиту я нашел убей не помню на каком ресурсе, но сейчас найти не смог нигде (даже на totalcmd.net), кроме как у себя на диске. Почему бы не выложить ее на сайте?
В свойствах файла упомянут Zmy; подозреваю, что утилита написана этим участником. Он регулярно выкладывает тут всякие мелкие программки на мэйлрушное облако, с которого потом всё удаляет; скорее всего, это одна из них. Лучше обратиться к нему (правда, не помню, есть ли у него аккаунт на сайте; но если нету, можно завести).
Почему же, ё-моё, ты нигде не пишешь "ё"?
HEXFIX
Сообщения: 177
Зарегистрирован: Пт июн 25, 2010 19:54
Откуда: Калининград

Сообщение HEXFIX »

LonerD писал(а): Например, вот так оформляется выполнение двух em-команд, одна при простом нажатии левой кнопкой мыши, вторая - при одновременном зажатии ПКМ, СКМ, Ctrl или Shift.

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

[em_myCommand]
cmd=%commander_path%\Plugins\exe\TCFS2\TCFS2.exe /ef "tem(em_myCommand1), test(pressedCtrl || pressedShift || pressedMButton || pressedRButton) | tcm(em_myCommand2)"
В файле TCFS2.Core.ini можно дописать варианты с разными клавишами клавиатуры.
А возможна сцепка из трёх команд? Например, ЛКМ — выделить всё, Ctrl+ЛКМ — снять выделение, Shift+ЛКМ — восстановить выделение?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Да, возможна. Там можно указать произвольную последовательность действий, для некоторых из которых с помощью функции if() можно писать произвольные условия, а если просто один параметр какой-то функции в зависимости от условия, можно просто тернарным оператором воспользоваться. Вот три варианта сделать это (первый позволяет произвольные действия выполнять в каждом случае, второй и третий - только CM-команды):

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

; Зажат Ctrl - вызывается cm_ClearAll, а если Shift - cm_RestoreSelection, иначе - cm_SelectAll
TCFS2 /ef "if(pressedCtrl, tcm(524), if(pressedShift, tcm(529), tcm(523)))"
TCFS2 /ef "tcm(if(pressedCtrl, 524, if(pressedShift, 529, 523)))"
TCFS2 /ef "tcm(pressedCtrl ? 524 : (pressedShift ? 529 : 523))"
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Пример кнопки с TCFS2 + TCFS2Tools или вот ещё:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "if(pressedAlt, varset(1,1), varset(1,0)) tcm(524) tcm(517,1) eval(settext_wait(`Поиск файлов в каталоге под курсором`,findwnd(`TFindFile`))) if(varget(1)==0,sendmsg(findwnd(`TButton`,,findwnd(`TFindFile`),2),$F5))"

WCMICONS.DLL,47
Поиск файлов в каталоге под курсором |(без Alt - сразу после открытия диалога начать поиск)
Если при клике на кнопку не нажата клавиша Alt, то поиск в каталоге под курсором начнётся сразу (с текущими настройками). Для изменения настроек поиска в диалоге требуется дополнительное нажатие Alt.
P.S.
Случайно заметил, что команда "Поиск файлов в каталоге под курсором" (cm_SearchForInCurdir, а точнее её числовой индекс 517) работает и в старых версиях TC (даже в 4.03 - более древней под руками не оказалось). Тогда как упоминание о добавлении команды появилось лишь в версии 9.02 beta (15.06.16).
Ответить