Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

AltRun - запуск программ по кнопке с ctrl, shift и не только
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Thu Jan 27, 2022 17:16    Post subject: AltRun - запуск программ по кнопке с ctrl, shift и не только Reply with quote

Здравствуйте, собственно сделал утилиту, да так что теперь сложно описать, поэтому опишу процесс создания, что и зачем. Имеем ButtonBar Extended для создания многофункциональных кнопок в TC при кликах с зажатыми модификаторами ctrl, shift. Однако использовать её для запусков сторонних программ, скриптов и прочего не очень удобно, во-первых - приложения с интерфейсов при зажатом модификаторе запускаются не в фокусе, вкладка на панели задач есть, а само окно в фоне, во-вторых - хотелось бы настраивать функционал в самой кнопке, а не в отдельной ini, в-третьих - неплохо бы сохранить возможность drug’n’drop файлов на кнопку.

Вначале пришла идея примитивной утилиты, которую бы можно было использовать в bat файле, она банально передаёт через errorlevel какие модификаторы зажаты, но сразу столкнулся с первой проблемой при зажатом модификаторе окна отличные от консоли запускаются не в фокусе.

Пришлось написать полноценный лаунчер, который отслеживает окно запускаемой программы, т.к. через кнопку можно передать только аргументы запуска, то все настройки передаются именно ими. Ну а раз уж решил запускать программы, то сами нарисовались дополнительные функции и получился весьма странный лаунчер который можно использовать как совместно с TC, так и сам по себе. Из минусов отсутствует непосредственная интеграция с TC и запуск cm_ , em_ - комманд возможно только в связке например с TCFS2.

Итого:

AltRun - это прикладной лаунчер настраиваемый через ключи запуска

Основные функции:
- запуск программ, скриптов, пакетных файлов, открытие файлов в ассоциированных программах (далее цели запуска)
- передача параметров запуска и рабочего каталога запускаемому процессу
- запуск альтернативных целей при удерживании клавиш CTRL, ALT, SHIFT или правой кнопки мыши
- запуск дополнительных программ/скриптов до/после запуска основной цели
- запуск дополнительных программ/скриптов вместо запуска основной цели при её отсутствии или при наличии/отсутствии файла/папки триггера
- запрос прав администратора или подавление этого запроса
- запуск со свёрнутым или развёрнутым окном, скрытие окна
- системная блокировка клавиатуры/мыши на время запуска
- назначение переменных среды запускаемому процессу
- поддержка относительных путей и переменных среды в пути запуска
- запуск различных целей в зависимости от разрядности операционной системы
- автономный режим (возможность указать ключи запуска altrun в файле конфигурации или непосредственно в ресурсах altrun.exe используя любой редактор ресурсов исполняемых файлов)
- сквозная передача параметров запуска запускаемой программе/скрипту в автономном режиме

Вкратце можем получить, например, подобную кнопку:

Команда: altrun.exe
Параметры: --run=cmd.exe --ctrl=cmd.exe --ctrl-admin

Запустит cmd при клике и запустит cmd с запросом прав администратора про Ctrl+Клик

Репозиторий на гитхаб и страница релизов с последней версией и полной справкой

Надеюсь кому-либо пригодится, и заранее извиняюсь если ошибся разделом, т.к. хоть интеграции с TC и нет, но утилита создавалась именно для него изначально.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Fri Jan 28, 2022 07:09    Post subject: Reply with quote

lz57005
Спасибо, давно ждал такую утилиту. При тестировании нашел небольшой баг:
Code:
-r "%%windir%%\notepad.exe" -c "%%windir%%\notepad.exe"  -cp %P%N

Пареметры без кавычек, но при этом пути и файлы с пробелами отрабатывает как надо, но если в файле есть двойной пробел (да, такое тоже бывает), то в параметр передается только один пробел, второй куда-то отбрасывает. Например файл: "D:\test files\1 этаж__коридор между корпусами.txt"
Двойной пробел заменил подчеркиванием.
Насколько нужен файл "altrun_dbg.exe" в релизе? Какова его роль?
Back to top
View user's profile Send private message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Fri Jan 28, 2022 09:03    Post subject: Reply with quote

Monarch-LFV wrote:
lz57005
Пареметры без кавычек, но при этом пути и файлы с пробелами отрабатывает как надо

Это потому что в случае с TC в %P%N он сам добавляет кавычки если в пути есть пробелы.
Monarch-LFV wrote:
lz57005
Насколько нужен файл "altrun_dbg.exe" в релизе? Какова его роль?

Исключительно для отладки сложных кнопок и понимания какие параметры передаются и в каком виде, например вы можете приложить скрин бага с двумя пробелами.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Fri Jan 28, 2022 09:36    Post subject: Reply with quote

lz57005
Ну скрин бага прикладывать бессмысленно, сам прочитал что там, все то же, что и говорил: файл с двумя пробелами в имени лишается одного пробела и в параметрах передается только с одним пробелом. В багрепорте пишется файл с одним пробелом, при дальнейшем нажатии на Enter выводится сообщение, что такого файла не существует и указано имя с одним пробелом - оно и понятно.
Если рядом положить файл с таким же именем, но с одним пробелом, а курсор тем временем оставить на первом (с двумя пробелами) файле, то при нажатии на ctrl запустится файл с одним пробелом... вот такие фокусы))
Back to top
View user's profile Send private message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Fri Jan 28, 2022 10:20    Post subject: Reply with quote

Monarch-LFV
Что-то начудил, с парсингом командной строки, буду разбираться.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Fri Jan 28, 2022 11:16    Post subject: Reply with quote

