Страница 98 из 130

Добавлено: Ср мар 11, 2015 22:04
MVV
Полностью согласен с Flasher. Если всё, что описывается во внутренних командах в конфиге, впихнуть в кнопку, она лопнет. :D

В самой утилите содержатся ровно те функции, что описаны в Readme. Это чтение и запись конфигурационных файлов, работа с окнами, отправка нажатий клавиш, смена каталога и т.п. Включать в неё полный перечень опций тотала никогда не было целью, наоборот была цель сделать её максимально гибкой, чтобы её можно было подстроить под любую версию тотала без перекомпиляции. Поэтому всё, что может быть описано прямым текстом, вынесено в конфиг, а сама утилита является его парсером. И командная строка тоже читается аналогично строкам конфига (параметры после /ef обрабатываются как правые части команд, /ei - как правые части действий).

Если совсем нечем заняться, можно укоротить конфиг, оставив лишь те команды, которые вызываются с кнопки, и их зависимости. Утилита, по идее, будет ругаться, если что-то не найдёт.

Добавлено: Вт апр 07, 2015 03:04
HA3APET
MVV
создал в контекстном меню папок через внутренние ассоциации пункт "Изменить атрибуты", командой для которого является:

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

"%commander_path%\Programm\TCFS2\TCFS2.exe" /u- /ef tcm(502)
Всё отлично, появляется нужное окошечко, но хотелось бы, что бы процесс TCFS2.exe завершался сразу после того, как вызовет это окно, а не после его закрытия.
Это возможно? Или может есть более простой способ решить мою задачу с контекстным меню...

Добавлено: Вт апр 07, 2015 07:09
sa
HA3APET
Не так
tcm(502, 1)
?

Добавлено: Вт апр 07, 2015 10:22
MVV
sa,
Строки с пробелами - обязательно в кавычки. И возможны два варианта асинхронной посылки:

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

TCFS2.exe /u- /ef "tcm(502, 1)"

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

TCFS2.exe /u- /ef "tcm(502, -1)"
HA3APET,
Контекстные меню через внутренние ассоциации не всегда удобны: беда тотала в том, что он не поддерживает объединение пунктов меню из разных шаблонов (если у тебя есть шаблон с пунктами для папок и шаблон для вообще всех объектов, будут отображаться только пункты первого).

Добавлено: Вт апр 07, 2015 10:46
sa
MVV писал(а):обязательно в кавычки
Упустил: проверял без пробела, а потом добавил его в посте для красоты.
возможны два варианта
При -1 процесс TCFS2.exe завершается как-то не сразу...

Добавлено: Вт апр 07, 2015 11:41
MVV
sa писал(а):При -1 процесс TCFS2.exe завершается как-то не сразу...
А, точно. Там же создаётся тред, и процесс в течение 100 секунд ожидает завершения работы тредов.

Добавлено: Вт апр 07, 2015 14:09
HA3APET
MVV
sa
Спасибо, здорово.
Да, немного не удобно, что TC не объединяет пункты из разных шаблонов, но пока удаётся это обходить.

Добавлено: Пт апр 24, 2015 20:54
Skif_off
Зашёл тут за сортировку по количеству файлов в папке, попробовал посылать

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

cm_SwitchDirSort: Сортировать каталоги: по имени/как файлы
cm_SrcCustomView5: Переключаем на пользовательский набор колонок номер 5
cm_SrcSortByCol3: Сортировать по третьей колонке в активной панели

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

%COMMANDER_PATH%\Utilities\TCFS2\TCFS2.exe
/ef "msg($0B,0) tcm(2012) tcm(275) tcm(6003) msg($0B,1) redraw()"
Крайняя команда ТС то срабатывает, то нет. Почему?

Добавлено:
DirSizeCalc не самый шустрый плаг, считать количество файлов - процесс небыстрый, сделал ход конём: убрал tcm(6003) :)

Добавлено: Пт апр 24, 2015 21:54
sa
Skif_off
Для себя назвал эту команду (cm_SwitchDirSort) немного по-другому:
Всегда сортировать каталоги по имени: вкл/выкл.
То есть эта команда из разряда переключателей. Поэтому, наверное и кажется: то сработает, то нет.

Добавлено: Пт апр 24, 2015 23:31
Skif_off
sa
О, спасибо, так и есть по-ходу: этот момент вообще упустил из виду.
Наверное, придётся переделывать, скриптом скорее всего - сортировка каталогов как файлов не нужна постоянно.

MVV
Что-то я немного затупил: tcm(xxx) посылают ТС SendMessage или PostMessage? И проверяется ли как-то результат?

Добавлено: Сб апр 25, 2015 01:18
Flasher
Skif_off
Может быть и так и сяк. Почитай ридми, там всё описано.

Добавлено: Сб апр 25, 2015 02:06
Skif_off
Flasher
В курсе, что можно и так и сяк, но не понял, как по умолчанию. Вот, допустим:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\*\TCFS2.exe
/ef tcm(2400)
wcmicons.dll,83
Пример


-1
Здесь что?

Пока писал, сообразил заглянуть в историю:
2010-06-11 v1.2
+ parameter added for msg function to send message using PostMessage instead of SendMessage
Получается, по умолчанию - SendMessage?

Я как Буриданов осёл, никак не решу, что правильнее использовать для встроенных команд ТС :)) Для пользовательских команд и WM_COPYDATA с 'G'+256*'W' в AutoIt использую SendMessageW, для встроенных - PostMessage, но периодически выношу мозг сомнениями (хотя пока и не сталкивался с какими-то проблемами). Для некоторых (открывающих окна, например) PostMessage, кажется, будет правильнее.

Добавлено: Сб апр 25, 2015 02:21
Flasher
Skif_off писал(а):Получается, по умолчанию - SendMessage?
Да, с ожиданием результата в отличии от ситуации, когда подставляем значение < 0.
Skif_off писал(а):никак не решу, что правильнее использовать для встроенных команд ТС
При вызове окон - PostMessage, в остальных случаях - зависит от ситуации. Да и параметр был бы не нужен, если бы достаточно было одного решения.

Добавлено: Сб апр 25, 2015 02:54
Skif_off
Flasher писал(а):При вызове окон - PostMessage, в остальных случаях - зависит от ситуации.
Да, с окнами PostMessage разумнее, что-то я поторопился, исправил пост, а с критериями выбора проблема. В общем, оставлю пока PostMessage дефолтным, пусть ТС сам разбирается с очередью.

Добавлено: Сб апр 25, 2015 21:03
MVV
Вообще, по идее правильнее SendMessage, но тотал обрабатывает и PostMessage. Иногда PostMessage приводит к неправильным результатам. Собственно, если асинхронность не нужна, лучше SendMessage (режим 0 для tcm), если нужна, то сначала попробовать PostMessage (режим 1 для tcm), а если работает плохо - то SendMessage в фоне (режим -1 для tcm).

А для переключателя сортировки каталогов по имени можно делать проверку значения в wincmd.ini, чтобы не вызывать команду, если режим уже в нужном положении, как это сделано с кучей других ключей:

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

[Macros]
areDirsSortedByName=tcini(Configuration, SortDirsByName, 1, 1)
И тогда гарантированно отключать сортировку по имени так:

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

TCFS2 /ef "if(areDirsSortedByName, tcm(2012))"
Ну или раскрыть макрос, чтобы не надо было вписывать его в конфиг:

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

TCFS2 /ef "if(tcini(Configuration, SortDirsByName, 1, 1), tcm(2012))"