Autorun

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

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

Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

Сообщение Flasher »

А там нечего продумывать. Просто нужно, чтобы при использовании перезапуска command не срабатывал, иначе он не даст TC запуститься и убъёт все приложения, в то время как нужно перезапускать только TC. Тут именно функция плагина нужна, например, ключ Activate в ini, нулевое значение которого будет отключать выполнение команды плагина. В скрипте перезапуска я буду менять его на 0 до отключения ТС, по умолчанию (без ключа или при отсутствующем значении) и, самое главное, при запуске TC должно выставляться 1, либо ключ должен удаляться (я буду тогда строку добавлять, так даже проще).
Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.
Вроде просто. Сделаешь?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А не проще ли создать второй конфиг, который будет использоваться твоими скриптами? Или же использовать прямо этот инишник, если скриптовая среда позволяет работать с инишниками. Если в конфиге некоторый параметр равен 0, скрипты не будут ничего делать. Но скрипт при запуске будет это самое значение выставлять в 1 или удалять. Всё элементарно реализуется средствами твоей скриптовой среды - чтение и запись в текстовый файл. Просто лишняя строчка скрипта - выход, если запуск не разрешен.
Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.
В INI нет понятия строки. Есть понятия секции и ключа в секции. Порядок секций и строк в рамках секции значения не имеют, имеет значение лишь то, в какой секции параметр находится.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Если в конфиге некоторый параметр равен 0, скрипты не будут ничего делать.
А кто сказал, что они не будут ничего делать? При определённых условиях, которые я описал выше, они должны срабатывать в любом случае. Не писать же мне ещё один скрипт, который будет записывать строку. Зачем плодить для одной задачи лишнее?
MVV писал(а):В INI нет понятия строки. Есть понятия секции и ключа в секции.
В любом текстовом файле есть понятие строки. Мне всё равно, какое расширение будет у файла. Мне нужно условие: если последняя строка (ключ, не важно) = "Deactivate", то не выполнять команду.
И потом, я не могу скриптом запрещать выполнение команд плагина.
Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Для INI-файла понятие номера строки значения не имеет. Операции чтения-записи выполняются с помощью функций, которые принимают в параметры имя секции и имя параметра. При этом мне совершенно безразлично, из строки с каким номером данные будут считаны, и в строку с каким номером они будут записаны.

Я так понял, что у тебя нет средств для работы с INI-файлами, а у меня нет никакого желания читать файл вручную и искать там последнюю строку.
Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
Не вижу ничего плохого в том, что скрипт запустится, но ничего не сделает. Окон он не создает, просто втихаря завершится. Зато имеем универсальность.

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

Сообщение Flasher »

MVV писал(а):Я так понял, что у тебя нет средств для работы с INI-файлами, а у меня нет никакого желания читать файл вручную и искать там последнюю строку.
Непортабельное есть = Хелпер. Не вариант. Тебе не нужно читать файл, достаточно дописывать строку в конец. Меня это устроит. Либо пиши ключ без значения. Проверяй по его наличию. Мне будет проще, чем со значением.
MVV писал(а):Не вижу ничего плохого в том, что скрипт запустится, но ничего не сделает. Окон он не создает, просто втихаря завершится. Зато имеем универсальность.
Как раз неуниверсальность. Так как скрипты будут зависеть друг от друга. А мне бы этого не хотелось. Они вполне имеют право на отдельное существование.
MVV писал(а):Тебе всего-то надо перед перезапуском поставить где-либо (полная свобода действий) флаг перезапуска, в Unload-скрипте при наличии этого флага ничего не делать, а в Load-скрипте при его наличии также ничего не делать, но снимать его.
Я об этом, собственно, и писал выше:
Flasher писал(а):Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
Но как я уже объяснил, мне лучше иметь 2 файла, чем 3.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Не дело это - смешивать кучу способов работы с одним файлом.

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

Сообщение Flasher »

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

Сообщение MVV »

О какой куче и каком файле речь?
Речь о том, что если файл является INI-файлом, читать и писать его, как текстовый, не совсем корректно.

Скрипт, который будет перезапускать, и так должен будет записывать параметр - значит, он уже будет зависимым с плагином, куда бы ты не ставил флаг временной блокировки выполнения скриптов плагина. А скрипт, который запускает плагин, автоматически связан с самим плагином. Тут без зависимостей в любом случае никак. Но встроить эту зависимость в скрипт - куда более гибкий и универсальный способ, чем зашить в плагин.