lz57005
Еще, если возможно, может сделать синтаксис чуть попроще, вроде, конечно, и этот несложный, но было бы лучше, если б параметры можно было записывать без дополнительных ключей типа -p, -cp и т.п.
То есть, на прошлом примере, что-то вроде этого:
Code:
-r "%%windir%%\notepad.exe" -c "%%windir%%\notepad.exe %P%N"
Back to top
View user's profile Send private message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Fri Jan 28, 2022 12:15    Post subject: Reply with quote

Monarch-LFV
Баг, с несколькими пробелами решил, немного потестирую и выложу, спасибо за тест и фидбек.
По поводу упрощения подумаю, если не словлю quotes-hell), потому что уже пришлось ввести одинарные кавычки которые объединяют двойные, например -p '%P%S' для случая когда в списке выделенных файлов часть путей без пробела и без кавычек, а часть с пробелом и кавычками, аналогично если нужно передать программе некоторые собственные ключи с кавычками, и всё выглядит просто только в простейшем примере предложенном вами, а вот как только переходим к более сложным вещам разбор каждого ключа содержащего и программу и её собственные ключи и по разному раскрывающиеся переменные усложняет всю логику разбора, хотя возможно не с того угла смотрю, изначальный вариант показался логичным так как путь, параметры, рабочий каталог это базовые переменные на входе функции ShellExecuteEx, с помощью которой всё и запускается.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Sun Jan 30, 2022 21:13    Post subject: Reply with quote

Я пользуюсь аналогичной утилитой Pressed (автор Zmy). Заточена под ТС: запуск разных em_ и cm_ команд при зажатых модификаторах Ctrl, Alt, Shift и Win в разных комбинациях.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Mon Jan 31, 2022 02:46    Post subject: Reply with quote

Вахмурка
У упомянутой утилиты pressed основной недостаток - то, что приходится заводить много пользовательских команд в ini. В утилите AltRun настройка происходит в самой кнопке, что очень удобно. Пытался ещё давно написать zmy, но сообщение оставалось непрочитанным больше года. А утилиту AltRun совместными усилиями можно довести до идеала.
Back to top
View user's profile Send private message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Tue Feb 01, 2022 20:25    Post subject: Reply with quote

Monarch-LFV wrote:
А утилиту AltRun совместными усилиями можно довести до идеала.

Ну собственно, баг с пробелами пофиксил, объединять параметры запуска ради экономии на паре символов в кнопке думаю лишнее, а вот как реализовать запуск cm_, em_ нужен пример или описание логики.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Feb 02, 2022 09:26    Post subject: Reply with quote

lz57005
1. По запуску cm_, em_ не подскажу. ТС, к сожалению, не имеет параметров запуска для встроенных и пользовательских команд (наподобе totalcmd.exe /O /S /T). Можно попытаться реализовать как-то через командную строку ТС, там все команды воспринимаются.
2. А вот по поводу:
Quote:
приложения с интерфейсов при зажатом модификаторе запускаются не в фокусе, вкладка на панели задач есть, а само окно в фоне

Можно ли решить проблему? Действительно, не совсем удобно.
3. Еще, есть command line программы, которые в параметрах позволяют задавать произвольные данные вводимые пользователем. Например, у Winrar ключ -v создаёт многотомный архив, с ожиданием ввода размера разбития архива. Может сделать какой-нибудь ключ input для ввода пользовательских данных в параметры? Ну и пользовательское описание, в данном примере что-то типа "Введите размер тома:"
Back to top
View user's profile Send private message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Wed Feb 02, 2022 10:19    Post subject: Reply with quote

Monarch-LFV wrote:
Можно попытаться реализовать как-то через командную строку ТС, там все команды воспринимаются.

Например? Как я понял в том же tcfs2 используется winapi SendMessage, PostMessage для отправки сообщения с кодом команды TC, но моих навыков не достаточно чтобы с наскока разобраться в этом.
Monarch-LFV wrote:
Можно ли решить проблему? Действительно, не совсем удобно.

А у вас с этим проблемы? у меня 1 раз из 10 окно в фоне, что мог то сделал и так процесс altrun ожидает окно запускаемой программы и пытается несколькими командами вывести его в фокус, так же посылаются команды родительскому окну что-бы переместить его в фон.
Monarch-LFV wrote:
Может сделать какой-нибудь ключ input для ввода пользовательских данных в параметры? Ну и пользовательское описание, в данном примере что-то типа "Введите размер тома:"

хм, если осилю окно запроса на голом winapi, попробую, потому что если подключать визуал LCL в Lazarus, то это сразу + 1,8мб к размеру программы ради одного окошка.
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Wed Feb 02, 2022 11:38    Post subject: Reply with quote

lz57005 wrote:
А у вас с этим проблемы? у меня 1 раз из 10 окно в фоне

У меня где-то 50/50. Не понимаю от чего зависит, то ли от задержки, то ли еще от чего.
По вопросу InputBox - не обязательно, это просто предложение. Это вполне можно реализовать через батник и запускать его по альтернативному запуску.
Back to top
View user's profile Send private message
lz57005



Joined: 05 Mar 2020
Posts: 26

Post (Separately) Posted: Mon Apr 25, 2022 17:33    Post subject: Reply with quote

Monarch-LFV wrote:
У меня где-то 50/50. Не понимаю от чего зависит, то ли от задержки, то ли еще от чего.

Проверьте свежую версию, увеличил количество сообщений окнам и повторил после того как клавиша модификатор "отжата".
Back to top
View user's profile Send private message
Monarch-LFV



Joined: 22 Jul 2019
Posts: 227

Post (Separately) Posted: Tue Apr 26, 2022 01:46    Post subject: Reply with quote

lz57005
Спасибо, потестил немного, вроде пока отлично работает. Прошлый глюк с запуском в фоне пропал!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group