Можно даже не писать ничего никуда, просто создай в папке плагина или вообще во временной папке пустой файл с именем вида $tc_restarting$, а после завершения рестарта удаляй. Имя логичное и понятное, и проверять наличие флага проще, чем читать файл.

А завести скрипты загрузки и выгрузки в один файл считаю вполне разумным - они ведь делают симметричные вещи:

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

If WScript.Arguments.Count > 0 Then
	Select Case WScript.Arguments(0)
	Case "Load"
		WScript.Echo "Load"
	Case "Unload"
		WScript.Echo "Unload"
	End Select
End If

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

[Load]
Command=Execute.vbs Load

[Unload]
Command=Execute.vbs Unload
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Речь о том, что если файл является INI-файлом, читать и писать его, как текстовый, не совсем корректно.
Так я же выше писал, что расширение меня не волнует Сделай с txt, мне какая разница.
MVV писал(а):Можно даже не писать ничего никуда, просто создай в папке плагина или вообще во временной папке пустой файл с именем вида $tc_restarting$, а после завершения рестарта удаляй. Имя логичное и понятное, и проверять наличие флага проще, чем читать файл.
Создание файла происходит дольше, чем удаление и перезапись одного слова. Не вижу смысла.
MVV писал(а):А завести скрипты загрузки и выгрузки в один файл считаю вполне разумным - они ведь делают симметричные вещи:
Не понимаю, к чему мне скрипт загрузки? Что он мне даст? Что я должен им загружать?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

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

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

Сообщение Flasher »

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

Сообщение MVV »

Да. Не вижу необходимости в хирургическом вмешательстве.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Сколько всего накопилось :)
HA3APET писал(а):Очень бы хотелось ключик для ShellExec, что бы если программа уже запущена (висит в процессах), она не запускалась.
Что-то команда и без этого уже неприлично разрослась... По-хорошему, не очень правильно этот функционал включать в команду, это надо бы проверять до попытки запуска. В Autoit для этого, например, есть функция ProcessExists. В общем, формально не против, но надо обдумать как.
LonerD писал(а):Раз сейчас нет такой возможности - то просьба на будущее ввести возможность обработки текстовых файлов (ini,cfg), в которых нет разделения на секции.
Вопрос "обработки" произвольных файлов слишком обширен. Что понимается под обработкой? Вставить после определенной строки или вставить по заданному смещению в файле? Вставить с замещением или нет? Файл бинарный или текстовый? Если текстовый, то какая кодировка файла?

Одной-двумя командами всё многообразие действий над файлами не покроешь. В общем, такие задачи все же лучше решать полноценным скриптовым языком.
LonerD писал(а):Поддерживается ли в операторах сравнения конъюнкция и дизъюнкция?
Нет. Может быть в будущем, но не в этой версии точно.
LonerD писал(а):Просьба включить в следующую версию переменную, определяющую язык запущенной ОС.
Можно подумать. Только в каком виде должно быть представление? Дело в том, что из системы нельзя получить напрямую коды языков в том виде, как принято в TC (RUS, DEU и т.д.).
MVV писал(а):Кстати, Loopback, как насчет добавления для функции ShellExec параметра /WAIT, позволяющего дождаться выполнения задачи перед выполнением следующей команды автозапуска?
Flasher писал(а):Я бы вообще ожидание по умолчанию сделал без всяких ключей.
MVV писал(а):Тогда добавить флаг /NOWAIT.
А другие запускают различные резиденты... Так что если уж делать, то пусть лучше /WAIT.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Можно подумать. Только в каком виде должно быть представление? Дело в том, что из системы нельзя получить напрямую коды языков в том виде, как принято в TC (RUS, DEU и т.д.).
Можно в отдельном плагине сделать функцию, которая будет возвращать число (или строковое представление числа). А брать это число из функции типа GetUserDefaultLCID (возвращает текущую ЛОКАЛЬ) или GetUserDefaultUILanguage (возвращает ЯЗЫК ИНТЕРФЕЙСА). И вообще можно информационный модуль сделать, который будет возвращать эти параметры, разрядность системы и т.п. :)
А другие запускают различные резиденты... Так что если уж делать, то пусть лучше /WAIT.
Пусть будет /WAIT. А можно сделать оба, и опцию, задающую поведение по умолчанию.
Ответить