Autorun
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Плагины Total Commander

#1: Autorun Author: Loopback PostPosted: Thu Apr 22, 2010 16:06
    —
Проект начинался с небольшого плагина MoveButton, позволявшего переместить кнопку опций в диалоге копирования. Затем возникла идея получить возможность выполнять некоторые дополнительные действия при запуске Total Commander: запускать приложения и отправлять команды. В результате появился Autorun. Изначально его даже не планировалось развивать, однако постепенно он обрастал всё новыми и новыми функциями и сейчас может делать множество полезных действий:


Подробнее можно прочитать в онлайн-справке или справке из дистрибутива.

Скачать на Wincmd.ru

Список доступных плагинов и библиотек

Включенные в дистрибутив

ModifyDialogs (бывший MoveButton)
Предназначен для небольших косметических изменений вида диалогов Total Commander. Можно производить следующие действия: перемещение и изменение размеров самого диалога, перемещение и изменение размеров элементов управления диалога, центрирование диалогов относительно главного или родительского окна, сохранение и загрузку позиций и размеров окна.

Process
Различные функции для работы с процессами: проверка существования процесса, завершение процессов, число процессов, получение вывода процесса.

Sysinfo
Дополнительные функции для получения системной информации: системных метрик и цветов, информации о процессоре, выполнение WMI-запросов.

Tweaks
Плагин включает некоторые дополнения для работы с интерфейсом Total Commander: назначение действий на нажатие кнопок мыши (и вращение колеса) для различных элементов главного окна TC (в том числе отображение своих контекстных меню на основе *.mnu или *.bar файлов), установка заданных элементов главного меню в неактивное состояние.

От других авторов

TCFS2Tools (Автор - MVV)
Позволяет управлять главным меню окна ТК:

ScrollTC (история версий, автор - GreIVI) (доступен только в 32-битной версии)
Дает возможность при наведении указателя мыши прокручивать колесиком в любом из отображаемых на экране окон приложений любой активный/неактивный компонент с полосой прокрутки.


Last edited by Loopback on Sat May 30, 2020 23:53; edited 9 times in total

#2:  Author: sa PostPosted: Thu Apr 22, 2010 17:40
    —
Loopback wrote:
Кому понравится - пользуйтесь

Установил вместо Movebutton. Попробовал на скорую руку все типы команд.
Работает, спасибо!

#3:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Apr 22, 2010 18:01
    —
Quote:
Его значение всегда устанавливается в -1, так что выражение сравнения составляйте так, чтобы результат всегда был False (=0, >0, >-1, <>-1 и т.д.), иначе все файлы будут раскрашены Smile.

А не проще возвращать не число -1, а тупо в функции ContentGetValue возвращать значение ft_nosuchfield? Тогда независимо от возвращенного значения никакой оператор сравнения не будет работать - и раскраски не будет.

А так вроде прикольно, нужные действия можно сделать. И переменные окружения задаваться будут в окружении ТК.

И размерчик наш - не несколько сотен кило. Smile

#4:  Author: Loopback PostPosted: Thu Apr 22, 2010 20:22
    —
Quote:
А не проще возвращать не число -1, а тупо в функции ContentGetValue возвращать значение ft_nosuchfield?

Хм, надо попробовать, что-то я ft_nosuchfield упустил.

Quote:
И размерчик наш - не несколько сотен кило.

Да я сам люблю мелкие программы. А при таком функционале использовать VCL - даже как-то неудобно Smile

#5:  Author: Loopback PostPosted: Mon Apr 26, 2010 16:44
    —
Небольшое обновление плагина. По совету MVV переделал функцию ContentGetValue, теперь не имеет значения, с чем сравнивать результат поля. И добавил поддержку способов отображения окна для команд запуска (скрытый/свернутый/развернутый) - важная вещь, про которую как-то забыл.

Ссылка в первом посте.

#6:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Jun 04, 2010 12:13
    —
Тут вопрос возник.
В Readme-файле кто-то wrote:
ShellExec <имя файла> [<параметры> [<рабочая папка> [<отображение=1>]]]

Вопрос вот в чем - как плагин узнает, где заканчиваются параметры и начинается рабочая папка? Логично предположить, что параметры, как и рабочую папку, надо брать в кавычки. Но тогда имеем следующий нюанс - получается, нельзя передавать как параметр строку, содержащую кавычки. Или можно?
Например, мне надо передать следующую строку как параметр:
Code:
/t"ку ка ре ку" /c"бла бла бла" /p"хренотень"

И при этом указать рабочую папку "C:\Documents and Settings\All Users". Это реально?

Проблема в том, что открывающая кавычка неразличима с закрывающей, и понять, закрываем ли мы параметр, или указываем открывающую вложенную кавычку, невозможно. Пока я не додумался юзать фигурные скобки для задания вложенности скриптов в Virtual Panel, это было реальной проблемой.
Когда я писал AskParam, я тоже сталкивался с подобной проблемой, когда нужно было установить в предлагаемый текст строку с кавычками, для этого пришлось добавлять специальный символ ^, который заменяется на кавычку (и параметр для его переназначения при необходимости).
Здесь, кстати, возможен еще вариант эскейпинга символов. То есть, для указания кавычки внутри параметра использовать последовательность \". Здесь это возможно, потому что строка параметров задается в конфиге, а не передается от другой программы. При использовании этого приема строка вызова программы с вышеуказанными параметрами и рабочей папкой будет выглядеть следующим образом:
Code:
ShellExec что-то-там.exe "/t\"ку ка ре ку\" /c\"бла бла бла\" /p\"хренотень\"" "C:\Documents and Settings\All Users"

#7:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Jun 04, 2010 17:25
    —
Кстати, родилась еще одна идея, которая кому-то точно понравится.

Можно добавить команду LoadLibrary, которая будет загружать в память указанную библиотеку. Этого уже будет достаточно для того, чтобы появилась возможность писать плагины к плагинуSmile от такого плагина требуется лишь одна фукция DllMain, в которой он на DLL_PROCESS_ATTACH будет инициализировать и запускать себя, а на DLL_PROCESS_DETACH - финализировать. При загрузке такого плагина нужно лишь запомнить его дескриптор, чтобы при выгрузке Autorun выгрузить и плагин.

То есть, от твоего плагина требуется лишь объявить глобальный список дескрипторов (типа HMODULE) и при выполнении команды LoadLibrary вызывать функцию LoadLibrary для указанного имени файла, а результат помещать в список, если запуск успешен. При выгрузке плагина просто достаешь все элементы списка и вызываешь для них FreeLibrary. Элементарно. Smile

Как первый пример плагина для плагина я вижу библиотечку, которая будет позволять отображать и скрывать в рантайме меню окна тотала, при этом еще и показывать это меню по хоткею (или кнопке панели инструментов). Идея родилась при обдумывании сокрытия меню в TCFS2 (из стороннего приложения обнулять дескриптор меню - не очень хорошая мысль).

#8:  Author: Loopback PostPosted: Fri Jun 04, 2010 23:10
    —
MVV wrote:
Например, мне надо передать следующую строку как параметр:
И при этом указать рабочую папку "C:\Documents and Settings\All Users". Это реально?

Да, для этого есть возможность использовать одинарные кавычки. Парсер запоминает, с какой кавычки начинается параметр и кавычки другого типа считает вложенными. Смешанные кавычки использовать нельзя, это указано в ридми.
Про эскейп, разумеется, думал (либо про вариант, как сделано в Autoit - кавычки того же типа, как открывающие, внутри строки задваиваются), но решил всё не усложнять, поскольку это все же очень большая редкость, когда параметр содержит кавычки разных типов одновременно.
MVV wrote:
Кстати, родилась еще одна идея, которая кому-то точно понравится.

Мне нравится Smile Это с успехом позволит добавить автозагружаемый функционал без необходимостии добавлять новые цветовые схемы.
А в принципе, можно и вызовы пользовательских функций добавить. Плагин может вызывать некую заданную функцию для получения имен пользовательских функций, и далее, при обнаружении такой в файле конфигурации, вызывать ее и передавать ей параметры - в виде простой неразобранной строки или массива параметров-строк.

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Jun 05, 2010 08:49
    —
Quote:
Парсер запоминает, с какой кавычки начинается параметр и кавычки другого типа считает вложенными.

Ой, этого я не заметил. Тогда мой бред про кавычки можно забыть. Smile
Все мои случаи парсили стандартную строку параметров, где одинарные кавычки не приняты, поэтому приходилось извращаться. А если у тебя можно заключить строку в одинарные, и использовать в ней двойные - отлично. Кстати, можно добавить возможность вставки кавычки, с которой начинался параметр, указанием двух таких кавычек (например, в строке '/t"Символ ''a'':"' буква a будет обрамляться в одинарные кавычки).

Quote:
Это с успехом позволит добавить автозагружаемый функционал без необходимостии добавлять новые цветовые схемы.

Так о чем и речьSmile можно будет и твои мышиные команды в модуль выделить, чтобы авторан был чисто автораном.

Ну, я думал и про вызов функции без параметров из DLL. Правда, тут возникает вопрос - что делать после вызова функции - выгружать DLL или нет? Хотя, можно добавить параметр-флаг выгрузки модуля после вызова функции. Например, чтобы загрузить DLL, вызвать функцию и выгрузить DLL после завершения функции:
Code:
LoadLibrary /U myplugin.dll auto_func_1

Оставшиеся в памяти DLL помещаешь в список и выгружаешь при выгрузке своего плагина, а те, которые сразу - сразу после завершения функции. Кстати, можно добавить еще параметр - выполнять функцию из DLL в параллельном потоке, чтобы она не замораживала загрузку. При этом можно добавить еще один параметр - задержку загрузки, чтобы параллельный поток немного пододжал перед загрузкой DLL. Типо,
Code:
LoadLibrary [/U] [/T] [/D1000] <dll_name> [<func_name>]


Все-таки я схожусь к мысли, что необязательные параметры типа добавления/замены текста переменной удобнее добавлять в начале параметров через слэш, так проще парсить, и потом, так число необязательных параметров может быть любым:
Code:
SetEnv [/A] <имя переменной> <текст переменной>

#10:  Author: Loopback PostPosted: Sat Jun 05, 2010 09:53
    —
MVV wrote:
Кстати, можно добавить возможность вставки кавычки, с которой начинался параметр, указанием двух таких кавычек

Ну я уже и писал, думал об этом, но пока решил не усложнять.
MVV wrote:
Ну, я думал и про вызов функции без параметров из DLL. Правда, тут возникает вопрос - что делать после вызова функции - выгружать DLL или нет?

Ок, обдумаем.
MVV wrote:
Все-таки я схожусь к мысли, что необязательные параметры типа добавления/замены текста переменной удобнее добавлять в начале параметров через слэш, так проще парсить, и потом, так число необязательных параметров может быть любым:

Для парсера в данном случае важен порядок параметров. Если возникнет необходимость множества необязательных параметров - можно будет подумать над изменением.

#11:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Jun 05, 2010 11:53
    —
Quote:
Для парсера в данном случае важен порядок параметров.

Я бы писал парсер строк отдельно, и отдельной функцией сам алгоритм обработки команды, тогда порядок вообще не имеет значения, главное не запутаться, какой параметр за что отвечает - с именованными параметрами запутаться сложно.

#12:  Author: Loopback PostPosted: Sat Jun 05, 2010 22:50
    —
MVV wrote:
Я бы писал парсер строк отдельно, и отдельной функцией сам алгоритм обработки команды

Так оно в принципе и есть, из функции обработки вызывается нужное число раз парсер, который каждый раз забирает из командной строки один параметр (наподобие стека), т.е. по-порядку. В случае введения именованных параметров, нужно будет дополнительно проверять, является ли параметр именованным, и если нет, дальнейшие параметры обрабатывать как раньше.

#13:  Author: Loopback PostPosted: Mon Jun 14, 2010 19:46
    —
Ну вот, в первом приближении реализовал. Склоняюсь к мысли перейти для флажков к именованным параметрам, это будет следующий шаг.

Пока же добавил функцию "LoadLibrary", которая работает в двух режимах: просто загружает dll (c опциональным вызовом функции), либо инициализирует ее как плагин. Подробности в ридми.

Пока бета: Скачать

#14:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jun 15, 2010 16:39
    —
Надеюсь, успею запостить, пока форум в очередной раз за сегодня не сдохнет... Smile

LoadLibrary и вызов функции, а также выгрузка DLL (сразу или при выгрузке плагина) работают нормально.

А вот с Autorun_PluginInit какой-то косяк - вызывается она явно не как __stdcall, также я пробовал __fastcall и __cdecl, ни при одном из них я не нахожу в стеке этих параметров на нужном месте. Ерунда какая-то. Кстати, какой размер буфера - чему равна MaxListSize (может, хоть ее найду)?

Корректные прототипы функций:
Code:
void __stdcall Autorun_PluginInit(const AutorunInfo* Info, char* FuncList, int MaxListSize);

int __stdcall Autorun_ExecFunc(const char* FuncName, const char** Param, int ParamCount);

(тип вызова указывается после типа возвращаемого значения, и с двумя символами подчеркивания)

И вопрос - что такое HModule nProcID? В Си нет такого типа, но есть тип HMODULE (регистр в Си важен). Но я вообще не въеду, что с этим хэндлом можно делать. Зачем он? Идентификаторы процесса и потока можно получить прямо из DLL, хэндл модуля загруженной библиотеки ей передается в DllMain, дескриптор окна ТК передается плагином (кстати, ты окно ищешь с учетом его принадлежности текущему процессу? Smile). Не представляю, какие еще могут понадобиться дескрипторы для работы. А если и могут, то DLL их по идее может получить так же точно, как и твой плагин.

Также плохо понятно (хотя смотрится интересно), зачем добавлять функции из DLL в список. Их потом можно прямо из конфига запускать? Потестить фичу по вышеизложенным причинам не удалось. В любом случае, Autorun-скрипт выполняется при запуске ТК, то есть, крайне малое время, так что смысл в возможности вызывать функции по именам видится слабо. Кстати, любую DLL можно загружать любое число раз - при этом система сама поймет, что DLL уже загружена, и просто передаст ей управление (вызовет DllMain с параметром DLL_THREAD_ATTACH) - я к тому, что можно написать LoadLibrary MyDll.dll MyFunc несколько раз - и DLL будет по-настоящему загружена лишь раз, а функция будет вызвана нужное число раз.

#15:  Author: Loopback PostPosted: Tue Jun 15, 2010 23:47
    —
MVV wrote:
А вот с Autorun_PluginInit какой-то косяк - вызывается она явно не как __stdcall, также я пробовал __fastcall и __cdecl, ни при одном из них я не нахожу в стеке этих параметров на нужном месте. Ерунда какая-то. Кстати, какой размер буфера - чему равна MaxListSize (может, хоть ее найду)?

Точно, косяк. Не объявил прототип вызывамой функции как stdcall. Перезалил, должно работать.
MVV wrote:
Корректные прототипы функций:

Спасибо, делал по памяти, позабыл уже.
MVV wrote:
И вопрос - что такое HModule nProcID? В Си нет такого типа, но есть тип HMODULE (регистр в Си важен). Но я вообще не въеду, что с этим хэндлом можно делать. Зачем он?

Согласен, передавать результат вызова одной стандартной функции - излишество Smile Уберу.
MVV wrote:

дескриптор окна ТК передается плагином (кстати, ты окно ищешь с учетом его принадлежности текущему процессу? ).

Конечно.
MVV wrote:

Не представляю, какие еще могут понадобиться дескрипторы для работы. А если и могут, то DLL их по идее может получить так же точно, как и твой плагин.

Могут, конечно, но почему бы не передать некоторые данные, поиск которых занимает некоторое время, но которые уже найдены?
Собственно идея была именно в этом. Если возникнут какие-нибудь мысли насчет такой информации - можно ее добавить в структуру.
MVV wrote:
Также плохо понятно (хотя смотрится интересно), зачем добавлять функции из DLL в список. Их потом можно прямо из конфига запускать?

Это не "реальные" экспортируемые функции dll. Например, плагин сообщает, что он поддерживает некую функцию "MyFunc". Мы можем это имя использовать в скрипте, причем с неограниченным количеством параметров. Autorun парсит строку и вызывает из соответствующего плагина функцию Autorun_ExecFunc, которой передает имя MyFunc и массив параметров. Что с этим делать дальше - зависит от автора плагина.

#16:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jun 16, 2010 14:08
    —
Quote:
Могут, конечно, но почему бы не передать некоторые данные, поиск которых занимает некоторое время, но которые уже найдены?
Собственно идея была именно в этом. Если возникнут какие-нибудь мысли насчет такой информации - можно ее добавить в структуру.

Кстати, сделай первым членом структуры поле с ее размером. Тогда плагин сможет по размеру структуры понять, присутствует ли нужное ему поле в структуре - например, если плагин используется в более старой версии. Этот часто использующийся прием несложен и в то же время удобен (в интерфейсе плагинов ТК он тоже используется).

Quote:
Autorun парсит строку и вызывает из соответствующего плагина функцию Autorun_ExecFunc, которой передает имя MyFunc и массив параметров.

Ага, так идея виртуальных функций смотрится еще интереснее, хотя все равно использоваться это будет лишь при запуске ТК. Осталось как следует описать это делоSmile кстати, по-английски бы тоже описать и выложить на wincmd.ru.

Кстати, для примера ты можешь свою movebutton вынести в плагин, а в пример конфига вставить команду для загрузки. Smile

Проблема с загрузкой DLL пока следующая: DLL загружается и выгружается в основном потоке, поэтому все, что выполняется в функции DllMain, выполняется в основном потоке - например, если добавить туда отображение сообщения, ТК будет висеть, пока не нажмешь ОК. А в экспортируемой функции, вызываемой после загрузки DLL, все ок. Это надо документировать.

#17:  Author: Loopback PostPosted: Wed Jun 16, 2010 21:56
    —
MVV wrote:
Кстати, сделай первым членом структуры поле с ее размером.

Разумно. Сделаю.
MVV wrote:
Ага, так идея виртуальных функций смотрится еще интереснее, хотя все равно использоваться это будет лишь при запуске ТК. Осталось как следует описать это дело кстати, по-английски бы тоже описать и выложить на wincmd.ru.

Зато универсально при минимуме кода Smile
Всё опишу, разумеется, но чуть позже.
MVV wrote:
Кстати, для примера ты можешь свою movebutton вынести в плагин, а в пример конфига вставить команду для загрузки.

Это в планах.

#18:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Jun 17, 2010 23:38
    —
Вот уж не знаю, что твой плагин делает, но хуки после него ставить ваще нереально... Exclamation

#19:  Author: Loopback PostPosted: Fri Jun 18, 2010 00:25
    —
MVV
Ну не знаю... ничего особенного, а уж тем более связанного с хуками. В чистом виде после загрузки, плагин только получает пути тотала из переменных, окно текущей копии тотала через EnumWindows и список команд из TOTALCMD.INC. Далее стартует новый поток, в котором выполняются команды. Собственно, всё.

#20:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Jun 18, 2010 10:15
    —
Да я и сам понимаю, что всё, но как видишь... И прямо из DllMain пробовал вызывать функцию инициализации, и из твоего плагина (в отдельном потоке). Попробовать еще интереса ради загрузить DLL, из которой загрузить эту DLL...

Кстати, а зачем через EnumWindows? Куда проще маленький цикл с FindWidnowEx, где проверять принадлежность окна процессу. И callback-функция не нужна.

Code:
bool GetMainWnd(bool Override=0) {
   if (hMainWnd&&!Override) return 0;
   HWND hwnd=0;
   DWORD pid=GetCurrentProcessId(), wndpid;
   while (hwnd=FindWindowEx(0, hwnd, L"TTOTAL_CMD", 0)) {
      GetWindowThreadProcessId(hwnd, &wndpid);
      if (pid!=wndpid) continue;

      hMainWnd=hwnd;
      return 1;
   }

   return 0;
}

(на Delphi будет примерно то же самое)

#21:  Author: Loopback PostPosted: Sat Jun 19, 2010 19:34
    —
MVV wrote:
Кстати, а зачем через EnumWindows?

Да теперь уже и не вспомню...


В общем, вторая бета: скачать.

Поменял обработку необязательных параметров - вроде да, стало удобнее. За счет этого ликвидировал команду SetOption. MoveButton вынесена в отдельный плагин к плагину Smile

#22:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Jun 19, 2010 21:46
    —
Во, уже приличное описание. И необязательные параметры теперь указывать куда удобнее.

Предлагаю называть плагины так: Autorun_MoveButton.dll, Autorun_HideMenu.dll и т.п., чтобы подчеркнуть их принадлежность к автозапуску.

Еще предлагаю в первом посте добавлять ссылки на модулиSmile например, на этот пост с моим Autorun_HideMenu.

#23:  Author: Loopback PostPosted: Sun Jun 20, 2010 00:06
    —
MVV wrote:
Предлагаю называть плагины так: Autorun_MoveButton.dll, Autorun_HideMenu.dll и т.п., чтобы подчеркнуть их принадлежность к автозапуску.

Не возражаю.
MVV wrote:
Еще предлагаю в первом посте добавлять ссылки на модули например, на этот пост с моим Autorun_HideMenu.

Извините, старые сообщения могут редактировать только модераторы
Надо просить разблокировать Smile

#24:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jun 20, 2010 00:13
    —
Loopback wrote:
Надо просить разблокировать Smile

Тут просить. И потом поддерживать актуальную инфу в первом постеSmile

А вообще, как уже упоминалось, надо сделать хоть какую английскую документацию - и на wincmd.ru.


Last edited by MVV on Sun Jun 20, 2010 08:29; edited 1 time in total

#25:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Jun 20, 2010 00:26
    —
Loopback wrote:
Надо просить разблокировать

Достаточно написать, например, мне в личку — что в какое место поста и в каком виде добавить.

MVV wrote:
А вообще, как уже упоминалось, надо сделать хоть какую английскую документацию - и на wincm.ru.

Всецело подерживаю.

#26:  Author: Loopback PostPosted: Sun Jun 20, 2010 01:03
    —
MVV wrote:
А вообще, как уже упоминалось, надо сделать хоть какую английскую документацию - и на wincm.ru.

Обычно я с английской и начинаю, но тут сначала для широкого распространения не планировалось. Не проблема, к релизу напишу.

Avada wrote:
Достаточно написать, например, мне в личку — что в какое место поста и в каком виде добавить.

Да это понятно, но хотелось бы просто иметь возможность редактировать первый пост и модераторов по каждой правке не дергать.

#27:  Author: CaptainFlintLocation: Москва PostPosted: Sun Jun 20, 2010 01:24
    —
Разблокировал. Но вообще, на будущее, выше дали ссылку на тему, где надо постить запросы на разблокировку. Так будет быстрее и с гарантией, т.к. в ворохе обсуждений я могу и проглядеть, что кому-то там понадобилось править старый пост.

#28:  Author: Loopback PostPosted: Sun Jun 20, 2010 16:41
    —
CaptainFlint
Спасибо.
Я ссылку видел, решил просто заняться этим завтра (т.е. теперь уже сегодня).

#29:  Author: Loopback PostPosted: Tue Jun 22, 2010 00:46
    —
Выложил плагин на wincmd.ru, теперь его постоянное место там.

В релиз добавил функцию IniWrite, идея которой возникла после прочтения этой темы, и которая, как мне кажется, может быть весьма востребована авторами сборок Smile

#30:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jun 22, 2010 07:29
    —
Loopback wrote:
Выложил плагин на wincmd.ru, теперь его постоянное место там.

Замечательно, что это наконец-то произошло.

#31:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jun 22, 2010 10:12
    —
Рано радовался. Crying or Very sad При установленном и штатно работающем Autorun (конфигурация по умолчанию) применение команды cm_UnloadPlugins молча закрывает Тотал. Для меня это делает использование плагина при всех его достоинствах невозможным. Вынужден вернуться на MoveButton, отказавшись (надеюсь, временно) от прочего функционала.
(Собственно, это происходило и в самой первой версии Autorun, но тогда я по запарке не уделил этому на форуме должного внимания, а просто тихо откатился на прежний плагин.)

#32:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jun 22, 2010 10:28
    —
Avada wrote:
Рано радовался. Crying or Very sad При установленном и штатно работающем Autorun (конфигурация по умолчанию) применение команды cm_UnloadPlugins молча закрывает Тотал.

Подтверждаю. Но только при загруженном Autorun_MoveButton.dll, причем, не просто загруженном, а активном. Если закомментировать строчку MoveOptionsButton MOVE_LEGACY в конфиге, вылет уже не происходит.

#33:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jun 22, 2010 12:08
    —
MVV
Благодарю за уточнение, это позволяет в качестве временного решения хотя бы распределить нужный функционал между двумя плагинами.

#34:  Author: Loopback PostPosted: Tue Jun 22, 2010 15:40
    —
Исправил.

Использовал альтернативный RTL, и похоже в нем баг. В итоге Autorun_MoveButton просто не получал сообщение DLL_PROCESS_DETACH и не уничтожал поток.

#35:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jun 22, 2010 15:44
    —
Подтверждаю, что работает без вылетов. Win7x64. Cool

Я в своей HideMenu вообще CRT не использовал, чистый API, потому ни глюков, ни избыточного кода. Smile

#36:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jun 22, 2010 16:38
    —
Тоже подтверждаю, что вылета больше нет. WinXP SP3.

#37:  Author: Loopback PostPosted: Tue Jun 22, 2010 21:54
    —
MVV wrote:
Я в своей HideMenu вообще CRT не использовал, чистый API, потому ни глюков, ни избыточного кода.

К сожалению, в Delphi совсем отключить использование RTL дело не очень тривиальное, поскольку в этом случае теряется возможность работать с некоторыми стандартными заголовочными файлами, в том числе Windows, где прописаны прототипы функций WinAPI. А так MoveButton тоже на чистом WinAPI.

#38:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jun 23, 2010 20:46
    —
По поводу добавления переменных.
Запускаю Тотал с подключённым Autorun. Смотрю переменные (cmd /k set или FS-плагин Environment Variables). В хвост значений переменной Path действительно добавилось C:\Totalcmd.
Перезапускаю TC (выполняется кнопкой, я использую ReloadTC). Снова смотрю список переменных. Теперь там в конце уже две штуки — C:\Totalcmd;C:\Totalcmd. Если повторять перезапуск, то до настоящего закрытия TC этот хвост будет наращиваться. То же самое происходит и после применения команды cm_UnloadPlugins.
В принципе, работать это не мешает, но я не уверен, что такое поведение правильно.

#39:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jun 23, 2010 23:00
    —
Кстати, да, мысль верная. Но тут надо подумать, что можно сделать. Ведь плагин должен как-то определить, что его черное дело уже выполненоSmile откуда он знает, что его запускают из окружения, где переменные уже обновлены. И откуда он знает, не изменились ли значения переменных после того как он их изменял... Тут палка о двух концах... Exclamation

#40:  Author: Loopback PostPosted: Wed Jun 23, 2010 23:08
    —
Avada
Да, переменные же наследуются... Из тотала вызвали ReloadTC, из него опять тотал - а переменная осталась та же, и авторан опять добавляет строку. С выгрузкой плагинов тем более понятно.

Это, конечно, не очень хорошо. Но в принципе эта проблема касается только переменных окружения. Пожалуй, стоит изменить поведение по-умолчанию при параметре /A, чтобы текст не добавлялся, если такой уже есть в конце переменной. А если кому вдруг нужна возможность дублирования - ввести новый параметр, разрешающий дублирование. Хотя тоже не айс, конечно, если переменная будет дополнительно изменена позже.

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

#41:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jun 23, 2010 23:45
    —
Про маркер и я думал, но опять же, как узнать, надо ли дописывать переменную - а вдруг надо еще раз.

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

#42:  Author: Loopback PostPosted: Wed Jun 23, 2010 23:52
    —
MVV wrote:
Наверное, самая удачная мысль - ввести параметр, разрешающий добавление к переменной, если этот текст в ней уже есть. Так, если надо дописывать - юзер укажет параметр.

Вот так и сделаю, раз проблема не решается однозначно - пусть будет выбор. В конце-концов, главное чтобы это было документировано.

#43:  Author: Loopback PostPosted: Thu Jun 24, 2010 22:38
    —
Обновил, и добавил параметр /AD, разрешающий дублирование.

#44:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jun 24, 2010 23:11
    —
Loopback
Спасибо, теперь ситуация с переменными меня полностью устраивает.

#45:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Jun 24, 2010 23:29
    —
Ага, работает. Smile

#46:  Author: FlasherLocation: Москва PostPosted: Mon Jul 12, 2010 18:57
    —
После апдейта TC на 7.55a autorun перестал работать. MoveButton и HideMenu молчат. В результате возникли проблемы с TCFS2. Sad
WinXP SP3(SP4)

#47:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Jul 12, 2010 19:17
    —
Flasher
Пока что не подтверждаю. У меня в TC 7.55a (включая все предварительные версии) на двух машинах с XP SP1 и SP3 плагин (версии 1.4.2 и 1.4.3) работоспособен. MoveButton работает, HideMenu просто не пользуюсь.

#48:  Author: Loopback PostPosted: Mon Jul 12, 2010 20:12
    —
Flasher
Аналогично. Обновился сразу после выхода, проблем не вижу.

#49:  Author: FlasherLocation: Москва PostPosted: Mon Jul 12, 2010 20:21
    —
Loopback
Команды HideMenu работают?

#50:  Author: Loopback PostPosted: Mon Jul 12, 2010 20:30
    —
Flasher
Добавил строчки в конфиг:

LoadLibrary Plugins\Autorun_HideMenu.dll
SendCommand 65538

Меню скрылось. Полагаю, значит работает.

#51:  Author: FlasherLocation: Москва PostPosted: Mon Jul 12, 2010 20:39
    —
Loopback
Ясно. А с TCFS2 пробы не было?

#52:  Author: Loopback PostPosted: Mon Jul 12, 2010 20:47
    —
Flasher
Не, я ее не использую. Но нет никакой разницы, откуда посылать команду. Попробовал для очистки совести создать кнопку на тулбаре с командой 65538. Всё равно работает.

#53:  Author: FlasherLocation: Москва PostPosted: Mon Jul 12, 2010 20:59
    —
Loopback wrote:
опробовал для очистки совести создать кнопку на тулбаре с командой 65538. Всё равно работает.
А у меня пишет: функция не реализована. Sad

#54:  Author: Loopback PostPosted: Mon Jul 12, 2010 21:15
    —
Flasher
Ну это и понятно, плагин же не загружен.

Ну не знаю, что тут может быть. Может ты что-то в конфигурации при переходе попортил.

#55:  Author: FlasherLocation: Москва PostPosted: Mon Jul 12, 2010 21:51
    —
Loopback wrote:
Ну это и понятно, плагин же не загружен.
То есть? С чего такие мысли? Smile
Loopback wrote:
Может ты что-то в конфигурации при переходе попортил.
Зришь в корень. Very Happy По случайке затёр wincmd.ini при апдейте, восстановил файл 3-х-месячной давности, подцепил заново плагин, проверил ini и cfg, всё вроде то же самое. Вот глюки и возникли. Сейчас зашёл в inireloc, который мне не помог, кстати, после того, как я ТС ещё один голый ставил, обнаружил в его папке сохранённые позавчера ini-шники и всё вернулось к работоспособному режиму. Smile Почему со старым wincmd.ini возникли ошибки попытаюсь разобраться чуть позже.
Вопрос, касаемый конкретной версии снимаю.

#56:  Author: Loopback PostPosted: Mon Jul 12, 2010 22:01
    —
Flasher wrote:
То есть? С чего такие мысли?

Ну так это плагин HideMenu добавляет тоталу команды работы с меню. Если он не загружен - не работают и команды.

#57:  Author: FlasherLocation: Москва PostPosted: Mon Jul 12, 2010 22:30
    —
Loopback wrote:
Если он не загружен - не работают и команды.
Ну а как он может быть не загружен, если до этого он у меня работал? Строка LoadLibrary Plugins\Autorun_HideMenu.dll прописана-то изначально.)

#58:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Jul 17, 2010 12:01
    —
Loopback
1. При использовании в каталоге TC вместо стандартной (распакованной) версии его экзешника упакованной версии 7.55(a), которую можно скачать по этой или этой ссылке (страница для скачивания у Гислера здесь, но там по ссылке качается только 7.55 без "a"), при наличии установленого Autorun с любой конфигурацией окно TC появляется на секунду и тут же закрывается. Явный баг.
2. При добавлении в список плагинов Autorun не через стандартный диалог TC, а через TC Plugins Manager кликом по имени WDX-файла установка хотя и выполняется, но диспетчер плагинов падает. Кто виноват и можно ли починить?

#59:  Author: Loopback PostPosted: Sat Jul 17, 2010 23:58
    —
Avada wrote:
1. При использовании в каталоге TC вместо стандартной (распакованной) версии его экзешника упакованной версии 7.55(a), ... при наличии установленого Autorun с любой конфигурацией окно TC появляется на секунду и тут же закрывается. Явный баг.

Попробовал на сжатых версиях 7.55 и 7.55а - у меня не падает ни на одной.
На "любой" конфигурации - это на какой? А если совсем пустую сделать?
Avada wrote:
2. При добавлении в список плагинов Autorun не через стандартный диалог TC, а через TC Plugins Manager кликом по имени WDX-файла установка хотя и выполняется, но диспетчер плагинов падает. Кто виноват и можно ли починить?

Виноват, разумеется, диспетчер плагинов Wink
Если серьезно - не знаю, надо будет проверить. В понедельник, сейчас не могу.

#60:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Jul 18, 2010 10:04
    —
Loopback
По поводу падения — при запуске нераспакованого экзешника имеет место конфликт внутри группы плагинов, на основе которых назначены реальные или фиктивные цветовые схемы. Autorun здесь скорее всего вообще ни при чём, просто его отключение устраняло проблему. Но, как выяснилось, её устраняет и отключение некоторых других плагинов. Вопрос в данной теме снят, предполагаемый виновник определён, разбираться следует в другом месте.

#61:  Author: Loopback PostPosted: Mon Jul 19, 2010 13:27
    —
Avada
Вторую проблему исправил. Виноват был все же плагин Smile

#62:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jul 21, 2010 22:16
    —
Loopback
Да, с диспетчером плагинов теперь всё хорошо.
Кстати, я в первый пост темы по MoveButton добавил информацию о включении плагина в дистрибутив Autorun.

#63:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Aug 04, 2010 17:16
    —
Скачал и установил версию 1.4.5 и буквально за пару минут понял, что надо срочно возвращаться к предыдущей версии. Файловые панели немедленно начали перерисовываться какими-то дикими скачками и рывками. Возможно, дело тут не в самом плагине, а в его конфликте с чем-то ещё, но началось это безобразие сразу же после обновления плагина.
Проблемы возникли и при избавлении от новой версии плагина. Обычно я попросту запускаю команду временной выгрузки плагинов и устанавливаю новые файлы поверх старых (или — при даунгрейде — старые вместо новых). Тут номер не прошёл, не помог и Unlocker. Ладно, закрыл окно TC, открыл лежащий в другом каталоге TC старой версии и попытался проделать это оттуда. Опять блокировка. Далее обнаружил в Диспетчере задач, что предыдущий процесс TOTALCMD.EXE остался в памяти и убивается только вручную...
Вернулся на 1.4.4. Здесь всё прекрасно.

#64:  Author: Loopback PostPosted: Thu Aug 05, 2010 12:01
    —
Avada
Изменения были только только в парсере. На моей конфигурации все отрабатывало нормально, но возможно на другой, в какой-то момент парсер зацикливается. Было бы неплохо взглянуть на проблемный конфиг (можно в личку).

#65:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Aug 05, 2010 12:14
    —
Loopback wrote:
Было бы неплохо взглянуть на проблемный конфиг (можно в личку).

В смысле, autorun.cfg? А он такой же, как в примере, только при запуске TC другая команда вызывается (cm_FtpHiddenFiles), а cm_AdministerServer закомментирована (поскольку в 7.55a эта опция уже запоминается в самом Тотале). Или речь про wincmd.ini?

#66:  Author: Loopback PostPosted: Thu Aug 05, 2010 12:20
    —
Да, autorun.cfg. Ну раз то же самое, буду думать, что тут может виснуть.

#67:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Aug 05, 2010 12:26
    —
Loopback
Уточнение. Попробовал это дело с чистым Тоталом 7.55a, где не подключено ничего, кроме новой версии плагина. Файл конфигурации по содержанию точно как в дистрибутиве. Дёргается вроде меньше, но ровно та же фигня с невыгружаемым процессом TOTALCMD.EXE.

#68:  Author: Loopback PostPosted: Thu Aug 05, 2010 14:20
    —
Нашел и исправил. Проблема была с парсингом пустых строк, недоглядел. Что интересно, на ноутбуке с вистой, где последнее изменение делалось и тестировалось, такого эффекта не наблюдалось. А вот на XP проявилось.

#69:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Aug 05, 2010 16:09
    —
Loopback
Да, именно на XP. С 1.4.6 проблем нет.

#70:  Author: vyazovoiLocation: Магнитогорск PostPosted: Sun Oct 24, 2010 21:49
    —
Не понимаю как установить плагин. Вот это:

Quote:
Далее, чтобы реализовать автозапуск, нужно создать цветовую схему "для типов файлов", где вызывать единственное целочисленное поле "Autorun". Выражение может быть любым.


Зашёл я в Конфигурация/Содержимо_панелей/Цвета
А дальше что?

Спасибо.

#71:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Oct 24, 2010 23:15
    —
vyazovoi
Перво-наперво установить плагин, как устанавливаются все обычные плагины.
Далее назначить плагину фиктивную цветовую схему, чтобы он автоматом загружался при старте TC. Для этого:
• На странице настроек "Цвета" нажать кнопку ""Определить цвета для типов файлов".
• В диалоге "Определить цвета для типов файлов" поставить курсор в любое место списка и нажать кнопку "Добавить".
• Нажать кнопку "Шаблон".
• В диалоге "Выбор шаблона" перейти на вкладку "Плагины".
• Выбрать в выпадающем списке плагинов autorun.
• Выбрать в выпадающем списке свойств Autorun (других там не будет).
• Выбрать в выпадающем списке операций = и ввести в следующем поле любое целое число, например 1.
• Нажать кнопку "Записать", назвать шаблон Autorun.
• Далее последовательно нажимать кнопку OK во всех диалогах до выхода из всех настроек.
• Перезапустить TC.

#72:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Wed Nov 03, 2010 02:56
    —
Можно ли использовать Autorun HideMenu (текущая версия 1.1.5) без TCFS2, который не использую. Достаточно ли для этого одного Autorun-а?
Если можно то как собственно? Что-то пока не раздуплился. Задача - скрытое по умолчанию главное меню и по Alt открывать; ну или кнопкой с панели (по выбору).
-------------
Сам Autorun уже давно установлен и работает при запуске.

#73:  Author: FlasherLocation: Москва PostPosted: Wed Nov 03, 2010 03:09
    —
Den_Klimov
Конечно, нельзя. Он под TCFS2 и писался по моей, как не трудно проследить в соответствующей ветке, наводке. Почему 41 кило дистрибутива (10 - самой проги, 7 - ini, 24 - РидМи) так сильно смущают? Wink Честно говоря, не использовать TCFS2 с учётом всех нынешних его возможностей помимо основных(быстрый показ-убор комплекта оконных компонентов ТС), ИМХО, просто преступление для продвинутого пользователя ТС. Very Happy

#74:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Wed Nov 03, 2010 04:19
    —
Flasher wrote:
Den_Klimov
Конечно, нельзя. Он под TCFS2 и писался по моей, как не трудно проследить в соответствующей ветке, наводке. Почему 41 кило дистрибутива (10 - самой проги, 7 - ini, 24 - РидМи) так сильно смущают? Wink Честно говоря, не использовать TCFS2 с учётом всех нынешних его возможностей помимо основных(быстрый показ-убор комплекта оконных компонентов ТС), ИМХО, просто преступление для продвинутого пользователя ТС. Very Happy

Жаль коли так. Не хотелось с TCFS2 заморачиваться.

Меня ведь собственно другие функции "убора" не интересуют. Только меню бы скрыть нафик под Alt (особо для нетбуков и старых мониторов полезно). Ничего больше я скрывать не собираюсь. Нам скрывать нечего. Smile

Так что TCFS2 для меня излишний функционал. К тому же меня несколько смущает что могут быть проблемы с ним в очередных новых версиях Тотала, из-за чего нужно будет ждать обновления TCFS2, меня это немного напрягает.

Вообще напрягает немного что аж целых три разных хрени нужно (TCFS2, Autorun, Autorun HideMenu) ради всего одной простой функции - менюху Тотала скрывать. Знаю ты мне не поверишь, с учётом того что мы в теме по F4menu обсуждали, но я сторонник здорового минимализма. Smile


Last edited by Den_Klimov on Wed Nov 03, 2010 04:29; edited 3 times in total

#75:  Author: FlasherLocation: Москва PostPosted: Wed Nov 03, 2010 04:26
    —
Я не собираюсь рассказывать о всех возможностях TCFS2, кому надо, скачает и почитает русский Ридми, одним убором он далеко не ограничивается, лично мне требуется чаще для других нужд. А лишний функционал у него для тебя или нет, это дело десятое, размер у него слишком мизирный, чтобы уповать на это. Сомневаюсь, что у него возникнут какие-то проблемы с переходом на лазарус, дескрипторы окна останутся, наверняка, те же и ничего ждать не придётся. Да и если так случится, то более мобильного прогера, чем MVV в этом отношении ты здесь не найдёшь, всё будет подправлено довольно резво, я в этом уверен. Wink

#76:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Wed Nov 03, 2010 04:28
    —
Flasher
Читал. И если честно, без всего этого как-то прожил десять лет на Тотале и думаю ещё столько же в принципе смогу обойтись. Smile

Ладно уж. Раз надо значит надо.
Спасибо что вообще хоть реализовали скрытие меню с твоей подсказки.

#77:  Author: FlasherLocation: Москва PostPosted: Wed Nov 03, 2010 04:36
    —
[off]
Den_Klimov wrote:
Знаю ты мну не поверишь, с учётом того что мы в теме по F4menu обсуждали, но я сторонник здорового минимализма. Smile
Не поверю уже даже больше, чем в необходимость в большом кол-ве редакторов для одного расширения. Very Happy
Den_Klimov wrote:
Читал. И если честно, без всего этого как-то прожил десять лет на Тотале и думаю ещё столько же в принципе смогу обойтись.
Это несколько противоречит предыдущему подходу к делу. Ну, как я уже и писал выше, кому надо, сам всё опробует и со временем поймёт, что уже жить без этого не может(как в случае со мной). Wink
Den_Klimov wrote:
Спасибо что вообще хоть реализовали скрытие меню с твоей подсказки.
Да там вся тема зародилась по моей идее и большинство фич также. Wink
[/off]
Ну, ок. Сворачиваем оффтопик.

#78:  Author: Loopback PostPosted: Wed Nov 03, 2010 11:10
    —
Den_Klimov wrote:
Можно ли использовать Autorun HideMenu (текущая версия 1.1.5) без TCFS2, который не использую. Достаточно ли для этого одного Autorun-а?

Можно - с оговорками. HideMenu регистрирует 4 команды. Их можно выполнить, послав окну тотала.
Если нужно, скажем, скрыть меню только один раз при запуске тотала, можно обойтись самим Autorun-ом. Достаточно добавить строку в конце конфигурации (65538 - команда скрытия меню по-умолчанию):
Code:
SendCommand 65538

Если нужно переключать динамически, то можно пользоваться скриптами. Например, в простейшем варианте на Autoit:
Code:

DllCall("user32.dll", "int", "SendMessage", "hwnd", _TCHGetActiveInstance(), "int", 0x400 + 51, "wparam", 65538, "lparam", 0)
Func _TCHGetActiveInstance()
    Local $aList = WinList("[CLASS:TTOTAL_CMD]")
    For $i = 1 To $aList[0][0]
        If WinActive($aList[$i][1]) Then Return $aList[$i][1]
    Next
    Return 0
EndFunc

Или на VBS со Script Helper (не проверял):
Code:

Option Explicit
Dim TCS
Set TCS = CreateObject("TCScript.Helper")
TCS.SendCommand 65538
Set TCS = Nothing


Flasher wrote:
Честно говоря, не использовать TCFS2 с учётом всех нынешних его возможностей помимо основных(быстрый показ-убор комплекта оконных компонентов ТС), ИМХО, просто преступление для продвинутого пользователя ТС.

TCFS2 - отличная утилита для тех, кто хочет максимально увеличить размер окна тотала. Но ведь не всем это нужно, верно? Wink

#79:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 03, 2010 11:38
    —
Можно использовать кучу утилит для отправки тоталу команд, например, TCMC - ею тоже можно вызывать команды HideMenu.

#80:  Author: FlasherLocation: Москва PostPosted: Wed Nov 03, 2010 11:49
    —
Loopback wrote:
HideMenu регистрирует 4 команды.
Аа, вот в чём дело. Я-то думал, что это только ТС подвластно, иначе бы никакие скрипты так не работали. Тогда беру свой первый спич назад. Smile Хорошая новость и для меня.
Loopback wrote:
TCFS2 - отличная утилита для тех, кто хочет максимально увеличить размер окна тотала. Но ведь не всем это нужно, верно?
Первое предложение - неверно, второе - да.

#81:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 03, 2010 11:56
    —
Flasher wrote:
Loopback wrote:
HideMenu регистрирует 4 команды.
Аа, вот в чём дело. Я-то думал, что это только ТС подвластно, иначе бы никакие скрипты так не работали.
Ну не то чтобы регистрирует - в тотале регистрация не предусмотрена. Она просто перехватывает аналогичные сообщения, но с другими параметрами, и не передаёт оконной процедуре самого тотала. Поэтому можно любыми внешними утилитами выполнять и эти команды. Но, так как теоретически возможны коллизии, номера сделаны настраиваемыми.

Кстати о перехвате - на днях обнаружил, что с программами, написанными на Delphi, не работают стандартная системная функция сабклассинга SetWindowSubclass - программа просто рушится (причем, даже пустая форма, скомпилированная на Delphi 3 - сам проверял). Причина для меня абсолютно неясна. Поэтому остается только старый жесткий метод, при котором снять сабклассинг весьма проблематично (если кто-то ещё сабклассил окно после нас, мы убиваем все сабклассы, начиная с нашего). Поэтому HideMenu загружается однажды и остается в памяти до закрытия тотала - Autorun её выгрузить не в состоянии.

#82:  Author: Den_KlimovLocation: Ukraine.Kiev PostPosted: Thu Nov 04, 2010 03:21
    —
Flasher
Quote:
Это несколько противоречит предыдущему подходу к делу. Ну, как я уже и писал выше, кому надо, сам всё опробует и со временем поймёт, что уже жить без этого не может(как в случае со мной).

Никакого противоречия нет.
Просто я не считаю что минимализм должен быть в ущерб важному удобству и функциональности.

Loopback
MVV
Спасибо. Радостная новость.

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

Этот вариант мне больше всего нравится. Опробую. Если не затруднит, не приведёшь пример строк с командами для искомой задачи плиз?

#83:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Nov 04, 2010 13:25
    —
Den_Klimov wrote:
MVV wrote:
Можно использовать кучу утилит для отправки тоталу команд, например, TCMC - ею тоже можно вызывать команды HideMenu.

Этот вариант мне больше всего нравится. Опробую. Если не затруднит, не приведёшь пример строк с командами для искомой задачи плиз?
Дык проще некуда. Если ты не менял настроек в файле Autorun_HideMenu.ini (или он отсутствует), то номера команд берешь из Readme к Autorun_HideMenu. А дальше просто указываешь номер в параметре TCMC, например, для переключения видимости строки меню:
Code:
TCMC 65539

#84:  Author: sa PostPosted: Wed Nov 17, 2010 14:40
    —
Столкнулся с необходимостью при запуске ТК удалить несколько ключей из wincmd.ini. Вопрос к автору и всем заинтересованным. Нет ли смысла (и возможности, конечно) добавить в Autorun команду IniDelete для этой цели? А может даже и для удаления целой секции, если название ключа не указано (как в TCWSHelp, например).

#85:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 17, 2010 15:25
    —
А команду IniWrite без текста пробовал использовать? Почему-то её параметр <текст> задан в квадратных скобках...

#86:  Author: sa PostPosted: Wed Nov 17, 2010 15:40
    —
MVV wrote:
А команду IniWrite без текста пробовал использовать?

В этом случае сам ключ остаётся, а после знака равенства - просто пусто.

#87:  Author: Loopback PostPosted: Wed Nov 17, 2010 16:45
    —
sa wrote:
Нет ли смысла (и возможности, конечно) добавить в Autorun команду IniDelete для этой цели?

Думаю, вполне может пригодиться, просто мне до сих пор такая была не нужна. Как время появится - добавлю.

#88:  Author: sa PostPosted: Wed Nov 17, 2010 16:49
    —
Loopback wrote:
Как время появится - добавлю.

Большое спасибо!

#89:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 17, 2010 17:49
    —
Думаю, можно модифицировать команду IniWrite, чтобы она удаляла ключ, если параметр <текст> не задан. А чтобы записать пустое значение, а не удалять ключ, можно указывать "" как значение этого параметра.

Кстати, теперь каждый может написать плагин для Autorun и добавить нужные команды. Smile

#90:  Author: FlasherLocation: Москва PostPosted: Wed Nov 17, 2010 18:08
    —
MVV wrote:
А чтобы записать пустое значение, а не удалять ключ, можно указывать "" как значение этого параметра.
А разве под первым предложением "без текста .. использовать" не это подразумевалось?

#91:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 17, 2010 21:13
    —
Flasher wrote:
MVV wrote:
А чтобы записать пустое значение, а не удалять ключ, можно указывать "" как значение этого параметра.
А разве под первым предложением "без текста .. использовать" не это подразумевалось?
Под чьим и каким первым предложением? Моя мысль была о том, что для очистки значения параметра вполне можно передавать пустую строку как новое значение. А для удаления - вообще не указывать новое значение.

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

И, тоже кстати, если этой функции передать пустой указатель на имя параметра в секции, она удаляет всю секцию - так что нового кода даже писать не придется, лишь позволить текущему коду обрабатывать отсутствие двух последних параметров функции, т.е. новый синтаксис должен быть таким:
Code:
IniWrite [/EV] <имя ini> <секция> [<ключ> [<текст>]]

При этом, если какой-то из последних параметров не задан, в функцию WritePrivateProfileString передается пустой указатель (0, он же NULL, он же nil). И упомянуть в Readme, что при отсутствии двух последних параметров вся указанная секция будет уничтожена.

#92:  Author: Loopback PostPosted: Wed Nov 17, 2010 22:16
    —
MVV
MVV wrote:
Моя мысль была о том, что для очистки значения параметра вполне можно передавать пустую строку как новое значение. А для удаления - вообще не указывать новое значение.

Сходу так не получится. Дело в том, что сейчас команда, получающая от парсера параметры, не различает - был это пустой параметр или отсутствовал вообще. Конечно, это можно изменить, но не вижу смысла всё усложнять.

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

#93:  Author: sa PostPosted: Thu Nov 18, 2010 00:15
    —
MVV wrote:
Кстати, теперь каждый может написать плагин для Autorun и добавить нужные команды. Smile

[off]Можно ведь воспользоваться при вызове Autorun и уже написанной утилитой TCFS2 Smile, если уже её автор добавит туда возможность удалять ключ к уже имеющейся возможности задавать/модифицировать ключи. Тем более что в TCFS2 это можно будет делать в зависимости от значений других ключей. [/off]

#94:  Author: FlasherLocation: Москва PostPosted: Thu Nov 18, 2010 00:33
    —
[off]
sa wrote:
Тем более что в TCFS2 это можно будет делать в зависимости от значений других ключей.
С важной поправкой - только от числовых. Пока, надеюсь.
[/off]

#95:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Nov 18, 2010 01:42
    —
Quote:
Дело в том, что сейчас команда, получающая от парсера параметры, не различает - был это пустой параметр или отсутствовал вообще.
Параметры просто как String передаются, да? Тогда да, разницу не почувствуешь. С другой стороны, можно ввести некую константную строку, которая будет обозначать отсутствие параметра - например, строку из единственного символа chr(26) (т.е. символа конца текстового файла). А ещё мысль - добавить флаги для команды (которые указываются перед параметрами). Например, /D для удаления параметра и /DS для удаления секции - а уже функция будет разбираться, передавать nil или указатели на строки.

[off]Я, конечно, всё понимаю, но если вы мне поясните, какое отношение имеет функция удаления ключей INI к переключению тотала в полноэкранный режим (не здесь, разумеется, а в теме про TCFS2), тогда можно будет вести разговор об уместности функции в TCFS2.[/off]

Кстати, тут есть миниатюрная утилита для работы с INI из командной строки - удалять секции целиком умеет.

#96:  Author: FlasherLocation: Москва PostPosted: Thu Nov 18, 2010 01:55
    —
[off]
MVV wrote:
но если вы мне поясните, какое отношение имеет функция удаления ключей INI к переключению тотала в полноэкранный режим
К переключению ТС в полноэкранный режим эта функция никакого отношения не имеет, как и ряд других
функций/команд ТСFS2. Так что и объяснять нечего. Smile
В любом случае без обработки текстовых полей от этой функции для меня не будет ровным счётом никакого толку.
[off]

За сайт спасибо. Несколько полезных вещей обнаружил. Smile

#97:  Author: Loopback PostPosted: Thu Nov 18, 2010 11:27
    —
MVV
Всё, конечно, можно сделать и так. Вопрос - зачем? Ну ладно, майкрософт использовала для записи и удаления единую функцию WritePrivateProfileString, зачем эту нелогичность дальше-то тянуть? Smile Все же в моем понимании запись и удаление - это довольно разные вещи.

#98:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Nov 18, 2010 19:55
    —
В принципе, согласен. Тогда добавить команду IniDelete с двумя параметрами - обязательным именем секции и необязательным именем параметра. Smile

#99:  Author: Andrey_ALocation: Сочи PostPosted: Sun Nov 21, 2010 15:42
    —
Спасибо автору за плагин. Недавно подключил функционал Autorun_HideMenu.dll. Очень понравился. Появилось несколько вопросов и просьб, если конечно утилита развивается...
1. Хотелось бы иметь возможность подключать параллельно главному меню ещё одно меню. Как известно меню имеет ограничение в отображении 2000 пользовательских команд. Но даже не достигая этого ограничения, есть достаточно много тем (направлений),которые просто не вмещаются в одну строчку главного меню... даже в две не вмещаются. (файл, вид, навигация, инструменты, архивы, плагины, утилиты, сеть, система, папки, справка... и.т.д)
Если была бы возможность часть главного меню перенести во вспомогательное, которое бы вызывалось в авторане, через HideMenu:
MainMenuTwoPath="%COMMANDER_PATH%\Language\Wcmd_Rus_2.mnu"
ShowMainMenuTwo=65600

2. По поводу отображения меню. Я так полагаю, что это всё делается для увеличения пространства ТС, Можно отображать меню в виде полосы в самом вверху между значком ТС и кнопками (свернуть...)

Можно ли это реализовать - не знаю (где-то я видел утилиту, которая прилеплялась к верху)
Или отображать строку доп. меню внизу - чуть выше (F3,F4,А5...)

Есть ещё ряд хотелок, но это в процессе, если конечно это будет кому-то интересно

#100:  Author: Serge Yolkin PostPosted: Sun Nov 21, 2010 16:30
    —
У AvantBrowser меню в заголовке окна. Пользуюсь. Удобно. Только, для TC такую фичу лучше бы отдельным плагином/утилитой реализовать. Немного раздражают швейцарские ножички (совпадение родины автора TC и страны-производителя ножичков - случайно).

#101:  Author: FlasherLocation: Москва PostPosted: Sun Nov 21, 2010 16:42
    —
Andrey_A wrote:
Можно ли это реализовать - не знаю (где-то я видел утилиту, которая прилеплялась к верху)
Можно, и эта тема явно для TCFS2. Именно по этой причине она и начинала создаваться по моему запросу. Wink И плагин HideMenu к этому отношения не имеет. Он создавался для режима FullScreen, т.е. полного убора каких-либо элементов окна ТС кроме файловых панелей.
По поводу дополнительных меню пусть MVV сам откомментирует, боюсь попастся под его горячую.. Very Happy И опять же это должно обсуждаться в этой ветке.

#102:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Nov 21, 2010 17:17
    —
Два главных меню - никак. Контекстных может быть сколько угодно, но кто будет парсить их? В случае с "родным" меню тотала он читает файл меню и создает само меню, а я лишь "скрываю" его. Второе меню же придется обрабатывать целиком и полностью мне, а это чересчур много работы.

Quote:
Я так полагаю, что это всё делается для увеличения пространства ТС, Можно отображать меню в виде полосы в самом вверху между значком ТС и кнопками (свернуть...)
Куда проще в плане реализации скрыть меню и показывать при необходимости, по хоткею или по кнопке панели инструментов. Потому что главное меню там, где оно у тотала, поддерживается на уровне системы еще с Windows 95, а в любом другом месте - это уже не меню, а лишь его имитация, полностью реализованная программистом.

#103:  Author: FlasherLocation: Москва PostPosted: Sun Nov 21, 2010 17:39
    —
MVV wrote:
главное меню там, где оно у тотала, поддерживается на уровне системы еще с Windows 95, а в любом другом месте - это уже не меню, а лишь его имитация, полностью реализованная программистом.
Вот именно этого комментария я и ожидал. Wink

#104:  Author: Andrey_ALocation: Сочи PostPosted: Tue Nov 23, 2010 20:05
    —
Serge Yolkin wrote:
Только, для TC такую фичу лучше бы отдельным плагином/утилитой реализовать

Не подскажите у кого попросить, кто бы взялся?

MVV wrote:
Два главных меню - никак. Контекстных может быть сколько угодно

MVV Подскажи, пожалуйста, как ты реализуешь контекстные меню?

По поводу плагина Autorun. Поделитесь опытом, кто что запускает вместе с Totalом? Я понимаю, что ответ может быть один - кто что хочет, то и вносит, но всё же...

#105:  Author: FlasherLocation: Москва PostPosted: Tue Nov 23, 2010 20:22
    —
Andrey_A wrote:
Не подскажите у кого попросить, кто бы взялся?
У нас только один тут такой "швейцарский ножичек", имя ему TwinKey, только я заранее знаю, что автор за это браться не будет.
Andrey_A wrote:
Подскажи, пожалуйста, как ты реализуешь контекстные меню?
Так он не реализует их. Он пишет, что можно реализовать. А пока только одно. Из ReadMe > TrackMainMenu=65540.

#106:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Nov 23, 2010 23:14
    —
Andrey_A wrote:
Подскажи, пожалуйста, как ты реализуешь контекстные меню?
Я просто беру готовое главное меню тотала (верхний уровень) и создаю контекстное меню с этими же элементами, так как для системы главное меню и контекстное различны, но только в верхнем уровне - т.к. все выпадающие меню главного меню - уже контекстные, и их можно использовать как подменю контекстного меню. Парсить при этом мне никаких файлов не приходится.

#107:  Author: FlasherLocation: Москва PostPosted: Tue Nov 23, 2010 23:41
    —
MVV
Подменю - это подменю, а контекстные меню - это .. Вот у человека задача вызывать множество выпадающих меню, взятых из разных mnu, я полагаю.

#108:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 24, 2010 01:14
    —
Любое подменю - это по сути обычное всплывающее (контекстное) меню. Всплывающее меню может быть как показано явно (как делает Autorun_HideMenu по TrackMainMenu), так и являться подменю какого-либо всплывающего или главного меню - при этом оно показывается при раскрытии его пункта меню.

Он спросил, как я реализую меню - я ответил. Думаю, его больше всего интересовало, откуда я беру наполнение - и я написал, что наполнение я беру готовое, а не создаю сам.

#109:  Author: FlasherLocation: Москва PostPosted: Wed Nov 24, 2010 03:30
    —
MVV wrote:
Любое подменю - это по сути обычное всплывающее (контекстное) меню.
Подменю -это фактически один пункт из всего меню, а контекстное меню имеет цельный образ. Поэтому это не одно и то же. И слова "Контекстных может быть сколько угодно, но кто будет парсить их?" воспринимаются как "можно открывать с помощью "TrackMainMenu" разные меню, иначе бы вопрос, утыкающийся в "Как известно меню имеет ограничение в отображении 2000 пользовательских команд.", не поднимался.
MVV wrote:
Всплывающее меню может быть как показано явно (как делает Autorun_HideMenu по TrackMainMenu), так и являться подменю какого-либо всплывающего или главного меню - при этом оно показывается при раскрытии его пункта меню.
Какого-либо? Или всё-таки одного единственного?

Написал автору ScrollMin о желании добавить его библиотеку к плагинам autorun.

#110:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 24, 2010 13:25
    —
Подменю - это обычное всплывающее меню, которое показывается при раскрытии некоторого элемента другого меню. Все подменю всех меню являются всплывающими меню (и у главного меню, и у всплывающего). Всплывающее меню может быть одновременно подменю для любого числа меню. Всё это описано в MSDN. Мой модуль как раз берет из главного меню тотала все одиночные элементы и подменю, которые являются всплывающими меню, и прикрепляет их к своему всплывающему меню, а потом отображает на экране.

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

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

Flasher wrote:
Написал автору ScrollMin о желании добавить его библиотеку к плагинам autorun.
Автор уже вроде выложил рабочий вариант.

#111:  Author: FlasherLocation: Москва PostPosted: Wed Nov 24, 2010 13:39
    —
MVV wrote:
Автор уже вроде выложил рабочий вариант.
Знаю, пока нерабочий.

#112:  Author: Loopback PostPosted: Wed Nov 24, 2010 14:27
    —
Проверил ScrollMin - у меня скролл работает, и под XP, и под семеркой. Правда семерка на виртуалке, так что это не стопроцентный показатель.

#113:  Author: FlasherLocation: Москва PostPosted: Wed Nov 24, 2010 14:45
    —
Loopback
Я случайно при тестировании ошибку с шаблонами допустил, всё работает. Добавь плагин в шапку, будь добр! Smile

#114:  Author: Loopback PostPosted: Wed Nov 24, 2010 20:35
    —
Шапку обновил, и сделал краткое описание плагинов. Также обновил сам Autorun, добавил IniDelete.

Кстати, может стоит добавить ссылки на плагины и в описание на wincmd.ru? А то кто-то, особенно из зарубежных пользователей, про них и не узнает.

#115:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 24, 2010 21:18
    —
Думаю, лучше в Readme. Но проблема в том, что точные ссылки дать не получится. Сейчас на оффоруме я даю ссылку на первый пост темы про TCFS2 как источник ссылки на HideMenu. Всё думаю, добавлять ли HideMenu на wincmd.ru.

#116:  Author: FlasherLocation: Москва PostPosted: Thu Nov 25, 2010 03:55
    —
Loopback
Просьба в описании к ScrollTC поменять "неактивную панель тотала" на "любой неактивный компонент текущего окна с ползунком полосы прокрутки".

P.S. на wincmd.ru и зеркало информацию добавить стоит.

#117:  Author: Loopback PostPosted: Thu Nov 25, 2010 11:02
    —
MVV
Можно и в readme, но тогда при любых обновлениях ссылок придется обновлять версию, иначе никто об этих обновлениях и не узнает. А на сайте можно править инфу без обновления версии.
Вот со ссылками да. Хотя я думаю, народ найдет в посте на русском единственную ссылку Smile Кстати, ты можешь в том посте просто написать пару строк на английском.
А у ScrollTC прямая ссылка.

Flasher
Да, логично, поправлю.

#118:  Author: FlasherLocation: Москва PostPosted: Thu Nov 25, 2010 11:22
    —
Loopback
Без ползунка там, в принципе, нечего прокручивать. Ну, ладно, написал, как написал.

#119:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Nov 25, 2010 16:55
    —
Loopback wrote:
Кстати, ты можешь в том посте просто написать пару строк на английском.
Там есть как раз пара строк на английском - строки с названиями утилиты TCFS2 и модуля Autorun_HideMenu, и они даже являются ссылками. Very Happy

А вообще, наверное, надо будет добавить модуль на wincmd.ru. Плагин к плагину - чем не плагин? Smile

#120:  Author: FlasherLocation: Москва PostPosted: Tue Dec 21, 2010 15:57
    —
Обновлён плагин ScrollTC. Теперь при наличии в окне скроллбаров сообщения колеса подменяются сообщениями полос прокрутки. Это решает проблему Листера и ICLView, в котором при табличном режиме быстрого просмотра неактивное окно с иконками не прокручивалось.
Новая версия устроена по принципу ускорения прокручивания (от 1-й строки и более), тем самым удаётся в окнах, где требуется переход на следующий элемент в списке, не пропускать следующие за текущей строки.

#121:  Author: iNorbert PostPosted: Thu Dec 23, 2010 22:03
    —
Периодически отваливается MoveButton. Закономерности к сожалению пока не могу понять.

Спустя две минуты и несколько перезапусков


Версия - 1.4.7.0

Только у меня так?

#122:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Dec 23, 2010 22:15
    —
iNorbert
Ни разу спонтанного переключения вида диалога не наблюдал. Если уж изменение положения кнопки задано — оно и держится.

#123:  Author: iNorbert PostPosted: Thu Dec 23, 2010 22:21
    —
Avada wrote:
iNorbert
Ни разу спонтанного переключения вида диалога не наблюдал. Если уж изменение положения кнопки задано — оно и держится.


Я собственно это и предполагал. Подожду что скажет автор, хотя подозреваю что без занудного тестирования на чистом ТК не обойтись.

ADD: Передвинул Autorun в верх перечня шаблонов раскраски - вроде заработал как следует.

#124:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 24, 2010 10:33
    —
iNorbert
А у меня он только в верхней части списка и живёт.

#125:  Author: Loopback PostPosted: Fri Dec 24, 2010 12:46
    —
iNorbert
У меня стоит почти самым нижним, но такого не наблюдал. Наверно у тебя навороченная расцветка, и в некоторых обстоятельствах в панелях не оказывается нерасцвеченных файлов, и до схемы с Autorun дело не доходит.
Надо бы этот момент в документацию добавить.

#126:  Author: iNorbert PostPosted: Fri Dec 24, 2010 18:45
    —
Loopback
Проверил - нерасцвеченных файлов действительно не было. Думаю проблема решена.


Avada
Эстетика, черт бы ее побрал... Засунул его в самый низ чтобы под ногами не путался. Видимо плагу это не понравилось.

#127:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 24, 2010 19:26
    —
Loopback wrote:
в панелях не оказывается нерасцвеченных файлов, и до схемы с Autorun дело не доходит.
Надо бы этот момент в документацию добавить.

Правильно. Это немаловажный для подобных плагинов момент, который мне не пришёл раньше в голову при подготовке русской документации TWinKey. Надо подумать об таком уточнении.

#128:  Author: FlasherLocation: Москва PostPosted: Sun Dec 26, 2010 16:21
    —
После нескольких танцев с бубном появился новый релиз плагина ScrollTC.

• Значительно увеличена скорость прокрутки.
• Добавлена горизонтальная прокрутка при наведении курсора над горизонтальным скроллбаром.
• Усовершенствован алгоритм ускорения прокрутки. Скорость увеличивается за счёт интенсивности/амплитуды вращения колесом/тачскроллом. После набора нужной скорости прокрутки (с непрерывистым ходом) интенсивность вращения можно сбросить до минимума, скорость при этом останется той же.
• Остановка прокрутки теперь осуществляется лёгким вращением скролла в обратном направлении, а также по клавиатурному и мышиному(5 кн.) отклику.
• Удержание клавиш Ctrl, Alt, Shift не нарушает правильную работу функционала приложений при взаимодействии с вращением колеса.

Скачивать из шапки.

#129:  Author: LonerDLocation: Донецк PostPosted: Fri Jan 14, 2011 01:16
    —
Flasher wrote:
• Остановка прокрутки теперь осуществляется лёгким вращением скролла в обратном направлении

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

#130:  Author: FlasherLocation: Москва PostPosted: Fri Jan 14, 2011 01:19
    —
LonerD
У меня всё мгновенно. Версия 1.9.6.0. Описанные проблемы были в более ранних версиях.

#131:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 15, 2011 07:08
    —
Flasher
Эта ж самая версия.
Может, конфликт с другими плагинами, буду пробовать отключать и выявлять проблему.
А возможна несовместимость с мышкой? (логитековская MX 1100) ?

#132:  Author: FlasherLocation: Москва PostPosted: Sat Jan 15, 2011 09:20
    —
LonerD
Плагины тут вряд ли вообще могут какую-то нагрузку на библиотеку оказывать. Насчёт драйвера сложно сказать, нужно выяснять у автора. Скоро отпишу ему касаемо некоторых модификаций и про этот момент не забуду.
На всякий случай уточню: в трее, в процессах точно ничего близкого к функционалу прокрутки не пребывает?

#133:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 15, 2011 15:48
    —
Flasher
В процессах ничего нет. Стандартную утилитку Setpoint (которая ставится вместе с мышкой) выгружал.

#134:  Author: FlasherLocation: Москва PostPosted: Sat Jan 15, 2011 22:33
    —
LonerD
Есть возможность проверить с другой мышью?

#135:  Author: LonerDLocation: Донецк PostPosted: Fri Jan 21, 2011 04:44
    —
Разобрался в чем проблема.
У меня проявляется под Win7x64 (и на виртуальной майкрософтовской машине под ХРх32) с вышеуказанной мышкой, а также с какой-то дешевой ноутбучной USB-мышкой A4Tech (с другими мышами проверять пока что не было возможности).

Извиняюсь, сразу не дочитал о назначении плагина ScrollTC, потому вначале не мог внятно изложить суть. Rolling Eyes

В общем, ситуация следующая. Если одновременно подключен плагины ScrollTC и TWinKey, и при этом в TWinKey активирована любая опция (закрепленные файлы, закладки, курсор в неактивной панели, прямоугольная область выделения), то при прокручивании активной панели (той, где курсор) наблюдается ошибка - если крутнуть колёсико более-менее сильно, то эта активная панель начинает прокручиваться, причем ее прокрутку невозможно остановить (останавливается только через три-пять секунд после того, как крутну колесико в обратную сторону или нажму кнопку на мышке).

Если отключаю ScrollTC или снимаю в настройках TWinKey все галочки - такое проблемы нет.
Проверьте, глобальная ли это проблема или только у меня проявляется?

#136:  Author: FlasherLocation: Москва PostPosted: Fri Jan 21, 2011 05:31
    —
LonerD wrote:
Проверьте, глобальная ли это проблема или только у меня проявляется?
Проверил. Задержки при совместной работе с TwinKey иногда возникают, но несущественные. В большей степени проявляет себя клавиша Tab в том случае, когда курсор находится в прокручиваемой панели, но это не три секунды, а одна.
Я тут другую штуку отловил. Если в курсор установлен в прокручиваемой панели, то при непрерывном ходе в одном направлении и плавном переходе на обратное движение колеса скроллирование продолжает течь в исходную сторону.
В общем, всё будет сообщено автору, но поскольку здесь задействован TwinKey положительного исхода не обещаю.

#137:  Author: LonerDLocation: Донецк PostPosted: Fri Jan 21, 2011 05:48
    —
Flasher wrote:
Я тут другую штуку отловил. Если в курсор установлен в прокручиваемой панели, то при непрерывном ходе в одном направлении и плавном переходе на обратное движение колеса скроллирование продолжает течь в исходную сторону.

Об этой проблеме я и писал (прокручиваемую панель я назвал активной - потому как на ней курсор находится) - если начать прокручивание, то невозможно его остановить, останавливается только через несколько секунд после "обратного движения колеса".

#138:  Author: FlasherLocation: Москва PostPosted: Fri Jan 21, 2011 05:54
    —
LonerD
Ну, во-первых, не было указано в какой именно панели установлен курсор. Во-вторых, речь шла о несвоевременной остановке. В моём же случае речь идёт о постоянной прокрутке в одном направлении при смене вращательного вектора на противоположный. Поэтому, если проблемы и лежат в одной плоскости, то трактуются они, как можно видеть, по-разному.

#139:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Jan 21, 2011 10:55
    —
По обсуждаемой проблеме могу только сказать, что у меня под XP при использовании разных многокнопочных мышей со своими драйверами и наворотами и при одновременной активности ScrollTC и TWinKey прокрутка останавливается обратным движение колеса сразу или почти сразу. Ситуацию с неправильным переключением одного непрерываного хода в другой (противоположный) непрерывный ход пока воспроизвести не смог. Впрочем, у меня TWinKey уже в виде тестовой версии 3.43.
Предлагаю тем, у кого есть проблемы, дождаться новой версии TWinKey и проверить эти дела снова.

#140:  Author: FlasherLocation: Москва PostPosted: Mon Jan 24, 2011 13:36
    —
Avada wrote:
Предлагаю тем, у кого есть проблемы, дождаться новой версии TWinKey и проверить эти дела снова.
Всё по-старому.

#141:  Author: melirius PostPosted: Mon Jan 31, 2011 07:05
    —
Ссылка на Autorun_HideMenu 1.1.5 в шапке дохлая.

Необходимый плагин версии 1.2.7 нашёлся только в топике Можно ли повесить сдвиг панелей (20/80 и 80/20) на кнопку(и).

#142:  Author: FlasherLocation: Москва PostPosted: Mon Jan 31, 2011 09:56
    —
melirius
Главное, что она тут не дохлая.

#143:  Author: Loopback PostPosted: Tue Feb 01, 2011 17:11
    —
Хоть и не хотелось сильно усложнять плагин, но раз появилась мысль сделать константы (вроде битности ОС), для придания им смысла пришлось сделать переменные и хотя бы одно простое условие. Велосипед изобретать не стал, во многом способ работы с переменными похож на тот, что используется в cmd.

Кроме того, возникла необходимость использования специфического шрифта в листере. Поэтому появилась команда LoadFont, временно загружающая указанный шрифт.

Также добавлена возможность использовать русифицированные сообщения об ошибках из файла autorun.lng (включается вручную в файле конфигурации).

Бета-версия, на wincmd.ru пока не выкладываю.

Скачать

#144:  Author: FlasherLocation: Москва PostPosted: Thu Mar 03, 2011 16:49
    —
Loopback wrote:
Я сначала планировал сделать такую опцию - завершение программы после выхода тотала, но почему-то передумал. В принципе можно и добавить параметр, например /T [erminate].
Было бы очень неплохо.

#145:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 03, 2011 18:30
    —
Проблема в том, что при выгрузке плагинов этот ключ будет срабатывать.

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

#146:  Author: FlasherLocation: Москва PostPosted: Thu Mar 03, 2011 18:48
    —
MVV wrote:
Проблема в том, что при выгрузке плагинов этот ключ будет срабатывать.
Ты частицу "не" перед "будет", случаем, не пропустил? Wink

#147:  Author: Loopback PostPosted: Thu Mar 03, 2011 18:51
    —
MVV
Во завернул Shocked

Но что это даст? Тогда при старте плагина каждый раз будут запускаться новые копии программ.

#148:  Author: FlasherLocation: Москва PostPosted: Thu Mar 03, 2011 18:56
    —
Loopback wrote:
Тогда при старте плагина каждый раз будут запускаться новые копии программ.
Я так понимаю, что речь идёт о библиотеке, которая будет только выгружать проги, функции запуска у неё не будет.

#149:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 03, 2011 19:30
    —
Flasher wrote:
MVV wrote:
Проблема в том, что при выгрузке плагинов этот ключ будет срабатывать.
Ты частицу "не" перед "будет", случаем, не пропустил? Wink

Нет, не пропустил. Когда выполняется команда cm_UnloadPlugins, она выгружает и Autorun.wdx. Следовательно, будут выгружаться и программы, для которых будет задан этот самый пока еще несуществующий ключ /T.

Code:
MIME-Version: 1.0
Content-Type: application/octet-stream; name="Autorun_Starter.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Autorun_Starter.7z"

N3q8ryccAAMw3r0ySQQAAAAAAAAjAAAAAAAAAKG2+isAIBlIZqfhdN8P+4BvKbJhKNYOaonaHvGS
QTrBljHoSsfs8Dfr8MsrmpMrMbR502sIpCd9VfmEEGFxZYcp6f+WwqFYQrTGOzmrwbkqhLELx2B8
WeeufABjdo161XlsMh/ASQgGNAAmlo5wABf37AW76vT/lAEvRO985vXFmcAEy9Hoe9bZmPBjbN0L
S065/KQXDPBUUzuwrhxwhg8brqIiB5u3Z1ealwQC6Jupfgj8p36KmpPTb0Z+O4lIYug4qeyMaxdm
Ni9xlGkXJh6i5G3HcokaQj+Jpe+ioTSNW5vjD/25GXeBlz7LaygZWbQYSBnrBw7QbeDTktUhDhq8
y4kzCsE1ZK+6kEC/04Gn7OZqM1hLdLDOkb0GOAeikQ7461E3duOgox3eGogm7Yt4GxzGrvxGWqyn
XkYr9mXtDF+UWeXVs5hirP+8edPrF+018NJLYJ2kJ8R7kjGspO9tQeJSNc0UXvd8YDQc9oJIXDC6
+vIIif/JtX38oCnPNrvZhHUdVraMRJ6jr0baMyB7FrL0vU2UeoOkN94Rccxi8X4Zc6aR3xarZydE
xtPgpx2tSIK+f5+6OQcQOHCbvZbqKyqSksEXj2HYVRznU4cs7hi/VNb/NBXyG4qzl+jhg/xSA1v2
4SDvlyDazl+Cp6hMiz1iCJglRdVq6+EP9Bb/cgdCPxEi8T7BaxVqi0OD5DhyAYoIkxdk+SCgZvua
Pb2O5bLf5ga7oR/Xu7KmyDXCrpPRsE9NUSxRzybvBomETwwTyE9adlcE9usj4p0u87Fpbi/pI1xD
GZr7A6wg5oVdg3lkPxCRc37rNt70NQ4yn917svkDSTXm7ITPaoPGNZB9fo9tzg3A5GFoJ1O6PfBM
O0Jqtya3sMz4Se/nzEGgaa1G45YKr6miCC6eS/lLQ1f8C9jbxilR+0rRqsyxe9emB5xqehgyipxC
hi/XLOFyVs6O+NpLaQ+D2oWr9asd7er7/PlFkevI4oZ80jKM7GsyW6zgeVvwuY5Huu4Pyr3j2M4J
7ls+DjNzUVRFV71qX5wGf+36Cp4o961qJt3Z+bWrgGltpgfb0Q+KPpG4xZUHKONO4ePnUJTsupMp
EIfsrnMryBfgF3AUymP9GUMfN9NfgCjJwHQkfZcIqKUjaRCdCksa2FgHoRMcz1KYgN0pmv2tiSmX
ONvpwVGJkZQ8JpGBRgXWfI2YRJzkDIQSKRe59PsdUwnXSUuj1GrUUNnTYU9gQZIAADu+/AAAAGAS
pQE6WgAAAABgFxy/A1CkAAAAAIEzB66OlzRP5Ou7X/Ks6ASCk7kK57ldea2ks0RvbZ1XRMmc55wm
iK5/tlfo1jSpP9Ibn8gh56HEaxCVY/tXbTeg6v6GrbWFc8eamp0791smoonsuUcBtZ9ubhInsVzu
szGB5i+Mtt+c4dVKjrgEK30qYOEVE/5m6bUi4d+z2LFFPo0EvSUlEV/fIcMgABcGg7oBCYCPAAcL
AQABIwMBAQVdABAAAAyA2goBr0Al8gAA


Этот модуль, будучи прописанным в Autorun.wdx, будет при первой загрузке выполнять бат-файл с таким же именем, лежащий в той же папке, передавая ему параметр 0, а при выгрузке тотала - запускать тот же бат-файл, передавая ему параметр 1 - это позволит бат-файлу определить, с какой целью его запускают (путем сравнения %1 с 0 или с 1). Бат-файл будет запускаться в свернутом виде.
Code:
LoadLibrary /U Modules\Autorun_Starter.dll

Параметр /U не играет никакой роли, т.к. Autorun.wdx все равно не сможет выгрузить модуль (но с указанным /U плагин Autorun.wdx не будет оставлять попытку "на потом") - тот увеличивает число ссылок на себя изнутри. Поэтому все последующие выгрузки/загрузки плагина Autorun.wdx не приведут к выгрузке или повторной загрузке модуля, и только при закрытии тотала он будет выгружен окончательно.

(модуль обновлен)


Last edited by MVV on Sun Mar 13, 2011 02:43; edited 1 time in total

#150:  Author: FlasherLocation: Москва PostPosted: Thu Mar 03, 2011 19:38
    —
MVV wrote:
Нет, не пропустил. Когда выполняется команда cm_UnloadPlugins, она выгружает и Autorun.wdx. Следовательно, будут выгружаться и программы, для которых будет задан этот самый пока еще несуществующий ключ /T.
А, вот ты про какую выгрузку. Ну, это не страшно. Кто ж ей будет пользоваться перед закрытием ТС? Выгружаться не в смысле закрываться, а в смысле не будут подхвачены при закрытии ТС при выгруженном autorun-е, так, наверное?

С батником что-то не очень, для меня во всяком случае. Подожду добавки ключа. К тому же это будет более мягкий и юзабильный метод.

#151:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 03, 2011 19:41
    —
Повторяю, при выполнении cm_UnloadPlugins плагин Autorun.wdx будет выгружен, после чего при смене папки в тотале он будет опять загружен самим тоталом. И при новом вызове cm_UnloadPlugins или при закрытии тотала плагин снова будет выгружен.

Если добавлять утилиты для загрузки и выгрузки в Autorun.wdx, они будут загружаться и выгружаться соответственно вместе с плагином.

В то время как модуль, который увеличивает счетчик ссылок на себя, загружается лишь однажды при первой загрузке плагина Autorun.wdx, и выгружается тоже ровно 1 раз - при закрытии тотала, когда система выгружает все модули.

Кстати, как вариант, предлагаю автору добавить в плагин команду для увеличения числа ссылок на себя - тогда плагину станут не страшны выгрузки через cm_UnloadPlugins, ну и ключ /T тогда будет более полезным, как и запуск утилит, которые должны работать в фоне тотала. А делается это элементарно:
Code:
         wchar_t libname[1024];
         GetModuleFileName(hModule, libname, TSIZE(libname));
         LoadLibrary(libname);

#152:  Author: FlasherLocation: Москва PostPosted: Thu Mar 03, 2011 19:49
    —
Я чрезвычайно редко использую cm_UnloadPlugins, поэтому описанные обстоятельства меня не пугают. Но раз предложен путь наладки самого плагина, то данный вопрос можно опустить.

#153:  Author: Loopback PostPosted: Thu Mar 03, 2011 23:19
    —
Посмотрел, подумал - идея интересная, что-то на работе сразу ее не понял. Можно добавить что-нибудь типа "AutorunBlockUnload", при ее наличии будет производиться блокировка выгрузки. Тогда параметр /T будет работать как надо. Попробую в праздники.

#154:  Author: Loopback PostPosted: Tue Mar 08, 2011 00:03
    —
Ну, в общем вот: скачать.

Следует отметить особенность завершения программ, запущенных с помощью ShellExecuteEx, которая используется сейчас. Если командой запускается ассоциированный файл, например html, и он открывается в уже запущенной копии браузера, то при завершении браузер закрыт не будет. С запуском программ проблем быть не должно.

#155:  Author: FlasherLocation: Москва PostPosted: Tue Mar 08, 2011 01:09
    —
Неплохо! Есть пару пожеланий:
1. запускать файлы в соответствии с внутренними ассоциациями ТС, если это возможно;
2. сделать команду только на закрытие по вероятности открытых программ.

#156:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Mar 08, 2011 10:06
    —
Flasher wrote:
Неплохо! Есть пару пожеланий:
1. запускать файлы в соответствии с внутренними ассоциациями ТС, если это возможно;

А так ли нужно перегружать подобный плагин такой редкой функцией? Сюда прописывается лишь то, что действительно необходимо запускать при старте тотала, вряд ли сюда входят документы (для запуска которых можно прописать программу явно). И по названию команда ShellExec запускает именно в оболочке Windows.

Кстати, хотелка для TC - внутренняя команда для запуска файла внутренней ассоциацией. В том числе чтобы можно было послать тоталу сообщение WM_COPYDATA с этой командой - это решило бы много проблем с запуском файлов посредством внутренних ассоциаций.

Flasher wrote:
2. сделать команду только на закрытие по вероятности открытых программ.

Ты так часто убиваешь что-то при запуске тотала? Rolling Eyes
А прямой запуск taskkill.exe чем плох?

Хотя, в виде отдельных плагинов эти байды оформить можно было бы. Вопрос в том, как много людей в них будут нуждаться - я точно не в их числе. Smile

Loopback в Readme_ru wrote:
Полезно для использования ShellExec с ключом /T. Если команда не используется, блокировка выключена.

Не совсем ясно, какая команда может не использоваться - AutorunBlockUnload или ShellExec - возникает некоторая неоднозначность. Думаю, лучше было бы написать что-то вроде "По умолчанию блокировка выключена".

#157:  Author: FlasherLocation: Москва PostPosted: Tue Mar 08, 2011 15:01
    —
MVV wrote:
А так ли нужно перегружать подобный плагин такой редкой функцией? Сюда прописывается лишь то, что действительно необходимо запускать при старте тотала, вряд ли сюда входят документы (для запуска которых можно прописать программу явно).
Насчёт перегружать - не понял. По конкретным файлам судить каждому юзеру в отдельности. Я не писал, что это именно документы должны быть.
MVV wrote:
Ты так часто убиваешь что-то при запуске тотала?
При запуске Тотала я ничего не убиваю. Зачем? Confused
MVV wrote:
А прямой запуск taskkill.exe чем плох?
А разве есть в autotun функция запуска чего-то при закрытии ТС? А плох как минимум тем, что консольный.
MVV wrote:
Хотя, в виде отдельных плагинов эти байды оформить можно было бы.
Сколько ещё таких "отдельно" ты нам волен предложить? Пока фантазия не кончится? Very Happy Уверен, что добиться описанного в autorun-e труда не составит, функционал для открываемых прог уже есть, почему же станет проблемой для потенциально открытых?
MVV wrote:
Вопрос в том, как много людей в них будут нуждаться - я точно не в их числе.
Когда ты допиливал tcfs2 по моим наводкам, так ли ты часто думал о многих? Wink
Раз ты о себе заговорил, отвечу тем же - мне эта возможность нужна в гораздо в большей степени, чем только появившаяся. У всех свои приоритеты. Носишь ТС на флешке, запускаешь ряд программ с неё же, уходишь - в спешке закрывать все программы лень, закрыл ТС - и приложения все закрылись. Это автоматизация, Виталий. Wink

#158:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Mar 08, 2011 15:35
    —
Flasher wrote:
При запуске Тотала я ничего не убиваю. Зачем?

А зачем тогда в авторане функция убийства чего-то? Very Happy

Quote:
А разве есть в autotun функция запуска чего-то при закрытии ТС? А плох как минимум тем, что консольный.

Того, что авторан запускает - есть. А остальное спокойно можно убивать из батника, который будет вызывать при выходе мой плагинчик, описанный на предыдущей странице. Very Happy
И этого консольного окна, свернутого в кнопку панели задач, ты даже заметить не успеешь. Cool

Quote:
Сколько ещё таких "отдельно" ты нам волен предложить? Пока фантазия не кончится? Уверен, что добиться описанного в autorun-e труда не составит, функционал для открываемых прог уже есть, почему же станет проблемой для потенциально открытых?

Для открываемых система возвращает дескриптор, по которому можно не отходя от кассы завершить запущенный процесс. А по всем остальным - нужно перебирать процессы, фильтровать и т.п., это совсем другая песня, совершенно не нужная большинству использующих плагин. К тому же, уже есть способы решить эту проблему. Smile


Flasher wrote:
Когда ты допиливал tcfs2 по моим наводкам, так ли ты часто думал о многих?

Предлагаешь поубирать всё, что я добавил с твоих наводок? Cool
И потом, не считая функции установки сепаратора все функции TCFS2 объединены общей идеей.


Last edited by MVV on Tue Mar 08, 2011 15:42; edited 1 time in total

#159:  Author: FlasherLocation: Москва PostPosted: Tue Mar 08, 2011 15:41
    —
MVV wrote:
А зачем тогда в авторане функция убийства чего-то?
Зачем спрашивать то, на что уже дан ответ?
MVV wrote:
А остальное спокойно можно убивать из батника, который будет вызывать при выходе мой плагинчик, описанный на предыдущей странице. Very Happy И этого консольного окна, свернутого в кнопку панели задач, ты даже заметить не успеешь.
Я против батников в таких делах, да и правку легче осуществлять в cfg.
MVV wrote:
совершенно не нужная большинству использующих плагин
Моё отношение к бездоказательным обобщениям ты знаешь. Дай автору самому разобраться, что да как...
MVV wrote:
Предлагаешь поубирать всё, что я добавил с твоих наводок?
Забавная шутка. Very Happy
MVV wrote:
И потом, не считая функции установки сепаратора все функции TCFS2 объединены общей идеей.
И как же эта идея называется? Уж точно не "FullScreen".

#160:  Author: Loopback PostPosted: Tue Mar 08, 2011 23:08
    —
Flasher wrote:
запускать файлы в соответствии с внутренними ассоциациями ТС, если это возможно;

Теоретически можно. Но дело в том, что функциональность запуска ассоциированных в системе файлов обеспечивается системной функцией, и я, в общем-то, считаю это очень второстепенным - есть и ладно. Тут же надо огород городить.
Flasher wrote:
сделать команду только на закрытие по вероятности открытых программ.

Flasher wrote:
Уверен, что добиться описанного в autorun-e труда не составит, функционал для открываемых прог уже есть, почему же станет проблемой для потенциально открытых?

Как верно заметил MVV, это действительно другая песня. То, что сейчас есть, тут не поможет.

В общем, если уж и делать этот функционал, то я тоже склоняюсь к мысли об отдельном плагине. Не по отдельному для каждой функции, конечно, а что-то вроде библиотеки, например, Autorun_Process.

#161:  Author: FlasherLocation: Москва PostPosted: Tue Mar 08, 2011 23:49
    —
Loopback wrote:
Тут же надо огород городить.
Насколько это жертвенно? Цеплять хотя бы бесшаблонные маски получится?
Loopback wrote:
То, что сейчас есть, тут не поможет.
А если блокировать проги на полный запуск, но оставлять в памяти идентификаторы процессов для их последующего закрытия?

#162:  Author: HA3APET PostPosted: Wed Mar 09, 2011 01:53
    —
Loopback
Спасибо за долгожданный параметр /T
Потестировал на ряде программ.
Всё отлично завершается, но если программа отображается в трее, то после закрытия она продолжает визуально отображаться в трее, пока его не обновить, например провести мышкой по трею. Это известная проблема. Она так же наблюдается если закрывать программу через taskkill /F, но если использовать taskkill /T, то всё завершается более корректно.
Нельзя ли сделать завершение процесса, более "мягким" с завершением всех его дочерних процессов?

#163:  Author: FlasherLocation: Москва PostPosted: Wed Mar 09, 2011 02:19
    —
HA3APET wrote:
но если программа отображается в трее, то после закрытия она продолжает визуально отображаться в трее, пока его не обновить, например провести мышкой по трею. Это известная проблема.
Точно так же происходит, если убивать процессы из Диспетчера задач.

#164:  Author: HA3APET PostPosted: Wed Mar 09, 2011 02:38
    —
Flasher
Да, да. Но есть же положительный пример - taskkill /T

#165:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Mar 09, 2011 17:05
    —
А я что-то пытался убить KatMouse.exe через taskkill с параметром /t - ни фига не дохнет. А с параметром /f (или /f /t) дохнет, и остается в трее иконка. Так что не думаю, что параметр /t как-то может помочь удалить иконку из трея, т.к. это проблема винды, что она при закрытии процессов не удаляет их значки из трея автоматически.

#166:  Author: Loopback PostPosted: Wed Mar 09, 2011 17:14
    —
Flasher wrote:
Насколько это жертвенно? Цеплять хотя бы бесшаблонные маски получится?

Теоретически сделать можно что угодно. Вопрос, насколько это реально нужно - при запуске тотала запускать документы через внутренние ассоциации? Я что-то не могу придумать ни одного сценария, где это может понадобиться.
Еще момент: функция ShellExecute сама определяет, исполняемый ли файл дан в качестве параметра, или документ. Тут же придется это как-то определять вручную, и наверняка это не будет универсальным решением.
В общем, если будут доводы в пользу полезности фичи - возможно и сделаю, но в любом случае отдельной командой, в отдельном плагине.
Flasher wrote:
А если блокировать проги на полный запуск, но оставлять в памяти идентификаторы процессов для их последующего закрытия?

Вообще, как раз эти дела лучше бы делать скриптом... там где есть полноценные переменные и много нужных функций.
Autorun задумывался только для выполнения команд при автозапуске, не при завершении. Чтобы красиво и прозрачно реализовывать такие задумки, нужно вводить такое понятие, как "событие - завершение тотала". И в этом блоке писать завершающие операции. Само-собой, это потребует переписать изрядную часть кода.
HA3APET wrote:
Нельзя ли сделать завершение процесса, более "мягким" с завершением всех его дочерних процессов?

Я бы не назвал это "мягким" или чем-то в этом роде. Ведь в этом случае просто дополнительно убиваются процессы, вызванные из родительского. Это больше похоже на лечение насморка гильотиной.
Поиск кое-что дал по этому вопросу. Есть и другие способы убирания значков, от попытки корректного закрытия программы через сообщения (что, понятно, может и не сработать), до убийственно корявых - вплоть до программного прогона мышки над треем Wink Но ни одного достаточно надежного нет, это недоработка трея в винде.
В общем, стоит ли со всем этим заморачиваться ради фантомного значка в трее - не уверен.

#167:  Author: HA3APET PostPosted: Wed Mar 09, 2011 17:24
    —
Loopback
Думаю стоит, иначе после многократного открытия-закрытия ТС будет вот такая картина из фантомных значков

#168:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Mar 09, 2011 17:30
    —
Да, мне щас тоже попадался вариант прогона мышки над треем - хорошо что сидел, когда читал. Very Happy Только не знаю, как оно будет действовать на скрытую часть трея.


HA3APET, а тебе эти значки сильно нужны в трее? Может, поместить их в скрытую часть области уведомлений (всегда скрывать значок)? Тогда они будут скапливаться там и не будут плодиться на самой панели задач.

#169:  Author: HA3APET PostPosted: Wed Mar 09, 2011 17:32
    —
MVV
Да, некоторые не дохнут по taskkill /T, но таких не так много.
Можно тогда организовать как бы двойное завершение, сперва корректное через taskkill /T, а потом на всякий случай taskkill /F

Попробовал ваше дополнение Starter, спасибо за него. Всё отлично,мне понравилось, но можно ли убрать отображение консоли? А то этот свёрнутый батник всю малину портит. Может задействовать уже готовый для этих нужд Hidcon. Или можно сделать, что бы подхватывался не только Starter.bat, но и Starter.exe?

#170:  Author: HA3APET PostPosted: Wed Mar 09, 2011 17:36
    —
MVV wrote:

HA3APET, а тебе эти значки сильно нужны в трее? Может, поместить их в скрытую часть области уведомлений (всегда скрывать значок)? Тогда они будут скапливаться там и не будут плодиться на самой панели задач.

В том то и дело, что не нужны) Вариант со скрыванием не очень интересен. Хочется, что бы всё было идеально, совершенно)

#171:  Author: Loopback PostPosted: Wed Mar 09, 2011 17:50
    —
Поставил KatMouse, проверил - у меня он taskkill /T убивается сразу, без /T - ровно с трех раз, в обоих случаях значок исчезает. Всё, что пробовал у себя другое - значок исчезает и без /T. В общем, ясности нет, может просто сама программа на скрине кривовата? Что это такое?

В принципе, попробовать прибивать дерево можно, если taskkill /T делает только это.

#172:  Author: HA3APET PostPosted: Wed Mar 09, 2011 17:59
    —
Loopback
Программа на скрине - tcamper, но себя так ведут ещё очень много программ. Изгаляюсь над своей сборкой drweb уже не один год. Так там тоже спайдер агент оставляет фантомный значок, если убивать через диспетчер задач или через taskkill /F, но по taskkill /T всё отлично.

#173:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Mar 09, 2011 18:14
    —
Понятия не имею, как завершение дерева процессов может что-то изменить, если программа создает всего один процесс. Сколько раз писал программы, добавляющие значки в трей, всегда при убийстве процесса значок оставался.

HA3APET wrote:
Попробовал ваше дополнение Starter, спасибо за него. Всё отлично,мне понравилось, но можно ли убрать отображение консоли? А то этот свёрнутый батник всю малину портит. Может задействовать уже готовый для этих нужд Hidcon. Или можно сделать, что бы подхватывался не только Starter.bat, но и Starter.exe?

Неужели появляющаяся на секунду кнопка панели задач так мозолит глаза? С помощью любого редактора ресурсов замени unicode-строку bat на exe, чтобы запускался экзешник, а не батник (такая строка там одна, по смещению 0x0418). Smile

#174:  Author: FlasherLocation: Москва PostPosted: Wed Mar 09, 2011 19:34
    —
Loopback wrote:
Вопрос, насколько это реально нужно - при запуске тотала запускать документы через внутренние ассоциации? Я что-то не могу придумать ни одного сценария, где это может понадобиться.
Ну, к примеру, ты сам писал про открытие html при запущенном браузере. К чему, раз с твоей точки зрения документы открывать не требуется? Я, например, на рабочем месте хочу запускать некое описание в листерном плагине HTMLView, а у меня открывается браузер, который запускается значительно дольше, или ряд документов, которые, в принципе, могут открыться только в прогах в составе сборки ТС и которые нужны в течении некоторой рабочей сессии, потом список через какой-то период удаляется и вписывается новая партия документов, ну и т.д..
Loopback wrote:
В общем, если будут доводы в пользу полезности фичи - возможно и сделаю, но в любом случае отдельной командой, в отдельном плагине.
Меня устроит и отдельный.
Loopback wrote:

Вообще, как раз эти дела лучше бы делать скриптом... там где есть полноценные переменные и много нужных функций.
Хочется всё-таки решать задачу TC-шным интерфейсом.
Loopback wrote:
Autorun задумывался только для выполнения команд при автозапуске, не при завершении.
Но уже фича с /T реализована, несмотря на задумки.
Loopback wrote:
Чтобы красиво и прозрачно реализовывать такие задумки, нужно вводить такое понятие, как "событие - завершение тотала". И в этом блоке писать завершающие операции. Само-собой, это потребует переписать изрядную часть кода.
Хм. И что ты предлагаешь? Отдельную библиотеку? Если так, то кто бы взялся за её написание?

#175:  Author: Loopback PostPosted: Wed Mar 09, 2011 22:33
    —
Flasher wrote:
Ну, к примеру, ты сам писал про открытие html при запущенном браузере. К чему, раз с твоей точки зрения документы открывать не требуется?

Просто чтобы указать ограничение, раз уж функция это может делать. Реальной необходимости да, не вижу. В конце-концов, можно и просто запустить нужный просмотрщик с этим документом в качестве параметра.
Flasher wrote:
Меня устроит и отдельный.

Ок, сделаю из спортивного интереса Smile
Flasher wrote:
Но уже фича с /T реализована, несмотря на задумки.

Эти процессы плагин запускает сам. Со сторонними сложнее. Нет, ну можно, конечно, сделать функцию типа "CloseProcessOnExit" c параметром в виде имени процесса, но это довольно коряво.
Flasher wrote:
Хм. И что ты предлагаешь? Отдельную библиотеку? Если так, то кто бы взялся за её написание?

Ну, в принципе MVV выше уже написал плагинчик с батником.

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

#176:  Author: FlasherLocation: Москва PostPosted: Wed Mar 09, 2011 23:16
    —
Loopback wrote:
Реальной необходимости да, не вижу.
Для себя, но не для остальных. Wink
Loopback wrote:
Ок, сделаю из спортивного интереса Smile
Это радует.
Loopback wrote:
Со сторонними сложнее. Нет, ну можно, конечно, сделать функцию типа "CloseProcessOnExit" c параметром в виде имени процесса, но это довольно коряво.
А почему бы и нет? В чём корявость?
Loopback wrote:
Ну, в принципе MVV выше уже написал плагинчик с батником.
По батнику я уже отписал.
Loopback wrote:
А что касается события на выход, это должно быть сделано в основном плагине. После определенных модификаций. Сделать это можно, будет тогда Autorun не только менеджер загрузки, но и выгрузки. Но вряд ли в ближайшем релизе.
Это какое-то отношение к способу MVV имеет? Или речь идёт о той самой переписи изрядной части кода?

#177:  Author: Loopback PostPosted: Wed Mar 09, 2011 23:47
    —
Flasher wrote:
Для себя, но не для остальных.

Ну, кроме тебя в защиту идеи пока никто и не высказывался Wink
Flasher wrote:
А почему бы и нет? В чём корявость?

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

В данном случае правильно будет разделить конфигурацию на две секции - инициализации (что сейчас и есть) и финализации, в которой будут точно так же как и сейчас выполняться команды.
Flasher wrote:
Или речь идёт о той самой переписи изрядной части кода?

Ага, о ней.

#178:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 01:36
    —
Loopback wrote:
Не люблю решений, которые требуют для своей работы какой-то специальной обработки, сильно отличающейся от основной реализации. Это как раз тот случай.
А если то же самое, но отдельной библиотекой?
Loopback wrote:

В данном случае правильно будет разделить конфигурацию на две секции - инициализации (что сейчас и есть) и финализации, в которой будут точно так же как и сейчас выполняться команды.
Это-то я понял. А ещё лучше сделать одну команду (Terminate, например), после которой в cfg можно задать список закрываемых программ, обрамлённый тегами.

#179:  Author: Loopback PostPosted: Thu Mar 10, 2011 11:06
    —
Flasher wrote:
А если то же самое, но отдельной библиотекой?

Можно, но просто не хочется тратить время на временные решения.
Flasher wrote:
А ещё лучше сделать одну команду (Terminate, например), после которой в cfg можно задать список закрываемых программ, обрамлённый тегами.

Не лучше, потому что неудобно с точки зрения парсинга. Скорее всего будет что-нибудь вроде:

Code:
TerminateProcess "proc1.exe" ["proc2.exe" "procN.exe"]

#180:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 10, 2011 11:22
    —
Loopback wrote:
Скорее всего будет что-нибудь вроде:

Code:
TerminateProcess "proc1.exe" ["proc2.exe" "procN.exe"]

Думаю, можно не утруждать себя парсингом кучи имен в одной команде, нагляднее будет, если будет несколько строчек с TerminateProcess. А вот поддержка масок бы скорее всего не помешала. Еще, думаю, могла бы быть полезной функция убийства процесса по заголовку или классу окна. Хотя, для решения таких задач есть более специализированные решения.

#181:  Author: Loopback PostPosted: Thu Mar 10, 2011 11:30
    —
MVV wrote:
Думаю, можно не утруждать себя парсингом кучи имен в одной команде, нагляднее будет, если будет несколько строчек с TerminateProcess.

Как раз несколько штук парсить - не проблема. И никто не мешает использовать несколько команд с одним параметром.
MVV wrote:
А вот поддержка масок бы скорее всего не помешала.

Посмотрим.
MVV wrote:
Еще, думаю, могла бы быть полезной функция убийства процесса по заголовку или классу окна. Хотя, для решения таких задач есть более специализированные решения.

Ну как бы да, второй Autoit писать не хочется.

#182:  Author: HA3APET PostPosted: Thu Mar 10, 2011 14:17
    —
MVV wrote:
Неужели появляющаяся на секунду кнопка панели задач так мозолит глаза?

Свёрнутый батник висит на протяжении всей работы с ТС, или вы задумывали не так?

#183:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 10, 2011 14:33
    —
HA3APET wrote:
MVV wrote:
Неужели появляющаяся на секунду кнопка панели задач так мозолит глаза?

Свёрнутый батник висит на протяжении всей работы с ТС, или вы задумывали не так?

Конечно не так. Если батник завершает работу, его окно должно закрываться. И вообще, я ничего не задумывал, это всё лежит на системе.

Проги из батника надо запускать командой start (start "" "x:\path\to\program.exe"), чтобы они запускались в фоне, иначе батник будет ожидать их завершения.

Также надо убрать команды pause из батника, вставленные для наглядности. Rolling Eyes

#184:  Author: HA3APET PostPosted: Thu Mar 10, 2011 15:13
    —
MVV
pause конечно убрал, а вот запускал не через start, спасибо теперь всё ок. Ещё перевёл bat в exe и наконец то добился чего хотел.

Обнаружилась одна проблема. Если открыть TC и перейти в Сеть/FS-плагины, то батник не отрабатывает второй раз при закрытии ТС, а следовательно программа не закрывается.

Code:
@echo off
title Starter
if -%1==-0 goto starter_load
if -%1==-1 goto starter_unload
goto :EOF

:starter_load
start "" "%commander_path%\Camper.exe"
echo Loading...
goto :EOF

:starter_unload
taskkill /T /IM Camper.exe
echo Unloading...
goto :EOF

#185:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 16:49
    —
Loopback wrote:
Можно, но просто не хочется тратить время на временные решения.
Всё-таки возмёшься за autorun? Просто с библиотекой всё вышло бы значительно быстрее. Ну, смотри.
Loopback wrote:
Не лучше, потому что неудобно с точки зрения парсинга.
Почему? После оригинального тега парсишь построчно. А ты предлагаешь всё в одну строку пихнуть, или перенос строки будет также учитываться как завершающий строку с параметрами ключ?

#186:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 10, 2011 17:23
    —
HA3APET wrote:
Обнаружилась одна проблема. Если открыть TC и перейти в Сеть/FS-плагины, то батник не отрабатывает второй раз при закрытии ТС, а следовательно программа не закрывается.

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

#187:  Author: Loopback PostPosted: Thu Mar 10, 2011 20:54
    —
Flasher wrote:
Всё-таки возмёшься за autorun? Просто с библиотекой всё вышло бы значительно быстрее. Ну, смотри.

Да вроде как спешки-то и нет. Жили же без этой функции? Wink
Flasher wrote:
Почему? После оригинального тега парсишь построчно.

Потому что так сделан парсер. Одна строка - одна команда. Это кардинально упрощает парсинг. С разбиванием гемора не оберешься, да и не нравится мне так.
Flasher wrote:
А ты предлагаешь всё в одну строку пихнуть, или перенос строки будет также учитываться как завершающий строку с параметрами ключ?

Выше уже с MVV обговаривали этот момент. Хочешь - несколько параметров в одной команде, хочешь - несколько команд. Может еще как-нибудь, но без многострочности.

#188:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 20:59
    —
Loopback wrote:
Да вроде как спешки-то и нет. Жили же без этой функции?
Как и без всего остального, и без autorun-a в своё время...
Loopback wrote:
Хочешь - несколько параметров в одной команде, хочешь - несколько команд. Может еще как-нибудь, но без многострочности.
А если я хочу несколько команд с параметрами, тогда что? Без многострочности - плохо для конечного юзера. Правка одной строки крайне неудобна, даже с переносом в редакторе. Неужели так трудно обрабатывать 0Ah?

#189:  Author: Loopback PostPosted: Thu Mar 10, 2011 21:19
    —
Flasher wrote:
Как и без всего остального, и без auotrun-a в своё время...

Ну так появился же. Всё появится, рано или поздно, так или иначе...
Flasher wrote:
А если я хочу несколько команд с параметрами, тогда что?

И в чем проблема? Записываешь несколько команд с параметрами.
Flasher wrote:
Без многострочности - плохо для конечного юзера. Правка одной строки крайне неудобна, даже с переносом в редакторе. Неужели так трудно обрабатывать 0Ah?

Для многострочности есть Autoit, AHK, VBS и куча других полноценных скриптовых языков. Autorun на это звание не претендует.

В Autorun конец строки является однозначным маркером завершения команды. Если ограничение убрать, что парсер должен делать в такой ситуации?
Code:

ShellExec "program.exe"
bla "my dir"

Считать bla "my dir" продолжением команды или ошибочной строкой с мусором?

#190:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 21:26
    —
Loopback wrote:
И в чем проблема? Записываешь несколько команд с параметрами.
И как же парсер отличит exe/bat/au3/vbs/... в качестве параметра от команды?
Loopback wrote:
Считать bla "my dir" продолжением команды или ошибочной строкой с мусором?
Если это параметр, то строкой с мусором, он же не на одной строке с program.exe.

#191:  Author: Loopback PostPosted: Thu Mar 10, 2011 21:45
    —
Flasher wrote:
И как же парсер отличать exe/bat/au3/vbs... в качестве параметра от команды?

Эээ. Ты вообще про что? Мы же вроде про команду завершения процессов говорили. Какие еще параметры?
Flasher wrote:
Если это параметр, то Строкой с мусором, не на одной строке же с program.exe.

Не катит. Любая команда/функция должна иметь маркер начала и маркер конца. Без этого парсер не поймет, где заканчиваются данные, относящиеся к этой команде, особенно это критично для команд с необязательными параметрами. В Autoit маркером конца является закрывающая скобка ), в Autorun - перевод строки.

На этом предлагаю закрыть тему с многострочностью. В существующем виде я все равно не вижу пути ее реализации.

#192:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 22:02
    —
Loopback wrote:
Эээ. Ты вообще про что? Мы же вроде про команду завершения процессов говорили. Какие еще параметры?
Ты сам про них написал. Я так понял, что ты имел в виду существующий парсер для ShellExec. Вот я и спрашиваю, как парсер при написании путей к exe-файлам в кач. параметра отличит их от путей к вызываемым прогам, если и те и другие написаны в одну строку?
Loopback wrote:
Не катит. Любая команда/функция должна иметь маркер начала и маркер конца. Без этого парсер не поймет, где заканчиваются данные, относящиеся к этой команде, особенно это критично для команд с необязательными параметрами. В Autoit маркером конца является закрывающая скобка ), в Autorun - перевод строки.
Так придумай новые маркеры. Сделай, чтобы для списка программ использовался перевод строки в качестве разделителя, а для основной команды открывающий и закрывающий маркер, например, символ "&".

#193:  Author: Loopback PostPosted: Thu Mar 10, 2011 22:08
    —
Flasher wrote:
Так придумай новые маркеры

Это приказ? Wink

#194:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 22:11
    —
Это предложение, которого может очень качественно отразиться на юзабильности при добавлении утилит/программ к общему списку. Wink
А её лучше начинать новую команду autorun-a с "кавычка + перевод строки", но списки обрабатывать по "новый маркер + перевод строки". Как такая мысль?

#195:  Author: Loopback PostPosted: Thu Mar 10, 2011 22:36
    —
Ради 1 (одной) функции (которой, кстати, еще даже нет) и удобства работы со списком из десятка программ, ты мне предлагаешь убить не один час работы, полностью изменить идеологию работы плагина и похоронить прозрачность работы с ним. Я пока к этому не готов.

#196:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 22:44
    —
Loopback
По-моему, ты сильно преувеличиваешь, если учесть дописку ниже.
Хотя ... кавычки-то только в ShellExec используются. Rolling Eyes

#197:  Author: Loopback PostPosted: Thu Mar 10, 2011 23:02
    —
Flasher
Скорее преуменьшаю, хоть учитывай, хоть нет. Ну не вижу я кардинального улучшения юзабельности, стоящего таких изменений. Ради того, чтобы иметь возможность записать

Code:

TerminateProcess "proc1.exe"
"proc2.exe"
"proc3.exe"


вместо

Code:

TerminateProcess "proc1.exe"
TerminateProcess "proc2.exe"
TerminateProcess "proc3.exe"


переписывать пол-плагина? В конце-концов, ты собираешься по пять раз на дню список редактировать, что ли?

#198:  Author: FlasherLocation: Москва PostPosted: Thu Mar 10, 2011 23:07
    —
Loopback
Ты мне на вопрос по параметрам так и не ответил. Там не только юзабильность, но и технические нюансы. Плюс это касается не только Terminate, но и ShellExec. К тому же тем самым исключится многократный вызов одной и той же команды.
Про пол-плагина так и не понял. Откуда такие нереальные завышения, когда нужно только парсер слегка поправить?

#199:  Author: Loopback PostPosted: Fri Mar 11, 2011 00:05
    —
Flasher wrote:
Ты мне на вопрос по параметрам так и не ответил. Там не только юзабильность, но и технические нюансы.

Значит я его не понял.
Flasher wrote:
Плюс это касается не только Terminate, но и ShellExec.

Ну, приехали. Каким боком тут ShellExec?
Flasher wrote:
К тому же тем самым исключится многократный вызов одной и той же команды.

Не все ли равно, где плагин будет перебирать имена - в одной команде или нескольких? Выигрыш - 0.
Flasher wrote:
когда нужно только парсер слегка поправить?

Ё-моё, ты это совершенно точно знаешь, что с такой уверенностью заявляешь?

Ну еще раз повторюсь: я считаю, что трудозатраты на добавление этой возможности несоразмерны с ее полезностью.

#200:  Author: FlasherLocation: Москва PostPosted: Fri Mar 11, 2011 00:17
    —
Loopback wrote:
Значит я его не понял.
Что конкретно ты не понял из вопроса?
Loopback wrote:
Ну, приехали. Каким боком тут ShellExec?
Ну, парсер же общий, насколько я понимаю. И правила для всех команд в cfg общие. Или нет?
Loopback wrote:

Не все ли равно, где плагин будет перебирать имена - в одной команде или нескольких? Выигрыш - 0.
Скорость обработки разве не должна возрасти при этом?
Loopback wrote:
Ё-моё, ты это совершенно точно знаешь, что с такой уверенностью заявляешь?
Very Happy Зачем же так остро реагировать? Ты сам уверенно заявляешь, что править надо аж пол-плагина. Ты был искренним, когда это писал? А также ты ясно не ответил на вопрос, что ты думаешь касаемо "кавычки+перевод строки" и т.п. И в чём будет сложность при такой обработке?

#201:  Author: HA3APET PostPosted: Fri Mar 11, 2011 00:21
    —
MVV wrote:
Не знаю, это не должно влиять на то, как система выгружает процессы.

А если вернуть оригинал, который запускает батник, и оригинальный батник из архива, его кнопка будет появляться на панели задач при закрытии тотала?


Выше я отписался делая это с батником.
По поводу вашего вопроса, если всё оригинальное из архива - кнопка появляется, но если хоть раз во время работы с ТС зайти в Сеть, то кнопка уже не появляется. То есть та же проблема. Батник не отрабатывает при выгрузке ТС.
Попробуй те сами.
Autorun версии 1.4.9.2 в нём
Code:
LoadLibrary /U Plugins\Starter.dll

#202:  Author: Loopback PostPosted: Fri Mar 11, 2011 00:54
    —
Flasher wrote:
Что конкретно ты не понял из вопроса?

А что я из этого: "А если я хочу несколько команд с параметрами, тогда что?" должен был понять?
Flasher wrote:
Ну, парсер же общий, насколько я понимаю. И правила для всех команд в cfg общие. Или нет?

Общий, и что? Нафига в ShellExec нужна многострочность?
Flasher wrote:
Ты сам уверенно заявляешь, что править надо аж пол-плагина. Ты был искренним, когда это писал?

Если и преувеличил, то не сильно. Парсер так точно надо переписывать.
Flasher wrote:
Скорость обработки разве не должна возрасти при этом?

Микросекунды в лучшем случае. Что там, что там все равно переборы будут.
Flasher wrote:
А также ты ясно не ответил на вопрос, что ты думаешь касаемо "кавычки+перевод строки" и т.п.

Мне не нравится. Мне вообще эта идея не нравится изначально, полностью и безоговорочно. Я считаю ее для плагина избыточной. Я считаю ее сложной в реализации. Но даже если бы она была не сложной, она мне все равно не нравится.

По-моему, этот бесплодный спор пора было закончить еще на предыдущей странице. Все равно каждый останется при своем мнении.

#203:  Author: FlasherLocation: Москва PostPosted: Fri Mar 11, 2011 01:01
    —
Loopback wrote:
А что я из этого: "А если я хочу несколько команд с параметрами, тогда что?" должен был понять?
А, т.е. то что я писал до этого нужно пропускать мимо глаз?
Loopback wrote:
Нафига в ShellExec нужна многострочность?
Ты же пишешь, что параметры команды можно прописывать в одну строку. Чем ShellExec принципиально отличается от Terminate в этом отношении?
Loopback wrote:
Микросекунды в лучшем случае. Что там, что там все равно переборы будут.
С этим ясно.
Loopback wrote:
Но даже если бы она была не сложной, она мне все равно не нравится.
А чем не нравится то хоть?

#204:  Author: Loopback PostPosted: Fri Mar 11, 2011 01:30
    —
Flasher wrote:
А, т.е. то что я писал до этого нужно пропускать мимо глаз?

Ты про это?
Quote:

Вот я и спрашиваю, как парсер при написании путей к exe-файлам в кач. параметра отличит их от путей к вызываемым прогам, если и те и другие написаны в одну строку?

Все равно неясна суть вопроса. Поясни что-ли примером.
Flasher wrote:
Ты же пишешь, что команды можно прописывать в одну строку.

Не знаю, либо я написал непонятно, либо ты не понял. Несколько команд в одной строке писать нельзя.
Flasher wrote:
А чем не нравится то хоть?

Всё, с этим проехали. А то сейчас еще на две страницы писанины будет.

#205:  Author: FlasherLocation: Москва PostPosted: Fri Mar 11, 2011 01:41
    —
Loopback wrote:
Все равно неясна суть вопроса. Поясни что-ли примером.
Ты писал:
Loopback wrote:
И никто не мешает использовать несколько команд с одним параметром.
Наверно я не так понял. О каких командах и параметрах шла речь? Я представил что-то вроде:
Code:
"Program0.exe" "param's" "Program1.exe "param's" "Program2.exe" "param's"

Loopback wrote:
Несколько команд в одной строке писать нельзя.
А, ну пока нельзя. Но ты же пишешь, что собираешься так сделать.
Loopback wrote:
Всё, с этим проехали. А то сейчас еще на две страницы писанины будет.
Не хочешь писать здесь - напиши в личку, мне интересно.

#206:  Author: Loopback PostPosted: Fri Mar 11, 2011 02:04
    —
Flasher wrote:
Наверно я не так понял. О каких командах и параметрах шла речь? Я представил что-то вроде:

А, ну теперь ясно в чем недопонимание. Речь шла только о TerminateProcess, и имелась в виду потенциальная возможность записывать ее в двух вариантах (поскольку все параметры здесь, по-сути, равноценны):
Code:

TerminateProcess Proc1.exe Proc2.exe Proc3.exe

или

TerminateProcess Proc1.exe
TerminateProcess Proc2.exe
TerminateProcess Proc3.exe


Flasher wrote:
А, ну пока нельзя. Но ты же пишешь, что собираешься так сделать.

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

Надеюсь, теперь вопрос разрешен, и можно с чистой совестью уйти спать.

#207:  Author: FlasherLocation: Москва PostPosted: Fri Mar 11, 2011 02:14
    —
Loopback wrote:
Честно, такое бы мне только в страшном сне могло присниться - ну зачем может понадобиться несколько команд в одной строке? Строк не хватает?
Это же не приснилось:
Code:
TerminateProcess Proc1.exe Proc2.exe Proc3.exe
Строк-то хватает, TerminateProcess писать везде - не очень. По другому вопросу прошу отписать в личку.

#208:  Author: Loopback PostPosted: Fri Mar 11, 2011 10:58
    —
Flasher wrote:
Строк-то хватает, TerminateProcess писать везде - не очень.

Ну, даже не знаю что и сказать. Вспоминается известный анекдот: "Вам шашечки - или ехать?"... Давай тогда и остальные команды разбивать на строки, а фигли, это же такая неподъемная задача, в каждой строке ShellExec или SetEnv писать Exclamation

#209:  Author: sa PostPosted: Fri Mar 11, 2011 11:27
    —
Flasher wrote:
TerminateProcess писать везде - не очень.

Попробуй копировать Smile.

#210:  Author: FlasherLocation: Москва PostPosted: Fri Mar 11, 2011 15:44
    —
Loopback wrote:
Давай тогда и остальные команды разбивать на строки
Давай, при том, что они уже на них разбиты. Mr. Green
Quote:
это же такая неподъемная задача, в каждой строке ShellExec или SetEnv писать
С этими не страшно. Тут список гораздо меньше, чем с Terminate. А на флешке программ может быть под сотню. Можно несколько Кб сэкономить, не говоря уже о времени на правку. Wink

sa
Серьёзно? А я и не подумал. Я то всю жизнь посимвольно текст набивал...

По многострочности тема закрыта.

#211:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Mar 11, 2011 16:17
    —
Это не есть правильный подход, когда надо убивать сотню процессов. Тем более, для этого можно использовать другие средства.

#212:  Author: FlasherLocation: Москва PostPosted: Fri Mar 11, 2011 16:21
    —
MVV
Меня устроит.

#213:  Author: Loopback PostPosted: Thu Mar 17, 2011 12:54
    —
HA3APET
Закрытие дерева сделал. Но поможет ли это - не знаю. Протестировал на Camper, его значок у меня остается и при закрытии дерева плагином, и при помощи taskkill /T.

1.4.9.3 beta

#214:  Author: HA3APET PostPosted: Sat Mar 19, 2011 19:23
    —
Loopback
Не помогло. На Camper не стоит тестировать, очень кривая программка к сожалению (не в обиду D1P). А вот TCamper отлично уничтожается через taskkill /T, по-экспериментируйте на нём. Судя по тестам, получается сейчас ваш ключ /TT не есть аналог taskkill /T...

#215:  Author: Loopback PostPosted: Sat Mar 19, 2011 20:07
    —
HA3APET
Было бы что тестировать... Ключ делает то, что можно почерпнуть из описания соответствующего ключа taskkill: "Завершение указанного процесса и всех его дочерних процессов". Возможно, он не повторяет полностью его внутреннюю реализацию.

Я рекурсивно прохожу по процессам, проверяя принадлежность каждого к родительскому процессу. Даже не знаю, что тут можно еще выдумать.

#216:  Author: HA3APET PostPosted: Sat Mar 19, 2011 20:20
    —
Loopback
Я в программировании ноль, кроме тестирования ничем помочь не могу.

Вот например у известной консольной утилитки nircmdc есть два похожих параметра:
closeprocess
killprocess
Первый из них корректно завершает процесс и иконка из трея исчезает
Второй убивает процесс, в трее иконка остаётся.

Вот по этой аналогии хочется, что бы ваш плагин умел завершать процесс, а не убивать его.

#217:  Author: Loopback PostPosted: Sat Mar 19, 2011 22:49
    —
HA3APET wrote:
Вот например у известной консольной утилитки nircmdc есть два похожих параметра:

closeprocess
killprocess

Первый из них корректно завершает процесс и иконка из трея исчезает

Второй убивает процесс, в трее иконка остаётся.

Ну, собственно, тут всё логично. Я уже писал, что можно попытаться закрыть процесс корректно с помощью сообщения окну, что closeprocess и делает. Можно добавить такой код, но тут встают некоторые проблемы.

Во-первых, у приложения может быть несколько форм. Если в обычных можно найти ту, у которой нет родителя, то у программ на дельфи сложно надежно определить, какая форма "главная". Можно попытаться посылать сообщения всем подряд, но не знаю, во что это может вылиться.

Во-вторых, окно в силу разных обстоятельств может не отреагировать на сообщение закрытия, или отреагировать с большой задержкой. Чтобы не зависнуть навечно, придется вводить некий таймаут. Если окно не закроется за время таймаута, придется его убить, и иконка опять может остаться. При этом, если таких приложений окажется несколько, закрытие тотала может затянуться.

#218:  Author: HA3APET PostPosted: Sat Mar 19, 2011 23:10
    —
Loopback
Вы ввели два параметра для закрытия - T и TT, так пусть один убивает, а другой пытается закрыть. А пользователь сам выберет, что предпочтительнее с конкретной программой.

#219:  Author: Loopback PostPosted: Sat Mar 19, 2011 23:23
    —
HA3APET wrote:
Вы ввели два параметра для закрытия - T и TT, так пусть один убивает, а другой пытается закрыть. А пользователь сам выберет, что предпочтительнее с конкретной программой.

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

Например, так:
/W - пробовать закрыть окна. Стандартный таймаут 1000 мс.
/W1234 - то же самое, но с произвольно заданным таймаутом.

#220:  Author: HA3APET PostPosted: Sat Mar 19, 2011 23:57
    —
Loopback
отлично, буду ждать решения.

#221:  Author: Loopback PostPosted: Sun Mar 20, 2011 01:40
    —
Ну вот, сейчас вроде всё как ожидалось работает (/TT /W). Правда, тестировал только на Camper - единственном, с чем у меня наблюдались проблемы.

1.4.9.3 beta

#222:  Author: HA3APET PostPosted: Sun Mar 20, 2011 02:50
    —
Loopback
Да всё отлично, для одной программы.
Но если прописать 2 программы
Code:
ShellExec  /TT /W "Camper.exe" "" "%commander_path%\Camper\"
ShellExec  /TT /W "AUTOFx.exe" "" "%commander_path%\autofx\"


то первая убивается (Camper), а вторая завершается. Если поменять местами
Code:
ShellExec  /TT /W "AUTOFx.exe" "" "%commander_path%\autofx\"
ShellExec  /TT /W "Camper.exe" "" "%commander_path%\Camper\"


То опять первая убивается (AUTOFx), значёк остаётся, а вторая завершается и значка нет.

#223:  Author: Loopback PostPosted: Sun Mar 20, 2011 11:36
    —
HA3APET
AUTOFx это что? Дай ссылочку, потестирую.

#224:  Author: HA3APET PostPosted: Sun Mar 20, 2011 16:53
    —
Loopback
AUTOFx - после запуска, можно будет в TC вызывать программу-редактор или просмотрщик удерживая левую кнопку мыши на файле, переключаться между F3 и F4 по средней кн мыши.

#225:  Author: Loopback PostPosted: Sun Mar 20, 2011 19:28
    —
Какая-то бредовая ситуация получается Confused Почему-то PID процесса, который получаю из члена hProcess структуры, передаваемой в ShellExecuteEx, получается не такой, который виден в диспетчере задач. Пробовал аж тремя различными способами. При этом hProcess однозначно правильный - процессы на выходе по нему убиваются.

Если запускать процесс с помощью CreateProcess, PID получается правильный. Но в этом случае теряется возможность запустить документ.

В чем дело неясно совершенно. В общем, если решение проблемы не найдется, придется эмулировать работу с документами с помощью FindExecutable или AssocQueryString. Но вряд ли получится это сделать полноценно.

#226:  Author: HA3APET PostPosted: Sun Mar 20, 2011 20:13
    —
Loopback
ещё из наблюдений, вдруг поможет

Code:
ShellExec /T /W "Camper.exe" "" "%commander_path%\Camper\"

Camper убивается - значок остаётся
Code:
ShellExec /TT /W "Camper.exe" "" "%commander_path%\Camper\"

Camper завершается - значка нет

но если так

Code:
ShellExec  /TT /W "AUTOFx.exe" "" "%commander_path%\autofx\"
ShellExec  /T /W "Camper.exe" "" "%commander_path%\Camper\"


то Camper завершается (значок пропадает), как будто стоит /TT а не /T

#227:  Author: Loopback PostPosted: Sun Mar 20, 2011 23:54
    —
Попробовал перейти на связку AssocQueryString+CreateProcess, на первый взгляд работает нормально. Кстати, теперь не обязательно убивать дерево (что, впрочем, было очевидно с самого начала), достаточно использовать /T /W.

1.4.9.5 beta

#228:  Author: HA3APET PostPosted: Mon Mar 21, 2011 11:42
    —
Loopback
(
У меня плагин вообще ничего не запускает. Даже так
Code:
ShellExec "Camper.exe" "" "%commander_path%\Camper\"

Win7 x64 SP1

#229:  Author: Loopback PostPosted: Mon Mar 21, 2011 12:15
    —
HA3APET
Чудеса... Дома работает, сейчас пробую на работе - действительно, ничего. Ладно, будем разбираться.

#230:  Author: Loopback PostPosted: Mon Mar 21, 2011 15:11
    —
Ох, ну и намудрили же Майкрософт с AssocQueryString... Вроде документированная функция, а на разных системах работает как ей вздумается.

В общем, вроде поправил. Новую версию делать не стал, можно скачать по последней ссылке.

#231:  Author: HA3APET PostPosted: Mon Mar 21, 2011 15:39
    —
Loopback
Code:
ShellExec "Camper.exe" "" "%commander_path%\Camper\"

не запускается

но bat файлы запускаются
Code:
ShellExec "reg.bat" "" "%commander_path%"


но с полным игнорированием команд [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE]

#232:  Author: Loopback PostPosted: Mon Mar 21, 2011 16:11
    —
HA3APET wrote:
не запускается

А разве должен? Нужен же полный путь к файлу, или путь с переменными окружения. Запись

Code:
ShellExec "%commander_path%\Camper\Camper.exe" "" "%commander_path%\Camper\"

должна работать.

HA3APET wrote:
но bat файлы запускаются

Может быть путь, где лежит reg.bat, есть в PATH? Только в этом случае будет работать такая форма запуска - имя файла без пути.

HA3APET wrote:
но с полным игнорированием команд

Да, это я упустил. Поправлю.

#233:  Author: HA3APET PostPosted: Mon Mar 21, 2011 16:24
    —
Loopback wrote:
А разве должен? Нужен же полный путь к файлу, или путь с переменными окружения

До этого работало) привык писать так
Code:
ShellExec "Camper.exe" "" "%commander_path%\Camper\"


написал
Code:
ShellExec "%commander_path%\Camper\Camper.exe" "" "%commander_path%\Camper\"


Запустилось! Да, теперь именно в такой форме.
Завершается всё исправно.

#234:  Author: Loopback PostPosted: Mon Mar 21, 2011 16:49
    —
HA3APET wrote:
До этого работало) привык писать так

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

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

HA3APET wrote:
Запустилось! Да, теперь именно в такой форме.
Завершается всё исправно.

Хорошо, а то я уже отладочную версию начал делать.

#235:  Author: HA3APET PostPosted: Mon Mar 21, 2011 16:53
    —
Loopback
Осталось вернуть [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE] и дело сделано Smile

#236:  Author: Loopback PostPosted: Mon Mar 21, 2011 16:57
    —
HA3APET wrote:
Осталось вернуть [/SW_HIDE|/SW_SHOWNORMAL|/SW_MINIMIZE|/SW_MAXIMIZE] и дело сделано

Версию не меняю, обновил ссылку.

#237:  Author: HA3APET PostPosted: Mon Mar 21, 2011 17:26
    —
Loopback, всё отлично работает, всё как задумано! Спасибо за работу.

#238:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Mar 21, 2011 18:27
    —
ShellExecute ищет запускаемую программу в надцати местах, в то время как CreateProcess просто запускает из текущей папки (которая в тотале вовсе не обязана совпадать с папками в панелях и может быть такой, какой её поставит для своих нужд тотал) или по полному пути, он даже системные приложения не запустит, если путь к папке System32 не указан. Поэтому при работе с CreateProcess необходимо указание полного пути к приложению.

#239:  Author: Loopback PostPosted: Mon Mar 21, 2011 19:15
    —
MVV
Есть подозрение, что на выходе ShellExecute использует тот же CreateProcess, только предварительно проделывает всякие поисковые операции - по реестру и не только.

На самом деле не так важно, какая функция скрывается внутри ShellExec, главное, чтобы команда работала как в документации. Наверно, стоит добавить туда указание, что первым параметром предполагается полный путь файла.


HA3APET wrote:
Ещё для ShellExec был бы полезен параметр - задержка запуска в секундах.

Так есть команда Sleep. Просто разместить вызовы в конце конфигурации с заданной задержкой.

#240:  Author: HA3APET PostPosted: Mon Mar 21, 2011 19:29
    —
Loopback
Да) я уже разобрался, что так можно, по-этому и удалил сообщение.

#241:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Mar 21, 2011 21:00
    —
Loopback wrote:
Есть подозрение, что на выходе ShellExecute использует тот же CreateProcess, только предварительно проделывает всякие поисковые операции - по реестру и не только.

Или CreateProcess, или же обе используют что-то более низкоуровневое, недокументированное - процесс же создавать надо по-любому. Судя по импортам, как раз CreateProcess и вызывает, а та, вполне вероятно, в свою очередь вызывает что-то типа NtCreateProcessEx.
Но перед этим ShellExecute делает ооочень много всякой хренотени - вон обсуждали выше глюки плагина Starter, оказалось, что при вызове ShellExecute после захода в сетевое окружение возникает ошибка, и система убивает модуль. Пришлось вызывать чистый CreateProcess.

#242:  Author: HA3APET PostPosted: Tue Apr 26, 2011 03:18
    —
Loopback
Не запускаются пользовательские команды.
То есть если пользовательская команда является командой запуска файла, то всё работает.
А если пользовательская команда содержит команду перехода в папку, то не работает.
В частности пытаюсь добиться инициализации Virtual Panel при запуске TC.
Создал в usercmd.ini команду em_GoToVirtualPanel - cd \\\Virtual Panel,
но Autorun 1.4.9.5 beta её не выполняет.

#243:  Author: Loopback PostPosted: Tue Apr 26, 2011 09:44
    —
HA3APET
Так в документации и написано, что выполняются только файловые команды. Но я собирался попробовать переделать эту команду через WM_COPYDATA.

#244:  Author: HA3APET PostPosted: Tue Apr 26, 2011 09:49
    —
Loopback
Ясно, буду ждать реализацию данной возможности.

#245:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Apr 26, 2011 10:13
    —
HA3APET, а не проще ли сразу в тотале настроить переход к нужной папке? Или вкладку закрепить? Или запускать с помощью Autorun программу TCMC для перехода в нужную папку?

#246:  Author: HA3APET PostPosted: Tue Apr 26, 2011 10:27
    —
MVV
Я хочу что бы при открытии на обоих панелях были списки дисков.
Пока сделал так
Добавил в Autorun скрипт на TCWSHelp который выполняет cd \\\Virtual Panel, а затем cm_GotoPreviousDir

Но мне не нравится, то что всё это завязано на TCWSHelp.

Если подскажите ещё способы как перейти в \\\Virtual Panel и обратно, то буду рад.

Пытаюсь изучить синтаксис TCMC, но пока не понимаю его)
Подскажите на примере моей задачи.

#247:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Apr 26, 2011 12:03
    —
Ну вызвать последовательно TCMC с параметрами CD "\\\Virtual Panel" и потом CD "нужная папка в левой панели". Или же, раз такая пьянка, один раз вызвать TCMC с параметром CD "\\\Virtual Panel" CMcm_GotoPreviousDir.

#248:  Author: Loopback PostPosted: Tue Apr 26, 2011 13:55
    —
Переделал: скачать.

Поскольку тем же методом можно и напрямую устанавливать заданный каталог (не создавая пользовательскую команду), добавил и такую возможность. Правда, теперь появились сомнения в прозрачности синтаксиса CommandExec. Может лучше все же разделить EM-команды и команды с параметрами?

#249:  Author: HA3APET PostPosted: Tue Apr 26, 2011 20:21
    —
Loopback
Спасибо, всё чётко работает. Насчёт разделения не знаю... я разобрал без проблем, но наверное хуже не будет.
MVV, Loopback
В синтаксис команд всегда удобнее вникать на примерах и для пользователей эти примеры были бы очень полезны в ваших "хелпах".

#250:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Apr 26, 2011 21:34
    —
TCMC - не моя утилита, так что по поводу хелпа - не ко мне. Smile

#251:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 21:55
    —
HA3APET wrote:
Я хочу что бы при открытии на обоих панелях были списки дисков.
Каких дисков? Тех, что в "Мой компьютер"? Если да, то тут и autorun не требуется. Достаточно вызывать ТС из ярлыка с прописанной строкой в поле Объект:
"<Путь к totalcmd.exe>" /L=::{20D04FE0-3AEA-1069-A2D8-08002B30309D} /R=::{20D04FE0-3AEA-1069-A2D8-08002B30309D}


Last edited by Flasher on Tue Apr 26, 2011 22:00; edited 1 time in total

#252:  Author: sa PostPosted: Tue Apr 26, 2011 21:58
    —
HA3APET wrote:
Пытаюсь изучить синтаксис TCMC, но пока не понимаю его

По-моему вот здесь синтаксис достаточно внятно изложен.

#253:  Author: HA3APET PostPosted: Tue Apr 26, 2011 22:13
    —
Flasher
Мы говорили про инициализацию виртуальной панели, для этого её нужно открыть при запуске ТС, но при этом у меня было желание что бы при запуске ТС на обоих панелях был Мой компьютер. Задача решена.
sa
Спасибо, там уже понятнее, буду вникать. Эта утилита от MVV очень интересная, как и другие..

#254:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 22:20
    —
HA3APET wrote:
Мы говорили про инициализацию виртуальной панели, для этого её нужно открыть при запуске ТС, но при этом у меня было желание что бы при запуске ТС на обоих панелях был Мой компьютер. Задача решена.
Нифига не понял. Что надо то было в итоге - открыть плагин Virtual Panel или виртуальную папку "Мой компьютер" при запуске ТС? Если второе, то я для этого и привёл пример без использования autorun-а касаемо показа дисков.

HA3APET wrote:
Эта утилита от MVV очень интересная, как и другие..
>>>
MVV wrote:
TCMC - не моя утилита

#255:  Author: HA3APET PostPosted: Tue Apr 26, 2011 22:39
    —
Спутал с TCFS)

#256:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 22:41
    —
HA3APET wrote:
Спутал с TCFS)
Эта тоже не его, его TCFS2. Very Happy
А на вопрос ответить?

#257:  Author: HA3APET PostPosted: Tue Apr 26, 2011 22:41
    —
Flasher wrote:
Что надо то было в итоге - открыть плагин Virtual Panel или виртуальную папку "Мой компьютер" при запуске ТС?

И то и то) То есть при запуске открыть Virtual Panel и быстро вернуться назад

#258:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 22:43
    —
А, т.е. использовать последовательность, а потом по Alt+Влево вернуться по истории каталогов в Мой комп.?

#259:  Author: HA3APET PostPosted: Tue Apr 26, 2011 22:45
    —
Flasher
Да, всё решается теперь силами autorun
CommandExec /CD "\\\Virtual Panel"
SendCommand cm_GotoPreviousDir

#260:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 22:48
    —
HA3APET
А где тут фигурирует заход в "мой компьютер"? И при чём тут команда перехода к предыдущей папке? Какой смысл её вызывать при запуске? Confused

#261:  Author: HA3APET PostPosted: Tue Apr 26, 2011 22:54
    —
Flasher
SendCommand cm_GotoPreviousDir - что бы при открытии ТС не весела вкладка с виртуальной панелью. А открывались те же вкладки, что были при закрытии ТС.

В частности цель задачи была - что бы при открытии ТС, на обоих панелях была открыта вкладка Компьютер, но при этом инициализировалась виртуальная панель, посредством входа и выхода из неё.

#262:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 22:57
    —
HA3APET
Значит заход в "Мой компьютер" - это необязательное условие? Тогда смысл писать о нём было?
Правильно ли я понимаю, что это требуется для быстрой прогрузки содержимого Virtual Panel в текущей сессии при последующих обращениях?

#263:  Author: HA3APET PostPosted: Tue Apr 26, 2011 23:03
    —
Flasher
Заход в Компьютер не обязательное условие, это просто для примера было. А заход в \\\Virtual Panel нужен для того что бы кнопки на панели задач ТС связанные с Virtual Panel начали работать.
Например даже
Code:
%COMMANDER_PATH%\Plugins\wfx\VirtualPanel\VPBatch.exe ^config

без этого не работает.

#264:  Author: FlasherLocation: Москва PostPosted: Tue Apr 26, 2011 23:11
    —
HA3APET
ИМХО, решение очень неказистое. Надо подключать MVV, чтобы он в одном из своих Exe-шников добавил команду инициализации, тогда можно будет использовать
CommandExec "%COMMANDER_PATH%\Plugins\wfx\VirtualPanel\VPBatch.exe" /NewParam
без всяких левых перепрыжек между папками.

#265:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Apr 27, 2011 09:42
    —
Нормальное решение=) пока пользователь не зайдет в Virtual Panel, тотал не загрузит плагин (даже если загрузить DLL явно, никто ей не пришлёт FsInit и FsSetDefaultParams), поэтому все команды инициализации "в одном из своих Exe-шников" должны будут делать ровно то, что сейчас делает Autorun - т.е. переходить в папку виртуальной панели и возвращаться назад. Но сейчас это выполняется ровно 1 раз при запуске тотала, поэтому не нужно проверять что бы то ни было, да и это уже работает.

Вот если добавить в тотал возможность задавать список автозагружаемых при старте плагинов, это был бы кардинальный подход.

#266:  Author: MVVLocation: Ростов-Дон PostPosted: Sun May 08, 2011 20:07
    —
Loopback, замени, пожалуйста, название модуля HideMenu на TCFS2Tools в первом посте, и соответственно ссылку загрузки на http://wincmd.ru/plugring/tcfs2tools.html.

#267:  Author: Loopback PostPosted: Tue May 10, 2011 12:07
    —
MVV
Готово.

#268:  Author: ask-rusLocation: Russian Federation PostPosted: Sat May 14, 2011 11:14
    —
Loopback wrote:
ScrollTC (Автор - GreIVI)
Дает возможность (при наведении мыши) прокручивать колесиком в текущем окне любой неактивный компонент с полосой прокрутки.

Мог бы пользоваться, если бы под "окном" имелось в виду только окно TC, судя по названию.

Добавлено спустя 1 минуту 52 секунды:

В граф. редакторе скроллом меняю масштаб, а он мне полосой прокрутки движет.

#269:  Author: MVVLocation: Ростов-Дон PostPosted: Sat May 14, 2011 11:29
    —
А я поставил KatMouse, и всё работает, а если что, можно добавить окно или класс в исключения (например, комбобоксы, окно Crystal Player или Оперы).
А зачем запускать такой глобальный инструмент как плагин тотала, не понимаю.

#270:  Author: ask-rusLocation: Russian Federation PostPosted: Sat May 14, 2011 12:05
    —
MVV wrote:
А зачем запускать такой глобальный инструмент как плагин тотала, не понимаю.

Другое дело сделать его Total-ьным.

#271:  Author: FlasherLocation: Москва PostPosted: Sat May 14, 2011 19:20
    —
ask-rus wrote:
если бы под "окном" имелось в виду только окно TC
Ни в коем случае. Именно для всех окон делалось, и продолжается развитие в том же направлении.
ask-rus wrote:
В граф. редакторе скроллом меняю масштаб, а он мне полосой прокрутки движет.
Пиши программу, будем решать. В FastStone Capture с этим проблем нет.

MVV wrote:
если что, можно добавить окно или класс в исключения
Надеюсь, через неделю-две выложу релиз, где всё это (и не только) уже реализовано, ждите.
MVV wrote:
А зачем запускать такой глобальный инструмент как плагин тотала, не понимаю.
Затем, что можно использовать прокрутку в куче окон на разных машинах с запуском ТС.

#272:  Author: ask-rusLocation: Russian Federation PostPosted: Sat May 14, 2011 19:36
    —
Flasher wrote:
Пиши программу, будем решать.

PhotoFiltre 6.4.0
http://photofiltre.free.fr/frames_en.htm

#273:  Author: FlasherLocation: Москва PostPosted: Sat May 14, 2011 19:38
    —
ask-rus
Да, её уже можно будет добавить в исключения, с ней проверялось. Это реализовано. В релизе будет.

#274:  Author: HA3APET PostPosted: Fri May 20, 2011 23:46
    —
Loopback
Очень бы хотелось иметь возможность автоматической установки плагина, а ещё лучше кнопочку вкл\выкл плагина.
Особенно такая кнопка была бы полезна в сочетании например с Impomezia, что бы при смене цветовой схемы не мучиться с повторным добавлением плагина.

Думаю это реально осуществить даже на vbs - нажали и в ini прописалось нужное для старта плагина, нажали ещё раз - удалилось. Но к сожалению нужных знаний не имею.

Может кто возьмётся за такую полезную для плагина вещь?

#275:  Author: FlasherLocation: Москва PostPosted: Sat May 21, 2011 01:08
    —
HA3APET wrote:
нажали и в ini прописалось нужное для старта плагина, нажали ещё раз - удалилось.
А как же нумерация? Без правильной пронумеровки нижеследующие плагины читаться не будут. Что касаемо удалять, то это вовсе необязательно, достаточно закомментировать спереди символом ";", потом перезагружать TC. И в таком случае надо отключать плагин и в цветовой схеме, чтобы цвета не сбросились. Предлагаю сделать скрипт на UTCCE с редактированием необх. номеров-ключей в ini, комментированием и автоматической перезагрузкой ТС. Описание см. в справке, (там всё просто, команды Comment, Uncomment, Set, CloseTC, Sleep, RunTC, + есть свои удобства с буфером).

#276:  Author: HA3APET PostPosted: Sat May 21, 2011 03:15
    —
Flasher wrote:
А как же нумерация?

Я всё прекрасно понимаю, на batch файле можно это сделать, живое тому доказательство скрипт по интеграции в ТС кнопки 7z SFX Tool.
Не суть важно каким способом это будет сделано, главное красивый результат.

#277:  Author: FlasherLocation: Москва PostPosted: Sat May 21, 2011 03:30
    —
HA3APET wrote:
Не суть важно каким способом это будет сделано, главное красивый результат.
ИМХО, с перезапуском ТС результат уже нельзя будет назвать красивым. Лучше бы кто-то сделал отдльную утилиту с параметрами включения/выключения и названием. Менеджеры же позволяют это делать без перезагрузки, вот и утилита должна. Но тут это в любом случае оффтоп. Надо новую тему создавать.

#278:  Author: HA3APET PostPosted: Sat May 21, 2011 18:21
    —
Я не считаю, что перезагрузка вообще нужна. У нас плагин срабатывает во время старта! Зачем перезагрузка?
Нажимаем на кнопку вкл\выкл плагина и при следующем запуске ТС плагин срабатывает или не срабатывает.

#279:  Author: FlasherLocation: Москва PostPosted: Sat May 21, 2011 21:30
    —
HA3APET wrote:
У нас плагин срабатывает во время старта!
А старт возникает после перезапуска.
HA3APET wrote:
Зачем перезагрузка?
Сам же пишешь, что нужно редактировать ключи wincmd.ini. Как тут без перезапуска?
HA3APET wrote:
Нажимаем на кнопку вкл\выкл плагина и при следующем запуске ТС плагин срабатывает или не срабатывает.
Так а какой смысл просто что-то менять в ini и ждать следующего старта, если можно сразу же поменять и перезапустить?

Для UTCCE, как я уже сказал, скрипты-то простенькие, там if/else нет, поэтому на две кнопки сажать придётся.
Unload_autorun.cesf :
Quote:
Script Unload_autorun
Comment wincmd.ini\Colors\ColorFilte
r1
Comment wincmd.ini\Searches\Autorun_plugin
Set wincmd.ini\Colors\ColorFilter
1=0
CloseTC
RunTC
End Script
Load_autorun.cesf :
Quote:
Script Load_autorun
Delete wincmd.ini\Colors\ColorFilter
1
Uncomment wincmd.ini\Colors\ColorFilter1
Uncomment wincmd.ini\Searches\Autorun_plugin
CloseTC
RunTC
End Script


Last edited by Flasher on Fri May 27, 2011 21:26; edited 1 time in total

#280:  Author: sa PostPosted: Wed May 25, 2011 15:13
    —
Начиная с wdx_autorun_1.4.9.5_beta обнаружил нарушение выполнения команды
Code:
ShellExec %COMMANDER_PATH%\Addon\TCFS2\TCFS2.exe "/ei rm1pm"
(в примере для ясности сократил набор используемых команд до минимума).
Вместо развёрнутого окна TC, запомненного через Конфигурация > Запомнить позицию, получаю при загрузке TC свёрнутое (ещё и со значком “Свернуть в окно”, два клика по которому таки разворачивают TC до желаемого размера). Вопрос разрешился добавлением перед рассматриваемой командой задержки Sleep 300, но на всякий случай решил описать проблему.

#281:  Author: FlasherLocation: Москва PostPosted: Wed May 25, 2011 22:18
    —
Тут что-то с безусловностью проверки связано.
Quote:
rm1pm=move(, , #+1, ) move(, , #-1, ), , rm1pm

#282:  Author: FlasherLocation: Москва PostPosted: Mon Jul 04, 2011 18:25
    —
Loopback
А нельзя сделать, чтобы регистрировались и разрегистрировались dll и inf файлы при запуске и закрытии ТС соответственно?
Для dll есть LoadLibrary, но она не создаёт ProgID, которые нужны в скриптах.

Ещё бы хотелось добавление функции определения статуса админских прав юзера, что бы применять это в If ... Then.

#283:  Author: Loopback PostPosted: Mon Jul 04, 2011 20:43
    —
Flasher wrote:
А нельзя сделать, чтобы регистрировались и разрегистрировались dll и inf файлы при запуске и закрытии ТС соответственно?
Для dll есть LoadLibrary, но она не создаёт ProgID, которые нужны в скриптах.

Регистрировать можно regsvr32, разве нет? А вот разрегистрировать пока нет, не ранее, чем реализую чего-нибудь вроде секции OnExit. Пока можно пользоваться плагином от MVV.

Flasher wrote:
Ещё бы хотелось добавление функции определения статуса админских прав юзера, что бы применять это в If ... Then.

А вот это действительно полезное предложение.

#284:  Author: FlasherLocation: Москва PostPosted: Mon Jul 04, 2011 20:46
    —
Loopback wrote:
Регистрировать можно regsvr32, разве нет?
Без разрегистрации это в autorun не имеет особого смысла.
Loopback wrote:
Пока не реализую чего-нибудь вроде секции OnExit, точно нет.
Жду реализации.
Loopback wrote:
Пока можно пользоваться плагином от MVV.
Каким?
Loopback wrote:
А вот это действительно полезное предложение.
То тоже действительно полезное, потому что даст портабельность в ряде случаев. И, как ты понимаешь, одно с другим очень взаимосвязано.

#285:  Author: Loopback PostPosted: Mon Jul 04, 2011 20:59
    —
Flasher wrote:
Без разрегистрации это в autorun не имеет особого смысла.

Естественно.
Flasher wrote:
Каким?

http://forum.wincmd.ru/viewpost.php?p=74978

Flasher wrote:
То тоже действительно полезное, потому что даст портабельность в ряде случаев.

В моем понимании, программа, которая что-то регистрирует в реестре - уже не портабельная. Достаточно процессу упасть - и в реестре остается мусор. В своей сборке я это исключаю полностью.

#286:  Author: FlasherLocation: Москва PostPosted: Mon Jul 04, 2011 21:04
    —
Loopback wrote:
http://forum.wincmd.ru/viewpost.php?p=74978
>>>
Flasher wrote:
С батником что-то не очень, для меня во всяком случае. Подожду добавки ключа. К тому же это будет более мягкий и юзабильный метод.

Loopback wrote:
Достаточно процессу упасть - и в реестре остается мусор.
Но с LoadLibrary при падении таких проблем нет. Значит и тут этот момент как-то предусмотреть можно?

#287:  Author: Loopback PostPosted: Tue Jul 05, 2011 13:17
    —
Flasher wrote:
Но с LoadLibrary при падении таких проблем нет. Значит и тут этот момент как-то предусмотреть можно?

Вроде помнится, что система должна пытаться выгружать загруженные библиотеки в случае падения основного потока (не проверял). В этом случае, если делать операции разрегистрации при выгрузке библиотеки, то наверно всё должно разрегистрироваться нормально - если, конечно, не возникнет с сбой в самом коде библиотеки.

#288:  Author: FlasherLocation: Москва PostPosted: Tue Jul 05, 2011 13:21
    —
Loopback wrote:
В этом случае, если делать операции разрегистрации при выгрузке библиотеки, то наверно всё должно разрегистрироваться нормально
Очень надеюсь, что так оно и будет. Smile

 !  Avada:
Последующий оффтоп отделён сюда.

#289:  Author: FlasherLocation: Москва PostPosted: Thu Aug 11, 2011 14:57
    —
Quote:
Также, плагин имеет несколько предопределенных переменных (констант):
%AUTORUN_OSARCH% - архитектура ОС, где работает тотал. Может быть 32 или 64.
%AUTORUN_OSVERSION% - версия ОС где работает тотал. Может принимать значения:

WIN_UNKNOWN, WIN_95, WIN_98, WIN_ME, WIN_NT, WIN_2000, WIN_XP, WIN_2003, WIN_VISTA, WIN_2008, WIN_7, WIN_2008R2

%AUTORUN_DESKTOPWIDTH% - ширина экрана.
%AUTORUN_DESKTOPHEIGHT% - высота экрана.
%AUTORUN_DESKTOPDEPTH% - глубина цвета экрана.
%AUTORUN_TCHANDLE% - хэндл окна Total Commander (для использования в скриптах).
Создал папку "32". Вызываю cd C:\Тест\%AUTORUN_OSARCH% - ничего не происходит. То же самое с папкой "WIN_7" и %AUTORUN_OSVERSION%. Где, и как эти переменные можно использовать, куда их можно прописывать и т.п.? Как использовать в скриптах, которые сами их распознать не смогут, ибо они - не переменные окружения?

Win 7 x86, версия - 1.4.9.6.

#290:  Author: Loopback PostPosted: Fri Aug 12, 2011 15:08
    —
Flasher
Просто создать переменную окружения с текстом внутренней переменной, например:

Code:
SetEnv /EV OSARCH %AUTORUN_OSARCH%

#291:  Author: FlasherLocation: Москва PostPosted: Fri Aug 12, 2011 15:11
    —
Loopback
Хм. Я вот с такой строкой сперва пробовал:
Code:
SetEnv /A /EV %AUTORUN_OSARCH% %AUTORUN_OSARCH%

Должна по идее создаться переменная %32% со значением 32.

А в чём тогда предопределённость?

#292:  Author: Loopback PostPosted: Fri Aug 12, 2011 15:29
    —
Ну, переменные же создаются в плагине изначально, без участия пользователя - значит, предопределенные. Более того, это по сути константы, т.е. пользователь их не может изменить. Я специально не стал их делать переменными окружения, так как более интересно их использовать в условиях, а не напрямую. Да и большинство может просто не понадобиться.

И да, при создании переменных использовать проценты в имени не нужно (добавлю в документацию).

Quote:
Должна по идее создаться переменная %32% со значением 32.

Нет, имя переменной должно быть простой строкой, без других переменных.

#293:  Author: FlasherLocation: Москва PostPosted: Fri Aug 12, 2011 15:37
    —
Loopback wrote:
Я специально не стал их делать переменными окружения, так как более интересно их использовать в условиях, а не напрямую.
Вот тут я бы, конечно, поспорил. Напрямую куда больший КПД на выходе имеем (скрипты, сценарии, переходы в рядом лежащие папки).
Loopback wrote:
И да, при создании переменных использовать проценты в имени не нужно (добавлю в документацию).
Это я уже понял. Хотя ограничение данное действительно в документации не помешает описать.
Loopback wrote:
Нет, имя переменной должно быть простой строкой, без других переменных.
Это системная завязка или чисто плагиновая?

#294:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 12, 2011 16:39
    —
Flasher wrote:
Вот тут я бы, конечно, поспорил. Напрямую куда больший КПД на выходе имеем (скрипты, сценарии, переходы в рядом лежащие папки).

Но ведь можно определить реальную переменную, запихав в неё значение виртуальнойSmile
Flasher wrote:
Это системная завязка или чисто плагиновая?

Система сама вообще не раскрывает переменные окружения без пинка) а объявлять переменную, используя в имени другие переменные - вообще нонсенс.

#295:  Author: FlasherLocation: Москва PostPosted: Fri Aug 12, 2011 16:43
    —
MVV wrote:
можно определить реальную переменную, запихав в неё значение виртуальной
С этим мы уже разобрались. Не всегда полезно в Autorun прописывать установку кучи переменных, по мне лучше бы переменные были предопределены и как переменные среды.
MVV wrote:
объявлять переменную, используя в имени другие переменные - вообще нонсенс
А конкретней?

#296:  Author: Loopback PostPosted: Mon Aug 15, 2011 10:28
    —
Flasher wrote:
Это системная завязка или чисто плагиновая?

Плагиновая, но как верно заметил MVV - смысла в этом мало. Зачем делать переменную с неопределенным именем, скажем 32 или 64, и потом из скрипта проверять ее существование, когда можно сделать одну явно заданную переменную и с тем же успехом проверить ее содержимое?

#297:  Author: FlasherLocation: Москва PostPosted: Mon Aug 15, 2011 15:52
    —
Loopback
Для пробы. Я же написал. И всё-таки пожелание включить предопределённые переменные среды остаётся в силе.

#298:  Author: HA3APET PostPosted: Fri Sep 09, 2011 03:18
    —
Есть
\Prog\RBTray\32\RBTray.exe
\Prog\RBTray\64\RBTray.exe
Как прописать ShellExec в зависимости от разрядности ОС?

#299:  Author: FlasherLocation: Москва PostPosted: Fri Sep 09, 2011 04:16
    —
HA3APET
А есть проблема при указании %AUTORUN_OSARCH% вместо 32/64 ?

#300:  Author: HA3APET PostPosted: Fri Sep 09, 2011 04:39
    —
Flasher
Так и пробовал - не заработало, но оказывается просто ошибся в пути, всё работает. Вопрос снят.

Добавлено спустя 13 минут:

Очень бы хотелось ключик для ShellExec, что бы если программа уже запущена (висит в процессах), она не запускалась.
Можно конечно это решить батником, но средствами программы было бы намного удобнее.
По идеи такую возможность должны поддерживать сами программы, но далеко не у всех это есть.

#301:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Sep 09, 2011 10:03
    —
ИМХО, проще найти микро утилитку, которая будет запускать программу только если она ещё не запущена, чем встраивать подобный функционал везде, где он нуженSmile

#302:  Author: HA3APET PostPosted: Fri Sep 09, 2011 11:05
    —
MVV
Есть на примете такая утилита?
А то батником не очень красиво.

#303:  Author: LonerDLocation: Донецк PostPosted: Fri Sep 09, 2011 15:34
    —
Просьба включить в следующую версию переменную, определяющую язык запущенной ОС.
Примеры использования - запуск самого Тотала и приложений с необходимым языком в зависимости от языка ОС.

В плагине имеется команда
IniWrite [/EV] <имя ini> <секция> <ключ> [<текст>]
А как её использовать если в ini-файле нет секций? (или скажем, нужно прописать определенные параметры в другой тип файлов (cfg, txt ...)

И ещё вопрос.
Мне для работы одной из программ нужно прописать через команду IniWrite путь к установленному Тоталу параметр C:\\Soft\\TC
Переменная %COMMANDER_PATH% выдаёт значение C:\Soft\TC
Как можно получить значение пути к папке с Тоталом именно с двойными слешами?

#304:  Author: FlasherLocation: Москва PostPosted: Fri Sep 09, 2011 15:58
    —
HA3APET wrote:
Очень бы хотелось ключик для ShellExec, что бы если программа уже запущена (висит в процессах), она не запускалась.
Поддерживаю. Было бы здорово, если бы не запускалась не только программа, но и скрипты этой программы. В качестве идентификации можно использовать полные пути, а не PID.

LonerD wrote:
А как её использовать если в ini-файле нет секций?
Значит, секция создаётся, если её нет.
LonerD wrote:
или скажем, нужно прописать определенные параметры в другой тип файлов
Это не предусмотрено, в мануале речь идёт только об ini.
LonerD wrote:
Мне для работы одной из программ
Программа, пишущая в реестр? Может, альтернативу найти с одинарными слешами?

#305:  Author: LonerDLocation: Донецк PostPosted: Fri Sep 09, 2011 16:30
    —
Flasher wrote:
LonerD wrote:
А как её использовать если в ini-файле нет секций?
Значит, секция создаётся, если её нет.
LonerD wrote:
или скажем, нужно прописать определенные параметры в другой тип файлов
Это не предусмотрено, в мануале речь идёт только об ini.

В том то и дело, что не нужно, чтобы секция создавалась. У некоторых программ (редко, но встречается) ini-файл настроек - это обычный текстовый файл с расширением ini (пример - Кнопка для Тотала для работы с 7-Zip SFX версии 0.12).
Раз сейчас нет такой возможности - то просьба на будущее ввести возможность обработки текстовых файлов (ini,cfg), в которых нет разделения на секции.

Flasher wrote:
Программа, пишущая в реестр? Может, альтернативу найти с одинарными слешами?

Альтернативу то найти можно (равно как и альтернативные методы решения, но менее красивые).
В данном случае - программа Locate32, в которой портабельность реализована через внесение значений в реестр при запуске программы и последующем их удалении.
Плюс иногда нужно внести в реестр конкретные значения пути (относительно папки с установленным Тоталом) для запуска непортабельных программ в режиме портабельности с помощью kIT Portable Launcher.

Поддерживается ли в операторах сравнения конъюнкция и дизъюнкция?
If <выражение 1> <оператор> <выражение 2> or <выражение 3> <оператор> <выражение 4> Then

#306:  Author: FlasherLocation: Москва PostPosted: Fri Sep 09, 2011 18:57
    —
LonerD wrote:
пример - Кнопка для Тотала для работы с 7-Zip SFX версии 0.12
И что, требуется для этой кнопки при каждом запуске менять настройки? Confused
LonerD wrote:
Раз сейчас нет такой возможности - то просьба на будущее ввести возможность обработки текстовых файлов (ini,cfg), в которых нет разделения на секции.
Ты бы хотя бы к автору обращался с хотелками, пропустит ведь. Wink
LonerD wrote:
В данном случае - программа Locate32, в которой портабельность реализована через внесение значений в реестр при запуске программы и последующем их удалении.
Вроде портабл-версий они не распространяют. Пробежался по параметрам комстроки и не понял, что там работает с реестром.
LonerD wrote:
Плюс иногда нужно внести в реестр конкретные значения пути (относительно папки с установленным Тоталом) для запуска непортабельных программ в режиме портабельности с помощью kIT Portable Launcher.
kIT PL не поддерживает однослэшевые пути? Для автора реализовать - расплюнуть. Стоит к нему обратиться.
LonerD wrote:
Поддерживается ли в операторах сравнения конъюнкция и дизъюнкция?

If <выражение 1> <оператор> <выражение 2> or <выражение 3> <оператор> <выражение 4> Then
Советую попробовать. Я как-то пытался использовать, но не помню, каким был результат.

#307:  Author: LonerDLocation: Донецк PostPosted: Sat Sep 10, 2011 02:51
    —
Оператор or не работает.
Некритично, конечно, просто с его помощью некоторые пункты в Autorun.cfg можно было сократить.
Пожелание к функционалу - добавить or и and.

Прошу помощи.
Как правильно прописать в Autorun.cfg выполнение команды экспорта ветки реестра в файл.
Под командной строкой команда выглядит и работает так:
cmd /c reg export "HKEY_CURRENT_USER\Total Commander" "%commander_path%\Total.reg"

В Autorun должно быть примерно так, но как-то не так, где-то ошибка:
Quote:
ShellExec "cmd.exe" '"/c reg export "HKEY_CURRENT_USER\Total Commander" "%commander_path%\Total.reg"'

#308:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Sep 10, 2011 11:17
    —
Если добавлять and и or, то обязательно заключать выражения в скобки: If (условие1) and (условие2) or (условие3) Then bla-bla-bla.

LonerD, для добавления в реестр можно просто использовать команду regedit.exe /s "путь к рег-файлу". Плюс в том, что это не консольная программа, т.е. черное окно мелькать не будет. Кстати, чтобы черные окна не так надоедали, можно ставить параметр /SW_MINIMIZE при вызове ShellExec - тогда будет мелькать лишь кнопка на панели задач.

В твоей команде я вижу лишнюю (непарную) кавычку. Возможно, дело в ней. Перед /c попробуй убрать кавычку.

Как вариант, создай в тотале юзер-команду, вызывающую нужное действие, и запускай её из Autorun командой CommandExec.

#309:  Author: LonerDLocation: Донецк PostPosted: Sat Sep 10, 2011 14:58
    —
MVV
Спасибо.
В данном случае надо не в реестр внести данные, а из реестра в файл.
С кавычками сколько не игрался (ставил, убирал) - ничего не получается, пробовал упростить задачу до такого вида:
Code:
ShellExec "cmd.exe" "/c reg export HKEY_CURRENT_USER\Total C:\Total.reg"

Не работает.
Консоли передаётся параметр /с, а остальные параметры не отрабатывают.
Пробовал ещё такой вариант (без закрытия окна консоли) - то же самое, параметры не отрабатывают, открывается окошко консоли в папке с Тоталом, и всё.
Code:
ShellExec "cmd.exe" "reg export HKEY_CURRENT_USER\Total C:\Total.reg"


Создать юзер-команду - и правда хорошее решение.
Хотя я уже сделал немного по другому - прописал проблемную команду в cmd-файл и вызывал этот файл через Autorun.cfg (чтобы не мелькали окошки использовать hidcon).

Но всё таки не понятно почему не отрабатывает ShellExec.
Возможно, один параметр только отрабатывает, а остальные игнорируются?

#310:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Sep 10, 2011 15:29
    —
Можт, тут тоже дело в идиотской обработке параметров в cmd.exe? Попробуй написать так:
Code:
ShellExec /SW_MINIMIZE "cmd.exe" '/c "reg export HKEY_CURRENT_USER\Total C:\Total.reg"'

И так, если предыдущее будет работать:
Code:
ShellExec /SW_MINIMIZE "cmd.exe" '/c "reg export "HKEY_CURRENT_USER\Total" "%commander_path%\Total.reg""'


И вообще, зачем тебе вызывать cmd.exe, если можно сразу вызвать reg.exe?
Code:
ShellExec /SW_MINIMIZE /EV "reg.exe" 'export "HKEY_CURRENT_USER\Total" "%commander_path%\Total.reg"'

#311:  Author: FlasherLocation: Москва PostPosted: Sat Sep 10, 2011 17:22
    —
LonerD
Я не понял, разве мой вчерашний вариант из лички не сработал?:
Code:
ShellExec /EV /SW_HIDE '%ComSpec%' '/c REG EXPORT HKCU\Total "%COMMANDER_PATH%\Total.reg" /y'
без посредника:
Code:
ShellExec /EV /SW_HIDE REG 'EXPORT HKCU\Total "%COMMANDER_PATH%\Total.reg" /y'


MVV wrote:
чтобы черные окна не так надоедали, можно ставить параметр /SW_MINIMIZE при вызове ShellExec - тогда будет мелькать лишь кнопка на панели задач
LonerD wrote:
чтобы не мелькали окошки использовать hidcon
Оба см. выше на нужный ключ.

#312:  Author: ApceHLocation: Димитровград PostPosted: Sun Sep 11, 2011 12:24
    —
Обнаружил одну проблемку с Autorun.
Выполняю:
Code:
CommandExec /CD "\\\Virtual Panel"
Sleep 50
SendCommand cm_GotoPreviousDir
Всё бы хорошо, но если в wincmd.ini стоит ActiveRight=1, то получится так: в левой панели произойдёт переход на \\\Virtual Panel, но назад перехода не случится, как я понимаю, потому что тем временем активной стала правая панель.
На Sleep не обращайте внимания. Без него то же самое. А при запуске в нагруженной системе бывает не успевает перейти в \\\Virtual Panel.

#313:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Sep 11, 2011 15:27
    —
А тут ничего не сделаешь. Плагин работает параллельно с тоталом, и тотал ни коим образом плагину не сообщает, что он переключает фокус на правую панель. Единственное что тут можно сделать - дождаться, пока правая панель станет активной, и тогда проводить махинации. По идее, на TCFS2 можно набросать подобный скриптик. Вопрос лишь в том, насколько это будет заметно со стороны.

#314:  Author: ApceHLocation: Димитровград PostPosted: Sun Sep 11, 2011 15:44
    —
Верно, выхода два: ActiveRight=0 или
Code:
Sleep 50 #или больше
CommandExec /CD "\\\Virtual Panel"
...
Да только зыбко это. Жаль.

#315:  Author: HA3APET PostPosted: Sun Sep 11, 2011 22:00
    —
ApceH
Я в своей сборке переделал на
Code:
CommandExec /CD:T "\\\Virtual Panel"
Sleep 40
SendCommand cm_CloseCurrentTab

#316:  Author: LonerDLocation: Донецк PostPosted: Sun Sep 11, 2011 23:16
    —
MVV, Flasher
По поводу экспорта ключей реестра в файл. Вы пробовали предложенные варианты? У меня ни один не сработал, пробовал ещё разные способы с расставлением кавычек - reg-файл так и не сохранился.

#317:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Sep 11, 2011 23:36
    —
А у тебя точно в реестре существует раздел HKCU\Total? Обычно разделы программ создаются в HKCU\Software, но не напрямую в HKCU.

Да, я пробовал, правда с другим ключом (твоего ключа у меня нет и никогда не было), всё работает. Вот две строки, которые я только что попробовал:
Code:
ShellExec /SW_HIDE "cmd.exe" '/c "reg export "HKEY_CURRENT_USER\Environment" "%commander_path%\Data\Total.reg""'
ShellExec /SW_HIDE /EV "reg.exe" 'export "HKEY_CURRENT_USER\Environment" "%commander_path%\Data\Total.reg"'


Last edited by MVV on Sun Sep 11, 2011 23:41; edited 2 times in total

#318:  Author: FlasherLocation: Москва PostPosted: Sun Sep 11, 2011 23:38
    —
LonerD
Аналогично, давал рабочие варианты.

#319:  Author: LonerDLocation: Донецк PostPosted: Mon Sep 12, 2011 02:43
    —
Не повезло значит. Ключ был и есть, создал специально для проверки отработки команды. По три раза каждый вариант перепробовал, - не работало. Сейчас те же строки ввожу - ключ сохраняется. Чудеса...
Видимо, что-то где-то цеплялось и не успевало сработать. Уже замечал относительно других команд, что обычно работают, но иногда не срабатывают (не успевают сработать). Попробую в своём Autorun.cfg понаставить паузы Sleep.

#320:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Sep 12, 2011 09:55
    —
Не вижу связи между задержками и экспортированием куска реестра в файл. Экспортирование никак не зависит от тотала и вполне может работать параллельно с тоталом. Другое дело - присутствует ли в момент запуска экспортирования тот ключ реестра.

Кстати, Loopback, как насчет добавления для функции ShellExec параметра /WAIT, позволяющего дождаться выполнения задачи перед выполнением следующей команды автозапуска? Приведу код на Си, ничего сложного нет:

Code:
   SHELLEXECUTEINFO shx;
   shx.cbSize=sizeof(SHELLEXECUTEINFO);
   shx.fMask=need_to_wait_process ? SEE_MASK_NOCLOSEPROCESS : 0;
   shx.hwnd=0;
   shx.lpVerb=0;
   shx.lpFile=path_to_program;
   shx.lpParameters=parameters;
   shx.lpDirectory=working_directory;
   shx.nShow=show_flag;

   bool success=ShellExecuteEx(&shx)!=0;

   if (success && need_to_wait_process) {
      WaitForSingleObject(shx.hProcess, INFINITE);
      CloseHandle(shx.hProcess);
   }

#321:  Author: FlasherLocation: Москва PostPosted: Mon Sep 12, 2011 20:04
    —
MVV wrote:
как насчет добавления для функции ShellExec параметра /WAIT
Я бы вообще ожидание по умолчанию сделал без всяких ключей.

#322:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Sep 12, 2011 21:26
    —
Можно и так. Основная масса действий действительно должна выполняться последовательно. Потом, вряд ли это ухудшит уже существующие скрипты автозапуска.

Тогда добавить флаг /NOWAIT.

#323:  Author: LonerDLocation: Донецк PostPosted: Tue Sep 13, 2011 18:15
    —
Можно ли через Autorun_Starter удалить переменные окружения, создаваемые в autorun.cfg ?
Например, создаю переменную для запуска из тотала 32 и 64-битных приложений в зависимости от битности системы:
SetEnv /A /EV OSArch %autorun_osarch%
После закрытия Тотала она уже не нужна. Как её возможно удалить?

#324:  Author: FlasherLocation: Москва PostPosted: Tue Sep 13, 2011 18:44
    —
LonerD
Так это переменные внутреннего окружения, действующие в текущем сеансе. Ниоткуда кроме как из окна ТС ты их вызвать не сможешь, разве что не пропишешь в системную переменную типа Path. При закрытии окна они так же вместе с ним и свернутся.

#325:  Author: LonerDLocation: Донецк PostPosted: Tue Sep 13, 2011 20:08
    —
Ага. Кажись, понял причину.
Переменные действительно исчезают после закрытия тотала.
А вот если тотал не закрывать, а перезапустить с помощью Tinny TC Restarter или ReloadTC, то вот тут поджидает самое интересное. Мало того, что переменные среды остаются, но если перед перезапуском поправить autorun.cfg и прописать в нём другие значения переменных сред, то последствия могут быть самые непредсказуемые, вплоть до того, что значения новых переменных иногда (не всегда, но случалось) дописываются в конец к старым переменным.
А существует ли тогда рестрартер, который полностью выгружает Тотал, а потом запускает его? Или же этого невозможно добиться в силу того, что рестартер как таковой запускается из-под Тотала?

#326:  Author: FlasherLocation: Москва PostPosted: Tue Sep 13, 2011 20:24
    —
Я пользуюсь своим скриптом, подобных глюков не заметил.

#327:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 13, 2011 21:20
    —
LonerD wrote:
А существует ли тогда рестрартер, который полностью выгружает Тотал, а потом запускает его? Или же этого невозможно добиться в силу того, что рестартер как таковой запускается из-под Тотала?

Это надо экспериментировать с окружением при запуске процесса. Но точно не знаю, как это сделать.

И вообще, что значит "полностью выгружает"? И что понимается под чистой средой? Среда Проводника? Тогда надо как-то сказать Проводнику, что надо запустить тотал.


Last edited by MVV on Tue Sep 13, 2011 21:29; edited 1 time in total

#328:  Author: ApceHLocation: Димитровград PostPosted: Tue Sep 13, 2011 21:25
    —
LonerD
Проверял через пресет с per? Или peq+pee.

#329:  Author: LonerDLocation: Донецк PostPosted: Wed Sep 14, 2011 01:54
    —
Quote:
И вообще, что значит "полностью выгружает"?

Не знаю. Но при перезапуске - что утилитами, что скриптом, - переменные остаются. Получается, что-то не даёт им полностью выгрузиться/удалиться.

Как я получил такую ситуацию (если кому интересно будет повторить):
Code:
По пунктам.
Установить плагин Environment Variables (отображение переменных сред).
В Autorun.cfg добавить строку
SetEnv /A /EV OSArch %autorun_osarch%
Сохранить Autorun.cfg.
Закрыть-открыть или же перезапустить Тотал.
Перейти в сетевое окружение - Environment Variables - Current process (Total Commander)
Там должна быть переменная OSArch, которая равна 32 или 64.
Открыть Autorun.cfg и удалить добавленную строку.
Теперь перезагрузить Тотал (через утилитку или скриптом).
Опять зайти в Environment Variables.
OSArch всё-ещё там, хотя в авторане она отсутствует (переменная осталась от предыдущего запуска Тотала и не удалилась при перезапуске).
А теперь закрыть Тотал полностью и открыть его снова. Переменной уже нету.

#330:  Author: FlasherLocation: Москва PostPosted: Wed Sep 14, 2011 02:50
    —
LonerD wrote:
Code:
Установить плагин Environment Variables (отображение переменных сред).
Перейти в сетевое окружение - Environment Variables - Current process (Total Commander)
Там должна быть переменная OSArch, которая равна 32 или 64.
Эти действия заменяются на выполнение из комстроки: %comspec% /k set OSARCH

#331:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 14, 2011 10:10
    —
LonerD wrote:
Не знаю. Но при перезапуске - что утилитами, что скриптом, - переменные остаются. Получается, что-то не даёт им полностью выгрузиться/удалиться.

Переменные окружения не умеют выгружаться/удаляться сами по себе. При запуске программы ей по наследству переходят все переменные окружения, которые были в запускающей программе. Поэтому при запуске рестартера из тотала он наследует среду тотала, а тотал, запущенный рестартером - его среду, которая унаследована от прежнего тотала.

Code:
Открыть Autorun.cfg и удалить добавленную строку.
Теперь перезагрузить Тотал (через утилитку или скриптом).
Опять зайти в Environment Variables.
OSArch всё-ещё там, хотя в авторане она отсутствует (переменная осталась от предыдущего запуска Тотала и не удалилась при перезапуске).

Естественно. Некому было удалять её оттуда.
Code:
А теперь закрыть Тотал полностью и открыть его снова. Переменной уже нету.

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

#332:  Author: LonerDLocation: Донецк PostPosted: Sat Sep 17, 2011 21:01
    —
[quote="MVV"]
LonerD wrote:
Переменные окружения не умеют выгружаться/удаляться сами по себе. При запуске программы ей по наследству переходят все переменные окружения, которые были в запускающей программе.

Это собственно я и имел в виду когда спрашивал:
LonerD wrote:
Или же этого невозможно добиться в силу того, что рестартер как таковой запускается из-под Тотала?

Мелкая неприятность, которую заметил при экспериментах с переменными окружения. Буду иметь в виду, хотя вряд ли это когда-нибудь понадобится.

А вот такой нюанс очень даже портит жизнь:
При закрытии Тотала отрабатывает Autorun_Starter.bat и через него убиваются запущенные приложения. Например, в autorun.cfg у меня прописан запуск AUTOFx.exe при запуске Тотала. А в Autorun_Starter.bat прописано:
Code:
:starter_unload
taskkill /t /IM AUTOFx.exe
taskkill /f /IM AUTOFx.exe
echo Unloading
goto :EOF

То есть при закрытии Тотала AUTOFx убивается.
Всё отлично до тех пор, пока не запустить вторую копию Тотала (или например сравнение файлов-папок в другом процессе). После закрыти второй копии Тотала - AUTOFx тоже убивается.
Как этого избежать?
Нужно как-то сделать проверку, что не запущена вторая копия Тотала и только после этого выгружать программу или сделать проверку что программа запускалась именно из-под этой копии Тотала... или ещё каким-то образом...


Last edited by LonerD on Sat Sep 17, 2011 21:09; edited 1 time in total

#333:  Author: ApceHLocation: Димитровград PostPosted: Sat Sep 17, 2011 21:09
    —
LonerD
Если речь идёт о разных ТС/сборках, то опять же, нужно убивать либо по пути, как мы обсуждали тут.
Или же составить up-файл (пресет) и в Авторане выполнить этот пресет. А в пресете прописать убийство процессов с нужным путём.

А если один и тот же ТС, то нужно учитывать родственные связи. Мне такие средства неизвестны.

#334:  Author: FlasherLocation: Москва PostPosted: Sat Sep 17, 2011 21:22
    —
ApceH wrote:
А если один и тот же ТС, то нужно учитывать родственные связи. Мне такие средства неизвестны.
Так там убийство по PID. Никаких проблем с tskill без /A.

#335:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Sep 17, 2011 21:46
    —
Можно легко научить батник не запускать и не убивать программы, если запущено более одной копии тотала...

#336:  Author: LonerDLocation: Донецк PostPosted: Sat Sep 17, 2011 22:04
    —
Quote:
Если речь идёт о разных ТС/сборках, то опять же, нужно убивать либо по пути

Не о разных сборках, а об одной и той же - просто открыть ещё одну копию своего Тотала или же выполнить сравнение-синхронизацию в отдельном процессе.

Quote:
Можно легко научить батник не запускать и не убивать программы, если запущено более одной копии тотала...

Да, это один из вариантов, наверное, самых легко реализуемых. Как проверить что запущены несколько копий TOTALCMD.EXE?

#337:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Sep 19, 2011 15:11
    —
Один из вариантов:
Code:
@echo off
set /A tc_count=0
for /F "usebackq delims=" %%l in (`tasklist /fi "IMAGENAME eq TOTALCMD*"`) do (
   echo %%l | find /i "totalcmd"
   if not errorlevel 1 call :inc
)
if /i %tc_count% lss 2 goto exec
goto :EOF

:inc
set /A tc_count=%tc_count%+1
goto :EOF

:exec
echo Only one or none TC instances found.

Ищет сразу и 32-битные, и 64-битные копии (к слову, все процессы, имена которых начинаются с TOTALCMD). При этом, если запускается тотал #1, потом #2, потом закрывается #1 и потом закрывается #2, запускать всё будет батник от #1, а убивать процессы - батник от #2. Smile

#338:  Author: HA3APET PostPosted: Tue Sep 20, 2011 17:07
    —
У меня не работает
Code:
SetEnv /A /EV PATH ;%COMMANDER_PATH%

Проверьте ещё кто нибудь
1.4.9.6 beta

#339:  Author: LonerDLocation: Донецк PostPosted: Tue Sep 20, 2011 17:20
    —
MVV. Спасибо.
А как поведёт себя код если запустить #1, потом #2, закрыть вначале #2, а затем #1 ?

HA3APET
Уже с месяц использую это строку - работает.
Проверил приведённый тобою код (решил, что может символы неправильные) - тоже работает.

#340:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 20, 2011 18:26
    —
LonerD wrote:
А как поведёт себя код если запустить #1, потом #2, закрыть вначале #2, а затем #1 ?

Батник всегда будет выполнять действия, если запущено не более одной копии тотала. Так что при правильном вызове батник последнего запущенного тотала будет убивать процессы.

#341:  Author: FlasherLocation: Москва PostPosted: Tue Sep 20, 2011 22:18
    —
MVV
Можешь сделать что-нибудь с плагином, чтобы vbs прикрутить?

#342:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 20, 2011 23:22
    —
Могу. Переписать с нуля.

Code:
MIME-Version: 1.0
Content-Type: application/octet-stream; name="Autorun_Execute.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Autorun_Execute.7z"

N3q8ryccAAOY8dQX2wQAAAAAAABxAAAAAAAAAGWYVR4AJpaOcAAX9+wFu+r0/5QBL0TuTr0JScWp
wXIs+2C8FAvofZL9OQyrmdRJ6fFEUwUox4AepJrWfamkx9MSo1AMPur1FMg8of0jfCyT3T8/4QjX
pnYCgF2sz0O89Ephh0uLtfvvc/FD0ezOcJchTpj6oNVFTYW8DDhln73GEQH3KuVPc4rlFYJRQnGb
rU4sUUHicRm/o/6+eh1mnG/DnibKhxYhWEnp49Ihn+am5mX55EbeI2P1yfZ7To1H8sMf26GgZUsm
b21zbkCwNQJktcWwhrCg36U9lWdkFU/xGU8nBITFjlKZcIBdOq8dBR+TeEmX+fCl1vuFYE7zoPVa
tpO5jvzujKNzXD+ZnnHfHGOLEEgdfGMvyEsuW1kGrpJ3oxLQuO9ggrx9P24BtWrKSX/NEJWuJs2B
8nF97a219oTSX7RnzX0LE+AMzDp41VzxWAaim1V8r2TsebU6AdDrZQ8JOiB3JKDFcwv7R+d8a/Qe
InLULQ7ZNuoo4B8IMIhus3JNIG0jSEbvACMNXifA8YPWmVakMZYZdWdYsgD85QITMBCUAfDJR1hM
ImDRdy+0tSMV1dGa9JH206hRd1x4ilHW4NgzGK/e7lPFhq4nvACgc9LDpF8yYNphnH4TQO308p/7
lY9qoU74gUrpTEOIC8gHtq/UyQxwQlSki/eMjmJlUcMXuNjjbfPDBkT2PXB6K5GlxxzX69RelK/a
EIRVQBFVq7+qgv7zTcf6Q2SBqzWZJxC0Sd73Ch01TQoEXBtI5HblMo+B4NJVRWOR0Nv2kIUCo+Iw
TTfKM2FAk7978naOoefxyczFjUbX5J7AWk4HGNWk8gJ0zqq2Eb4g0RzXwTfnX30Yp/CHjjwG1Amk
CrYgpwML363t8IKKG0EdMHd8fhq6xOGpMkgGjk+/f1JMlPAFCmLW0ex75nlB8mOZ/z7TBLAbFxDo
sLzD6kXjT7Qu7s2GKRVYW4AYKI0RHiQGqNbFcaPUKIPgEllh8g2bjRKMqQIrJSIDAP0AVoSPntPE
eXyRoX2rTUxcNOC4eLlIdqK38yC3d3KvNPzj6tqvYxltjdJHDMg4tlCHrY6rMy7GK8j/2MHe0Kon
t37J5CTmu3/sztTLNmsgQYuHMeut8nFO7MMLWJMfTWHQo6l7tbcZ9Zm1x2aDQTlel5yY2vPBA1/d
2INpITYq7k3T72IZ9L6ciqznz4ul83lsIyvcP1qVdCsoqLgBSrQXrSk3du9sY6l93PnDDXWCP3yp
vA3JEk4Y/ALtAlbiRgIyigfETK/gGXs5EhCaHeNYOqDX7eRXqIIBGK737iQEeTxpmbLoj2YYS8J7
jy/9RLDpiL1FmDffc4q+RFvcsbYnpszb/PXF9G5g3qRLxVLKB6A0RO4NlPRPimknFBzzgG5pMweT
nwunHG4JjyEWBxbA1q8c/TLMHqFV1pSOzr3KyYSXRnVWOHFrMMxOqPOvLgkmXa8ildGgdO1/Azao
3ewtfLsQlmprwFV62RU/a5MZXQlkouvdZMTQFTqXGmC/2yI0y/6Zxx+zZQKmQiLbA8QXzS2u6PRL
Yvsqm9Yj5hnjk5tP0NvPz9VKsmcpWjY63AoMBUMzv5TT5KTWEL79m5mSyC+/kjQxpcZQrsH1o28F
aYSnMFb5XethoFuhjwe8ndcyHiAAAQQGAAEJhNsABwsBAAIjAwEBBV0AAAEABAMDAQMBAAyMAIwA
AAgKAQTtSO0AAAUBESkAQQB1AHQAbwByAHUAbgBfAEUAeABlAGMAdQB0AGUALgBkAGwAbAAAABQK
AQBmvF5o0HfMARUGAQAgCAAAAAA=


Рядом с библиотечкой положи INI-файл с таким же именем, в нём пропиши что-то вроде:
Code:
[Load]
Show=5
Command=Load.vbs

[Unload]
Command=Unload.vbs
Wait=0

Вообще, в строке Command можно указать любую командную строку, например, запустить батник, экзешник или документ. Параметр Show принимает обычные значения SW_* (см. справку по ShellExecute), по умолчанию 5 (SW_SHOW). Параметр Wait позволяет указать, надо ли дожидаться завершения программы, и по умолчанию равен 1.


Last edited by MVV on Wed Sep 21, 2011 00:04; edited 1 time in total

#343:  Author: FlasherLocation: Москва PostPosted: Tue Sep 20, 2011 23:51
    —
MVV
Спасибо. А секция Load в ini обязательна? Я оставил только Unload. Кинул Unload.vbs рядом. При закрытии пишет "Не удается найти "Unload.vbs"."

#344:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 21, 2011 00:05
    —
Если секции или параметра Command в ней нет, модуль молча пропустит выполнение.

А ошибка, скорее всего, из-за того, что текущая папка при выходе стала другой. Добавил установку папки с модулем в качестве рабочего пути при вызове ShellExecuteEx, обновил MIME в предыдущем посте. Без этого ругалась на отсутствие файлов, а с этим - на неправильное их содержание - значит, нашла. Very Happy
Code:
[Load]
Command=1.vbs
Wait=1

[Unload]
Command=2.vbs

#345:  Author: FlasherLocation: Москва PostPosted: Wed Sep 21, 2011 00:17
    —
MVV
Спасибо, теперь работает. Smile

Теперь буду думать как с перезапуском решить...
Вот, придумал: если перезапуск вызывается из другого скрипта или утилиты, то не выполнять Command. Сможешь прикрутить такую фичу?

#346:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 21, 2011 09:48
    —
В смысле перезапуск??? Продумывай свой скрипт, чтобы работал, как надо.

#347:  Author: FlasherLocation: Москва PostPosted: Wed Sep 21, 2011 10:10
    —
А там нечего продумывать. Просто нужно, чтобы при использовании перезапуска command не срабатывал, иначе он не даст TC запуститься и убъёт все приложения, в то время как нужно перезапускать только TC. Тут именно функция плагина нужна, например, ключ Activate в ini, нулевое значение которого будет отключать выполнение команды плагина. В скрипте перезапуска я буду менять его на 0 до отключения ТС, по умолчанию (без ключа или при отсутствующем значении) и, самое главное, при запуске TC должно выставляться 1, либо ключ должен удаляться (я буду тогда строку добавлять, так даже проще).
Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.
Вроде просто. Сделаешь?

#348:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 21, 2011 11:55
    —
А не проще ли создать второй конфиг, который будет использоваться твоими скриптами? Или же использовать прямо этот инишник, если скриптовая среда позволяет работать с инишниками. Если в конфиге некоторый параметр равен 0, скрипты не будут ничего делать. Но скрипт при запуске будет это самое значение выставлять в 1 или удалять. Всё элементарно реализуется средствами твоей скриптовой среды - чтение и запись в текстовый файл. Просто лишняя строчка скрипта - выход, если запуск не разрешен.

Quote:
Можно вообще без значения. Если в ini появилось слово Deactivate на какой-то строке, то отключать выполнение команды.

В INI нет понятия строки. Есть понятия секции и ключа в секции. Порядок секций и строк в рамках секции значения не имеют, имеет значение лишь то, в какой секции параметр находится.

#349:  Author: FlasherLocation: Москва PostPosted: Wed Sep 21, 2011 18:53
    —
MVV wrote:
Если в конфиге некоторый параметр равен 0, скрипты не будут ничего делать.
А кто сказал, что они не будут ничего делать? При определённых условиях, которые я описал выше, они должны срабатывать в любом случае. Не писать же мне ещё один скрипт, который будет записывать строку. Зачем плодить для одной задачи лишнее?
MVV wrote:
В INI нет понятия строки. Есть понятия секции и ключа в секции.
В любом текстовом файле есть понятие строки. Мне всё равно, какое расширение будет у файла. Мне нужно условие: если последняя строка (ключ, не важно) = "Deactivate", то не выполнять команду.
И потом, я не могу скриптом запрещать выполнение команд плагина.
Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.

#350:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 21, 2011 19:14
    —
Для INI-файла понятие номера строки значения не имеет. Операции чтения-записи выполняются с помощью функций, которые принимают в параметры имя секции и имя параметра. При этом мне совершенно безразлично, из строки с каким номером данные будут считаны, и в строку с каким номером они будут записаны.

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

Quote:
Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.

Не вижу ничего плохого в том, что скрипт запустится, но ничего не сделает. Окон он не создает, просто втихаря завершится. Зато имеем универсальность.

Тебе всего-то надо перед перезапуском поставить где-либо (полная свобода действий) флаг перезапуска, в Unload-скрипте при наличии этого флага ничего не делать, а в Load-скрипте при его наличии также ничего не делать, но снимать его.

#351:  Author: FlasherLocation: Москва PostPosted: Wed Sep 21, 2011 19:41
    —
MVV wrote:
Я так понял, что у тебя нет средств для работы с INI-файлами, а у меня нет никакого желания читать файл вручную и искать там последнюю строку.
Непортабельное есть = Хелпер. Не вариант. Тебе не нужно читать файл, достаточно дописывать строку в конец. Меня это устроит. Либо пиши ключ без значения. Проверяй по его наличию. Мне будет проще, чем со значением.
MVV wrote:
Не вижу ничего плохого в том, что скрипт запустится, но ничего не сделает. Окон он не создает, просто втихаря завершится. Зато имеем универсальность.
Как раз неуниверсальность. Так как скрипты будут зависеть друг от друга. А мне бы этого не хотелось. Они вполне имеют право на отдельное существование.
MVV wrote:
Тебе всего-то надо перед перезапуском поставить где-либо (полная свобода действий) флаг перезапуска, в Unload-скрипте при наличии этого флага ничего не делать, а в Load-скрипте при его наличии также ничего не делать, но снимать его.
Я об этом, собственно, и писал выше:
Flasher wrote:
Да, я могу написать условие в Unload-скрипте, при котором действие будет выполняться, но лучше бы его вообще не запускать, чем давать обращаться к нему.
Но как я уже объяснил, мне лучше иметь 2 файла, чем 3.

#352:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 21, 2011 22:23
    —
Не дело это - смешивать кучу способов работы с одним файлом.

Кстати, если ты умеешь передавать параметры скриптам, то скрипт может быть и один, просто с разными параметрами для загрузки и выгрузки.

#353:  Author: FlasherLocation: Москва PostPosted: Wed Sep 21, 2011 22:30
    —
MVV wrote:
Не дело это - смешивать кучу способов работы с одним файлом.
О какой куче и каком файле речь?

MVV wrote:
Кстати, если ты умеешь передавать параметры скриптам, то скрипт может быть и один, просто с разными параметрами для загрузки и выгрузки.
Не понял, что ты имеешь в виду и уж тем более не понял, как скрипт может быть один, есть у обоих задачи разные (один перезапускает TC, другой вырубает программы)? Теоретически можно вообще все 500 скриптов в один запихать. Только кому такой глючный сыр-бор нужен?
Чего тебе стоит сделать зависимость срабатывания от наличия какого-то ключа? Разговоров много, в то время как ты со своей лёгкой программистской руки давно бы сделал желаемое. Wink

#354:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Sep 22, 2011 00:26
    —
Quote:
О какой куче и каком файле речь?

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

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

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

А завести скрипты загрузки и выгрузки в один файл считаю вполне разумным - они ведь делают симметричные вещи:
Code:
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

Code:
[Load]
Command=Execute.vbs Load

[Unload]
Command=Execute.vbs Unload

#355:  Author: FlasherLocation: Москва PostPosted: Thu Sep 22, 2011 00:32
    —
MVV wrote:
Речь о том, что если файл является INI-файлом, читать и писать его, как текстовый, не совсем корректно.
Так я же выше писал, что расширение меня не волнует Сделай с txt, мне какая разница.
MVV wrote:
Можно даже не писать ничего никуда, просто создай в папке плагина или вообще во временной папке пустой файл с именем вида $tc_restarting$, а после завершения рестарта удаляй. Имя логичное и понятное, и проверять наличие флага проще, чем читать файл.
Создание файла происходит дольше, чем удаление и перезапись одного слова. Не вижу смысла.
MVV wrote:
А завести скрипты загрузки и выгрузки в один файл считаю вполне разумным - они ведь делают симметричные вещи:
Не понимаю, к чему мне скрипт загрузки? Что он мне даст? Что я должен им загружать?

#356:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Sep 22, 2011 10:19
    —
С текстовым ты и сам без проблем справишься из скрипта)) Я ж говорю, полная универсальность и свобода действий: хочешь создавать файл - создаешь, хочешь писать в файл - пишешь.

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

#357:  Author: FlasherLocation: Москва PostPosted: Thu Sep 22, 2011 18:39
    —
MVV wrote:
С текстовым ты и сам без проблем справишься из скрипта))
Ну, не хочу я к скриптам подвязывать ещё один файл.

MVV wrote:
Одна часть скрипта загружает фоновые программы, другая - выгружает, и т.п., всё на виду.
Так а как это относится к моей задаче? Мне загружать-то ничего таким образом не надо. Мои скрипты по логике не объединимы, у них цели разные.
В общем, ты отказываешься помочь в доделке начатого, я правильно понял?

#358:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Sep 22, 2011 22:14
    —
Да. Не вижу необходимости в хирургическом вмешательстве.

#359:  Author: Loopback PostPosted: Fri Sep 30, 2011 15:58
    —
Сколько всего накопилось Smile

HA3APET wrote:
Очень бы хотелось ключик для ShellExec, что бы если программа уже запущена (висит в процессах), она не запускалась.

Что-то команда и без этого уже неприлично разрослась... По-хорошему, не очень правильно этот функционал включать в команду, это надо бы проверять до попытки запуска. В Autoit для этого, например, есть функция ProcessExists. В общем, формально не против, но надо обдумать как.

LonerD wrote:
Раз сейчас нет такой возможности - то просьба на будущее ввести возможность обработки текстовых файлов (ini,cfg), в которых нет разделения на секции.

Вопрос "обработки" произвольных файлов слишком обширен. Что понимается под обработкой? Вставить после определенной строки или вставить по заданному смещению в файле? Вставить с замещением или нет? Файл бинарный или текстовый? Если текстовый, то какая кодировка файла?

Одной-двумя командами всё многообразие действий над файлами не покроешь. В общем, такие задачи все же лучше решать полноценным скриптовым языком.

LonerD wrote:
Поддерживается ли в операторах сравнения конъюнкция и дизъюнкция?

Нет. Может быть в будущем, но не в этой версии точно.

LonerD wrote:
Просьба включить в следующую версию переменную, определяющую язык запущенной ОС.

Можно подумать. Только в каком виде должно быть представление? Дело в том, что из системы нельзя получить напрямую коды языков в том виде, как принято в TC (RUS, DEU и т.д.).

MVV wrote:
Кстати, Loopback, как насчет добавления для функции ShellExec параметра /WAIT, позволяющего дождаться выполнения задачи перед выполнением следующей команды автозапуска?

Flasher wrote:
Я бы вообще ожидание по умолчанию сделал без всяких ключей.

MVV wrote:
Тогда добавить флаг /NOWAIT.

А другие запускают различные резиденты... Так что если уж делать, то пусть лучше /WAIT.

#360:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Sep 30, 2011 16:35
    —
Quote:
Можно подумать. Только в каком виде должно быть представление? Дело в том, что из системы нельзя получить напрямую коды языков в том виде, как принято в TC (RUS, DEU и т.д.).

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

Quote:
А другие запускают различные резиденты... Так что если уж делать, то пусть лучше /WAIT.

Пусть будет /WAIT. А можно сделать оба, и опцию, задающую поведение по умолчанию.

#361:  Author: Loopback PostPosted: Fri Sep 30, 2011 16:47
    —
MVV wrote:
Можно в отдельном плагине сделать функцию, которая будет возвращать число (или строковое представление числа). А брать это число из функции типа GetUserDefaultLCID.

Ну вроде делать отдельный плагин для вызова одной функции и получения одного числа или строки - смысла нет. Если только действительно несколько редко используемых параметров. Но в текущей реализации плагинов не предусмотрена обратная передача данных.
MVV wrote:
А можно сделать оба, и опцию, задающую поведение по умолчанию.

Ну уж нет, я лучше тогда две разные команды сделаю - типа ShellExecute и ShellExecuteWait Smile

#362:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Sep 30, 2011 16:57
    —
Согласен, такие мелочи вполне можно реализовать в самом плагине.

Кстати, как вариант, плагин может устанавливать некоторые переменные окруженияSmile типа разрядности, языка интерфейса системы, языка не-Юникодных программ. Правда, над именами подумать надо.

Quote:
Ну уж нет, я лучше тогда две разные команды сделаю - типа ShellExecute и ShellExecuteWait

Не, параметр /WAIT реально красиво будет смотреться. И это действительно реализуется посредством той же функции, но с дополнительным флагом (не закрывать дескриптор), поэтому нет смысла в другом названии.

#363:  Author: Loopback PostPosted: Mon Oct 03, 2011 14:53
    —
Выложил релиз 1.5.0. Что нового (для тех кто не следил за веткой):
+ переменные (Set)
+ информационные константы
+ условное выражение
+ команда LoadFont
+ перевод сообщений
+ флаги /W, /T, /TT для ShellExec
* изменен CommandExec (внутреннее изменение)

Поддержка x64 предположительно будет в следующей бете.

#364:  Author: ask-rusLocation: Russian Federation PostPosted: Mon Oct 03, 2011 15:48
    —
Loopback wrote:
+ команда LoadFont

А разве этой команды не было ранее? Confused Помнится, кто-то мне тыкал на загрузку шрифтов с Autorun...
Loopback wrote:
Поддержка x64 предположительно будет в следующей бете.

Надеюсь, скоро...

#365:  Author: Loopback PostPosted: Mon Oct 03, 2011 17:05
    —
ask-rus wrote:
А разве этой команды не было ранее?

Была. Так я и написал - для тех кто не следил. Своего рода компиляция истории.

#366:  Author: LonerDLocation: Донецк PostPosted: Tue Oct 04, 2011 15:48
    —
Loopback wrote:

LonerD wrote:
Раз сейчас нет такой возможности - то просьба на будущее ввести возможность обработки текстовых файлов (ini,cfg), в которых нет разделения на секции.

Вопрос "обработки" произвольных файлов слишком обширен. Что понимается под обработкой? Вставить после определенной строки или вставить по заданному смещению в файле? Вставить с замещением или нет? Файл бинарный или текстовый? Если текстовый, то какая кодировка файла?

Одной-двумя командами всё многообразие действий над файлами не покроешь. В общем, такие задачи все же лучше решать полноценным скриптовым языком.

Например, реализовать такие операции.
Для текстовых файлов:
- удалить n-ю строку из файла
- вставить строку перед (или после n-й) без замещения
- вставить строку на место n-й , с замещением.
Для текстовых и произвольных файлов:
- удалить определённый текст/набор символов
- заменить определённый текст/набор символов на другой

Пример использования:
При первом запуске Тотала нужно выполнить некоторые действия, прописанные в autorun.cfg, а затем нужно отредактировать autorun.cfg, чтобы при следующих запусках происходили другие действия.

А может, существует какая-то миниатюрная консольная утилитка, которая может осуществлять описанные не особо сложные действия с произвольными (или хотя бы текстовыми) файлами? Nircmd может только ini править.

Loopback wrote:

LonerD wrote:
Поддерживается ли в операторах сравнения конъюнкция и дизъюнкция?

Нет. Может быть в будущем, но не в этой версии точно.

Как это нет? В теме уже писали - поддерживается, только нужно брать выражения в скобки. Я тоже проверил - вроде работает.

#367:  Author: ApceHLocation: Димитровград PostPosted: Tue Oct 04, 2011 18:10
    —
LonerD wrote:
существует какая-то миниатюрная консольная утилитка, которая может осуществлять описанные не особо сложные действия с произвольными (или хотя бы текстовыми) файлами?
sed, awk, perl Wink Под винду есть, а вот портабл не факт.
Я реализую это всё в kIT UP в секциях [t...
Если реально надо и будет востребовано, то могу в октябре уже.

#368:  Author: Loopback PostPosted: Tue Oct 04, 2011 18:16
    —
LonerD wrote:
Например, реализовать такие операции.

В основной плагин я это точно включать не буду, слишком специфические задачи, и чувствую, список будет расширяться до бесконечности.

Можно реализовать дополнительным плагином, но у меня сейчас нет на это времени. Как вариант - может кто-нибудь еще возьмется.

LonerD wrote:
Как это нет? В теме уже писали - поддерживается, только нужно брать выражения в скобки. Я тоже проверил - вроде работает.

Не писали такого, там предлагали попробовать скобки. Ответственно заверяю - работать не должно Very Happy

#369:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Oct 04, 2011 18:53
    —
Всё дополнительное, не требующее взаимодействия с тоталом, вполне можно реализовать дополнительными утилитами и вызывать из скрипта Autorun.

#370:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Oct 05, 2011 14:48
    —
Loopback, я вначале думал, что ошибка в определении пути загрузки, но потом понял, что ошибка в отображаемом пути. Смотри, прописываешь в конфиг строчку LoadLibrary /U D:\123.dll и запускаешь тотал. В сообщении говорится, что не может быть загружен модуль D:\TOTALCMD\Plugins\Content\Autorun\D:\123.dll. Исправь, пожалуйста. Smile

#371:  Author: Loopback PostPosted: Thu Oct 06, 2011 10:12
    —
MVV
А библиотека-то существует? Просто сначала делается попытка использовать заданный путь как абсолютный, а потом как относительный.

В любом случае, надо будет добавить дополнительную проверку относительного пути и более конкретное сообщение об ошибке - "Библиотека не найдена."

#372:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Oct 06, 2011 10:23
    —
Такой глюк наблюдается как раз при отсутствии библиотеки. Если проверяются оба варианта пути, то ладно, но сообщение об ошибке должно соответствовать действительности.

В любом случае, проверить, абсолютный ли путь, очень просто: сравнить второй символ пути с двоеточием. Сравнить путь с сетевым тоже несложно - два первых символа будут '\'. Все остальные пути можно смело считать относительными и приписывать к ним путь к папке Autorun. Smile И вполне можно выделить это в одну функцию, или просто выводить в сообщении непосредственно ту же строку, которая передавалась в LoadLibrary.

#373:  Author: Loopback PostPosted: Thu Oct 06, 2011 15:22
    —
MVV
Ясно, исправлю.

Я просто проверяю существование файла, если не существует - путь точно не абсолютный.

#374:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Oct 06, 2011 15:27
    —
Loopback, с Лазарусом ещё не пытался подружиться? Хорошо бы для 64-битной версии тотала тоже скомпилить плагин. Но надо как-то продумать возможность использования одного файла конфигурации, но так, чтобы можно было помимо общих строчек задавать строчки для конкретно 32-битной или 64-битной версии (например, чтобы можно было для 32-битной грузить TCFS2Tools.dll, для 64-битной - TCFS2Tools.dll64).

#375:  Author: Loopback PostPosted: Thu Oct 06, 2011 17:17
    —
MVV
Сейчас этим и занимаюсь, правда не с Лазарусом. Файл конфига будет один, с плагинами - как у Гислера:под х64 сначала будет искаться *.dll64. В принципе уже всё работает, только в MoveButton под х64 косяки какие-то с координатами.

#376:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Oct 06, 2011 17:55
    —
Ну переменную в любом случае надо добавить, которая будет принимать значение 32 или 64 в зависимости от разрядности плагина (константу для каждой версии плагина), чтобы с помощью If Else загружать свои модули для своих тоталов.

#377:  Author: Loopback PostPosted: Fri Oct 07, 2011 13:57
    —
Первая бета с поддержкой x64. Изменений в функционале нет, в целом вроде всё работает, только возникли непонятные косяки с получением координат Edit-контрола в 64-битной версии MoveButton. Поправил коррекцией координат, но нет уверенности, что оно останется одинаковым на всех системах - причина этого явления пока непонятна.

Чтобы было более очевидно с бета-версиями, решил пойти по пути Гислера и нумеровать версии как "beta 1", "beta 2" и т.д.

Скачать

#378:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 07, 2011 15:37
    —
Вроде работает. Во всяком случае, мою TCFS2Tools грузитSmile

Всё-таки стоит добавить константу %AUTORUN_TCARCH%, которая будет в 32-битном плагине возвращать 32, а в 64-битном - 64.

В диалоге копирования надо чуть больше делать высоту окна - при сравнении 32-битной и 64-битной пространство под кнопками в 32-битной чуть больше.

#379:  Author: Loopback PostPosted: Fri Oct 07, 2011 16:17
    —
MVV wrote:
Всё-таки стоит добавить константу %AUTORUN_TCARCH%, которая будет в 32-битном плагине возвращать 32, а в 64-битном - 64.

Добавлю, конечно, просто в первую версию не стал вносить добавлений относительно предыдущей, сначала надо потестировать.

MVV wrote:
В диалоге копирования надо чуть больше делать высоту окна - при сравнении 32-битной и 64-битной пространство под кнопками в 32-битной чуть больше.

Но в остальном нормально? Просто почему-то для верхнего Edit'а в 64-битной версии GetWindowRect возвращает неправильные координаты. Они действительно неправильные, даже проверил экранной линейкой Smile

#380:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 07, 2011 16:46
    —
На вид нормально. На x64 кнопка у тебя на 1 пиксель левее, чем на x32.

А что с координатами у тебя, не понимаю, WinScan показывает абсолютно одинаковые координаты (и экранные, и клиентские) для обеих версий.

#381:  Author: Loopback PostPosted: Fri Oct 07, 2011 20:10
    —
MVV wrote:
А что с координатами у тебя, не понимаю, WinScan показывает абсолютно одинаковые координаты (и экранные, и клиентские) для обеих версий.

Вот и я не понимаю. Получаю с помощью Au3info, тупо меряю линейкой - координаты правильные. Но под 32-битной версией GetWindowRect возвращает верные координаты, а под 64 - нет. Причем только одного этого контрола.

#382:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Oct 13, 2011 16:57
    —
Гляжу сейчас, 2% процессора кушается всего, из них 1% кушается тоталом. Отключил автообновление, всё равно. Смотрю треды - 0.8% кушает MoveButton. Довольно приличное потребление, особенно если учесть, что она большую часть времени ничего не делает.

Думаю, имеет смысл попробовать переделать цикл на хук. Ставишь локальный хук вызовом SetWindowsHookEx(WH_CALLWNDPROC, @MoveWindowHookProc, nil, GetWindowThreadProcessId(hMainTcWnd)) (при выгрузке плагина снимаешь хук). В процедуре-обработчике обрабатываешь исключительно сообщения WM_SHOWWINDOW. Если пришло левое сообщение, процедура тут же вернет управление, а если сообщение нужное, и окно собирается показаться, делаешь своё чёрное дело по перемещению кнопки и изменению размера окна (если это окно копирования/перемещения) - так никто не будет видеть твоей деятельности, т.к. она будет выполняться, пока окно ещё невидимо. Замедление работы будет практически нулевым, т.к. твой код будет выполняться исключительно на единственное сообщение.

#383:  Author: Loopback PostPosted: Thu Oct 13, 2011 23:11
    —
MVV
Да, почти целый процент - явно многовато. Не помню, почему я тогда не стал делать с хуками. Может, косяки были?

Переписал, сейчас в покое не должна вообще ничего потреблять.

Скачать

#384:  Author: FlasherLocation: Москва PostPosted: Thu Oct 13, 2011 23:21
    —
Autorun_MoveButton.dll - 14 Кб
MoveButton.dll - 34,5 Кб
Question

#385:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Oct 13, 2011 23:21
    —
Ну дельфя даёт, поместить в секцию импорта 3 модуля kernel32.dll, каждый со своими функциями, часть повторяется. Very Happy

Посмотрю завтра на работе на Win7x64, дома незаметно потребления и со старой.

#386:  Author: Loopback PostPosted: Thu Oct 13, 2011 23:43
    —
Flasher wrote:
Autorun_MoveButton.dll - 14 Кб
MoveButton.dll - 34,5 Кб

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

MVV wrote:
Ну дельфя даёт, поместить в секцию импорта 3 модуля kernel32.dll, каждый со своими функциями, часть повторяется.

Smile

#387:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Oct 13, 2011 23:56
    —
Loopback
Да нет, использовать нужно меньшийSmile а вообще, можно и оба. Но у меня это наблюдалось под TC8x32.

Flasher
Если открыть каждый по F3 в FileInfo, будет видно, что больший - 64-битныйSmile

#388:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 00:21
    —
Loopback wrote:
Нужно использовать бОльший файл.
Больший из приведённых или меньший из новых для 32-бит?

У меня ругается:
Code:
Error in command at line [9]:
Unknown command: MoveOptionsButton
line [9]: MoveOptionsButton MOVE_LEGACY

#389:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 09:41
    —
Loopback, теперь всё супер! Very Happy
Оба, 32-битный и 64-битный, на семёрке работают отлично. Ресурсов теперь не едят вообще.

Flasher, плагин точно загружает модули? Пути к файлам указаны верно? Такое может быть, если плагин не находит модули.

#390:  Author: Loopback PostPosted: Fri Oct 14, 2011 09:48
    —
Flasher wrote:
Больший из приведённых или меньший из новых для 32-бит?

Выложенные файлы - только для новой (1.6 бета 1) версии Autorun.

Поскольку все строки в новых версиях дельфи изначально юникодные, интерфейс плагинов автоматом поменялся. Поскольку его все равно надо менять и дополнять, пока не стал заморачиваться с совместимостью (а возможно, этого и не понадобится).

MVV wrote:
Ресурсов теперь не едят вообще.

Ага Smile Хороший был совет, да и код упростился.

#391:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 09:54
    —
Loopback wrote:
Выложенные файлы - только для новой (1.6 бета 1) версии Autorun.
Понял.

Добавлено спустя 8 минут:

Установил новую - все цвета слетели. Sad

Сначала было так: Autorun_plugin=autorun.Autorun = 0
После установки стало так: Autorun_plugin=twinkey.Autostart > 0 Shocked
Теперь там буква A. Заработало после переустановки шаблона: Autorun_plugin=autorun.A > 0

#392:  Author: Loopback PostPosted: Fri Oct 14, 2011 10:26
    —
Flasher wrote:
Теперь там буква A. Заработало после переустановки шаблона: Autorun_plugin=autorun.A > 0

Подтверждаю. Это косяк.

#393:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 10:33
    —
Я как-то не любитель я автоматических установщиков, как тут, так и в винде)) новую версию всегда ставлю заменой WDX-файла. Very Happy
При этом копирую новый с автопереименованием существующих, потом после перезапуска тотала переименованный старый можно удалить.

#394:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 10:41
    —
MVV wrote:
При этом копирую новый с автопереименованием существующих, потом после перезапуска тотала переименованный старый можно удалить.
Ну, так я делаю с дочерними плагинами. А основной-то быстрей переписать с автоустановки, к тому же там не только файл плагина переписывается. Есть только два контентных плагина, нуждающиеся в этой процедуре, - этот и TwinKey.

А autorun.wdx разве не переписывался раньше на автомате? Я что-то запамятовал.

#395:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 11:03
    —
Если копируешь вручную, то надо выгружать плагин перед его заменой, т.к. он загружен тоталом. Но т.к. тотал подгружает его автоматом при любом обновлении панелей, проще скопировать с переименованием существующего. Потом после выгрузки можно удалять.

Кстати, странно, что цветовая схема полетела - автоустановщик же не должен её менять, он должен только заменить библиотеку.

#396:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 11:09
    —
MVV wrote:
Но т.к. тотал подгружает его автоматом при любом обновлении панелей, проще скопировать с переименованием существующего.
А если убрать автообновление?

#397:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 11:27
    —
Это к ГислеруSmile я только знаю, что тотал, как только ему надо покрасить файлы в папке, загружает плагин=)

#398:  Author: Loopback PostPosted: Fri Oct 14, 2011 11:38
    —
Flasher wrote:
А если убрать автообновление?

MVV wrote:
я только знаю, что тотал, как только ему надо покрасить файлы в папке, загружает плагин

Между прочим, именно благодарая этому и возможна автозагрузка плагина. Так что не надо убирать автообновление Smile

Хотя, если бы Гислер официально предусмотрел возможность автозагрузки определенных плагинов - было бы лучше.

#399:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 11:47
    —
Даже если автообновление будет выключено, тотал при ручном обновлении и при входе в папку сам будет вызывать плагин.

#400:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 11:55
    —
Loopback
На вопрос можешь ответить?:
Flasher wrote:
А autorun.wdx разве не переписывался раньше на автомате?

#401:  Author: Loopback PostPosted: Fri Oct 14, 2011 12:16
    —
Flasher
Он прописывался как любой другой плагин, но цветовая схема, естественно, автоматом не настраивается.

#402:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 12:49
    —
Loopback
Я не про "прописывался", а про перезаписывался. Сейчас автомат не действует: "Нет доступа или файл уже используется."

#403:  Author: Loopback PostPosted: Fri Oct 14, 2011 13:18
    —
Flasher
Тогда не знаю, я его никогда инсталлятором поверх не ставил. Попробую.

#404:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 14:52
    —
А, я вспомнил причину. Плагин же теперь не выгружается по команде тотала, а остается загруженным до закрытия тотала. Потому тотал и не может его перезаписать - он думает, что выгрузил плагин, но на самом деле это не так.

Даже не знаю, что тут поделать. "Или шашечки, или ехать" (c). Разве что сделать защиту от выгрузки опциональной и включать её через конфиг - тогда проблема будет только у тех, кто включил её.

#405:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 15:15
    —
MVV
AutorunBlockUnload True Question

#406:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 15:18
    —
Во, она. У меня Readme был от старой версии. Very Happy
Вот если её выключить, обновление должно работать корректно.

#407:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 15:20
    —
Ага, но было бы здорово, если установщик сам бы отключал её на момент переписки.

#408:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 15:28
    —
Flasher, отключить-то его можно, но без перезапуска тотала он не будет иметь силы, т.к. плагин уже загрузил сам себя. А о намерении обновить плагин тотал последнему, естественно, не сообщает. Остаётся лишь написать в сообщении при установке, что при включенном AutorunBlockUnload обновить нельзя.

#409:  Author: FlasherLocation: Москва PostPosted: Fri Oct 14, 2011 15:50
    —
MVV
Т.е. плагин изнутри сам себя не может прихлопнуть? Главное, чтобы установщик мог перезаписывать файл, иначе держать в голове, что перед установкой нужно закомментировать команду, а потом перезапустить TC как-то нерационально.

#410:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 14, 2011 18:55
    —
А никакой плагин не может себя прихлопнуть Smile чтобы прихлопнуть себя, надо вызвать FreeLibrary, но после вызова управление вернётся в область кода, память для которой уже освобождена, будет крах. Но плагин может FreeLibrary для уменьшения счетчика загрузок (он ведь увеличивал его для защиты от выгрузки), тогда тотал сможет выгрузить его. Но как сказать плагину, что тотал собирается выгружать и обновлять его?

#411:  Author: FlasherLocation: Москва PostPosted: Mon Oct 24, 2011 16:46
    —
Loopback
Flasher wrote:
HA3APET wrote:
Очень бы хотелось ключик для ShellExec, что бы если программа уже запущена (висит в процессах), она не запускалась.
Поддерживаю. Было бы здорово, если бы не запускалась не только программа, но и скрипты этой программы. В качестве идентификации можно использовать полные пути, а не PID.
Штука очень нужная, особенно когда вызываешь TC с параметром /O.

#412:  Author: Loopback PostPosted: Mon Oct 24, 2011 17:37
    —
Flasher wrote:
Штука очень нужная, особенно когда вызываешь TC с параметром /O.

Я уже писал ранее, что мне не нравится перегруженность ShellExec кучей ключей. Надо подумать, как это сделать лучше.

#413:  Author: FlasherLocation: Москва PostPosted: Mon Oct 24, 2011 18:19
    —
Loopback
В данном случае меня не ключ интересовал, а сама возможность с её скорейшей реализацией. Wink

#414:  Author: LonerDLocation: Донецк PostPosted: Wed Nov 02, 2011 23:22
    —
Не знаю у кого как, а у меня Autorun 1.6 бета 1 регулярно вызывает ошибку при закрытии Тотала. Появляется окошко аварийного закрытия программы.
Особенно это заметно если запущена утилька TCLive.
На предыдущих версия Autorun (1.4.9.6 и 1.5.0) подобных ошибок не возникает.

#415:  Author: Loopback PostPosted: Wed Nov 02, 2011 23:47
    —
LonerD
Непосредственно TCLive (да и любая другая) программа вряд ли влияет. Вот код закрытия теоретически может. У тебя включена опция закрытия программы после выхода (/T или /TT, может быть еще /W)? Если эти опции убрать, проблема остается?

#416:  Author: LonerDLocation: Донецк PostPosted: Thu Nov 03, 2011 00:14
    —
Loopback
Было включено. Убрал, вроде теперь ошибка не выскакивает.
И ещё. Не знаю, так задумано или нет. В новой версии каталог с плагином нельзя переименовать если запущен Тотал (в старых версиях можно было).

#417:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Nov 03, 2011 09:19
    —
Видимо, какая-то программа запускается с каталогом плагина в роли рабочего каталога. Переименовывать каталоги, дескрипторы которых используются в какой бы то ни было программе, невозможно до закрытия всех этих дескрипторов. Попробуй задавать явно рабочий каталог каждой запускаемой из плагина программе.

#418:  Author: FlasherLocation: Москва PostPosted: Fri Nov 04, 2011 07:07
    —
Ввиду отсутствия релиза из-за продолжительной загруженности автора публикую материал к последней бета-версии ScrollTC.
Ссылка на скачивание.

История бета-версий wrote:
1.7
Выпущена первая релиз-версия.
1.9
Добавлено: Подмена сообщений колеса мыши на сообщения полос прокрутки.
Добавлено: Прокрутка в неактивной панели быстрого просмотра с плагином ICLView в режиме просмотра значков.
Добавлено: Нелинейное ускорение.
1.9.1
Добавлено: Переделан алгоритм ускорения. Скорость увеличивается/уменьшается с увеличением/уменьшением амплитуды прокручивания.
1.9.4
Добавлено: Прокрутка останавливается обратным вращением колеса.
Добавлено: Увеличен максимум для ускорения.
Добавлено: Возможность прокручивать горизонтально при наведении курсора на горизонтальную полосу прокрутки.
Добавлено: Ускорение запоминается и сбрасывается только при переходе на новое окно.
Добавлено: Остановка прокрутки возможна как изменением направления, так и ЛКМ, СКМ, ПКМ, пробелом и Tab`ом без потери функционала самих клавиш.
Добавлено: Улучшен алгоритм ускорения: при наборе скорости не происходило замедление при более медленной прокрутке.
1.9.6
Добавлено: Остановка прокрутки возможна вызовом любой клавиши и любой из 5-ти кнопок мыши.
Исправлено: Скорость доведена до комфортных рамок.
Исправлено: Скорость не сбрасывалась при паузах.
1.10
Добавлено: Прокрутка блоками из нескольких строк в ТС и некоторых окнах со стандартными контролами.
1.11
Добавлено: Появился файл конфигурации. Ключ SpeedMoreCount.
Исправлено: Циклическое пошаговое вращение.
1.12
Добавлено: Прокрутка в диалоге dxdiag.exe - вкладка "Ввод" > поле "установленные драйверы" при раскрытом дереве.
Добавлено: Прокрутка в диалоге "Переменные среды" ( rundll32 sysdm.cpl, EditEnvironmentVariables ) > поле "системные переменные".
1.13
Добавлено: Ключ IgnorCount: задаёт сумму щелчков, блокируемых в начале вращения после первого щелчка.
Этот ключ позволяет при мелких сдвигах колеса не прокручивать список более, чем на заданное число позиций. Рекомендуемые значения: 1, 2, 3.
1.14
Добавлено: Горизонтальная прокрутка может осуществляться без подвода к полосе, а лишь при удержании левой клавиши Win. Ключ в ini: WinMod (0/1)
1.15
Добавлено: Прокрутка в файлах справки chm на вкладке "Указатель".
Добавлено: Горизонтальная прокрутка в Acrobat Reader работает без подвода к полосе прокрутки.
Добавлено: Скорость горизонтальной прокрутки увеличена вдвое.
Добавлено: Горизонтальная прокрутка в браузерах на движке IE.
Добавлено: Горизонтальная прокрутка в браузерах на движке Chromium.
1.16
Исправлено: В некоторых случаях фокус при прокрутке активировал чужие окна.
Исправлено: Иногда останавливается работа в Windows 7. Создан механизм переустановки слетевших хуков.
1.17
Добавлено: Горизонтальная прокрутка в браузере Opera также при использовании модификатора LWin.
Добавлено: Горизонтальная прокрутка в браузерах на движке Gecko.
Исправлено: Прокрутка приостанавливалась на всплывающих подсказках.
1.18
Добавлено: Вертикальная прокрутка в утилите AVSearch в области отображения содержимого найденных файлов.
Добавлено: Вертикальная прокрутка в редакторе FXEDIT при подводе к полосе.
Исправлено: Уменьшена вероятность неотработки плагина (слетания хука).
Добавлено: Функционал допуска прокрутки в некоторых системных окнах.
Добавлено: Прокрутка в Rootkit Unhooker LE на Windows XP при установке фокуса в рабочем поле.
1.19
Добавлено: Прокрутка в непомещающихся по высоте меню со стрелками. Примеры:
1) В настройках TC на странице "Разное" в секции "Переопределять горячие клавиши" кнопка со стрелкой.
2) Инструмент "Групповое переименование" > кнопка "[=?] Плагин" либо диалог "Настройка наборов колонок > кнопка [+]. Из плагинов наиболее актуальны: ShellDetails, Exif, Jpg-Comment, DecID3WDX.
3) Утилита Camper > вкладка "Редактор" > нижняя кнопка [+] > пункты "La_Control", "TC_CONTROL".
1.20
Добавлено: Супер-ускорение в меню со стрелками! Меню с ShellDetails прокручивает за 5-6 секунд !!!
Исправлено: Если в плагине TwinKey были назначены несимвольные клавиши с модификатором LWin, то после его отпускания и нажатия этих клавиш выполнялись соответствующие команды.
Добавлено: Экспериментальный ключ ForceSlow. Назначение - ускорить прокрутку в окнах, где она очень медленная.
Добавлено: Горизонтальная прокрутка при удержании правой кнопки мыши (ключ RBMod(0/1)) после начала прокрутки в заданном промежутке, значении ключа RBTimeout.
1.21
Исправлено: Функция ForceSlow заменена на встроенное правило для нестандартной обработки.
Добавлено: Ключ StopCurOnArrow (0/1). Переключает режим позиционирования курсора в меню, не вмещающихся по высоте в экран, с места подвода к одной из стрелок. Введён на случай того, чтобы прокрутка не спотыкалась на открываниях подменю.
Добавлено: Блокировка случайного нажатия средней кнопки мыши (колеса) во время прокрутки.
1.22
Добавлено: Конфигуратор настройки плагина.
Добавлено: Настройки для конкретных окон (учёт наклона колеса мыши).
1.23
Добавлено: Прокрутка TagScanner в этом меню.
Добавлено: Прокрутка рабочей области в FXEDIT с модификатором LWin.
Добавлено: Прокрутка в Keyboard and Mouse Button Odometer.
Добавлено: Конфигуратор: переходы по Ctrl+Tab, шлифовка названий пунктов.
Исправлено: Переделан алгоритм ускорения с целью уменьшения рывков в некоторых окнах.
Исправлено: Проблемы предыдущей версии с прокруткой в браузерах на Gecko и IE.
Важно! Возникшая проблема с неотработкой клавиш в TwinKey с модификатором LWin при его отпускании, когда окно TC теряет фокус, с открытием меню "Пуск" решается переводом TwinKey на первую позицию в цветовых схемах. Очень актуально для Windows 7.
1.24
Добавлено: Горизонтальная прокрутка при удержании Caps Lock (опционально).
Добавлено: Горизонтальная прокрутка в диалогах проводника Windows 7. Примеры вызовов:
shell:::{E95A4861-D57A-4be1-AD0F-35267E261739}
shell:::{D20EA4E1-3957-11d2-A40B-0C5020524153}
shell:::{031E4825-7B94-4dc3-B131-E946B44C8 DD5}

Добавлено: любая прокрутка в программе avz.
1.25
Исправлено: Не работала ранее реализуемая прокрутка в некоторых окнах.
Исправлено: Проблемы с замедлением горизонтальной прокрутки в обратном направлении в браузерах IE.
Исправлено: Для прокрутки в Gecko-окнах по умолчанию добавлен класс MozillaWindowClass.
Добавлено: Прокрутка в программе Revo Uninstaller в последних диалогах (2 снизу).
1.26
Добавлено: Прокрутка в MS Exel 2007 в любой из 2-х панелей с документами в одном окне.
Добавлено: Прокрутка меню, создаваемых в панели задач.
Исправлено: Улучшен алгоритм определения окон и скроллбаров.
1.27
Добавлено: Альтернативная функция временной передачи фокуса окну (опционально для окон).
Добавлено: Усовершенствован Конфигуратор. Добавлена отладочная функция в окне, вызываемом по кнопке "Добавить".
Добавлено: Прокрутка в диалоге "Значки области уведомлений" ( shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} ) в Windows 7 при активации окна. Для прокрутки выпадающих списков в этом окне требуется установить опцию "Временно передавать фокус окну".
1.28
Добавлено: Горизонтальная прокрутка в приложениях MSOffice 2007/2010.
Исправлено: Завышенная нагрузка на процессор при поиске окон и скроллбаров.
1.29
Исправлено: При вызове панели инструментов в виде меню, клике правой кнопки мыши на нужном элементе вместо открытия контекстного меню происходил запуск аналогично как при нажатии левой кнопки.
1.30
Добавлено: Опция "Отключить любую обработку в этом окне".

Из ожидаемого:
1. Горизонтальная прокрутка в приложениях LibreOffice.
2. Возврат убранного ускорения в версии 1.23.
Важно! Для тех, кому важна скорость (как мне, например), к скачиванию рекомендована версия 1.21.

Из нереализованного:
1. Прокрутка в программах на QT (QtWeb, qoobar и т.д.).
2. KeyMapper: Главное меню: Keyboard Layout > Select Language. Нет прокрутки.
3. В Rootkit Unhooker установлена защита от сообщений из других приложений. Нельзя прокручивать неактивную область.

#419:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Nov 04, 2011 22:54
    —
Loopback, так что, скоро мир увидит Autorun.wdx с псевдо-переменной AUTORUN_TCARCH? Smile

#420:  Author: LonerDLocation: Донецк PostPosted: Sat Nov 05, 2011 18:03
    —
MVV wrote:
Видимо, какая-то программа запускается с каталогом плагина в роли рабочего каталога. Переименовывать каталоги, дескрипторы которых используются в какой бы то ни было программе, невозможно до закрытия всех этих дескрипторов. Попробуй задавать явно рабочий каталог каждой запускаемой из плагина программе.

Попробовал, дело в плагинах (или в новом способе подгрузки плагинов плагином Autorun).
Например, прописал единственную строку
LoadLibrary Plugins\TCFS2Tools.dll
В Autorun 1.5 это не влияет на переименование папки с плагином, в версии 1.6 папку уже невозможно переименовать.
Задать явный путь (с указанием диска, папки...) к плагину - не получается, - плагин просто не загрузится.

#421:  Author: FlasherLocation: Москва PostPosted: Sat Nov 05, 2011 18:14
    —
Что-то по ScrollTC все молчат... Неужели никто не пользуется?

LonerD, какие дела по старой проблеме?

#422:  Author: LonerDLocation: Донецк PostPosted: Sat Nov 05, 2011 20:17
    —
Flasher wrote:
Что-то по ScrollTC все молчат... Неужели никто не пользуется?

LonerD, какие дела по старой проблеме?

Дней пять как наткнулся на сайт автора, скачал новую версию, недавно попробовал.
С TwinKey - всё шоколадно, более того - утилитка замедляет прокрутку, благодаря этому "подавляется" мерцание.

В остальном - не айс. Утилитка зачем-то перехватывает все процессы, прокрутка в других программах становится медленной, также перехватываются горизонтальные-вертикальные прокрутки, программы надо вносить в исключения (тот же Excell - зачем??? по дефолту сделан с горизонтальной прокруткой), но и в исключениях - тоже не выход (поставил для процесса Notepad++ скорость прокрутки 9, но прокручивается гораздо медленней, чем без ScrollTC) .

Разницы в скорости между 3.0 и 2.0 - не заметил, как по мне примерно одинакова и недостаточна.

Совершенно не понятно почему до сих пор не реализована просто-напросто глобальная установка скорости прокрутки для всех приложений.
А вообще - лучше бы не вылезала за пределы TC, и управляла только прокруткой в нём.

#423:  Author: FlasherLocation: Москва PostPosted: Sat Nov 05, 2011 20:32
    —
LonerD wrote:
В остальном - не айс.
Почитай историю. Айс и ещё какой (для меня во всяком случае).
LonerD wrote:
Утилитка зачем-то перехватывает все процессы, прокрутка в других программах становится медленной, также перехватываются горизонтальные-вертикальные прокрутки, программы надо вносить в исключения
Насчёт медленной прокрутки ещё будет разговор (см. "Из ожидаемого:"). То, что перехватывает все процессы - так и положено. Не так уж много приложений, в которых требуется иное поведение. Зато неработающих прокруток (в особенности горизонтальных) хватало.
LonerD wrote:
тот же Excell - зачем??? по дефолту сделан с горизонтальной прокруткой
Зачем - см. историю бета-версий. Поступили жалобы - было подтверждено автором. Касается 2007/2010 офиса.
LonerD wrote:
поставил для процесса Notepad++ скорость прокрутки 9, но прокручивается гораздо медленней, чем без ScrollTC
Ну, вот видишь, значит, разумно управлять любыми окнами.
LonerD wrote:
Разницы в скорости между 3.0 и 2.0 - не заметил, как по мне примерно одинакова и недостаточна.
Таких нет. Есть 1.20, 1.30. См. выделенное в истории и ниже предлагаемую версию для скачивания.
LonerD wrote:
Совершенно не понятно почему до сих пор не реализована просто-напросто глобальная установка скорости прокрутки для всех приложений.
Потому что контролы у приложений могут быть разные, там свои завязки.
LonerD wrote:
А вообще - лучше бы не вылезала за пределы TC, и управляла только прокруткой в нём.
Ага, и фронт нереальной работы коту под хвост? Нет уж. Мне она нужна именно с возможностью управления всеми окнами. Из TC она только активизируется для удовлетворения портабельности.

#424:  Author: LonerDLocation: Донецк PostPosted: Sat Nov 05, 2011 20:50
    —
Quote:
Насчёт медленной прокрутки ещё будет разговор

Думаю, ну да ладно, щас в родных драйверах мыши увеличу скорость прокрутки на максимум, и с учётом того, что ScrollTC чегото там замедляет, в целом скорость прокрутки придёт в норму.
Фигвам Shocked . Похоже, утилитка не просто замедляет прокрутку, а пытается блокировать работу драйверов и навязывает только свои порядки.

Quote:
Зачем - см. историю бета-версий.

Нашёл фразу
1.28
Добавлено: Горизонтальная прокрутка в приложениях MSOffice 2007/2010.
Но зачем же она добавлена по умолчанию - не понятно. Нужно гораздо чаще прокручивать документы по вертикали, чем по горизонтали (а для просмотра по горизонтали обычно используется финт Ctrl+колёсико).

Кстати, в истории бета-версий не сказано, что именно в версии 1.20 исправлена проблема с TwinKey.

Quote:
Ну, вот видишь, значит, разумно управлять любыми окнами.

Разумно сделать два режима работы "разрешено всё, что не запрещено" и "запрещено всё, что не разрешено".
Кому-то удобней добавить приложения в исключения, а кому-то - разрешить работу лишь в нескольких приложениях.
Мне, например, не нравится черепашья скорость прокрутки во многих приложениях при активном ScrollTC. И добавлять их ВСЕ в список исключений - муторное занятие.

Quote:
Таких нет. Есть 1.20, 1.30.

В названиях скачиваемых архивов нет цифры 1 Very Happy

#425:  Author: FlasherLocation: Москва PostPosted: Sat Nov 05, 2011 21:01
    —
LonerD wrote:
Похоже, утилитка пытается блокировать работу драйверов и навязывает свои порядки.
Ну и отлично. Драйвера то зачем ещё использовать для единых задач?
LonerD wrote:
Нашёл фразу
Ещё пропустил
Quote:
Прокрутка в MS Exel 2007 в любой из 2-х панелей с документами в одном окне.

LonerD wrote:
И добавлять их ВСЕ в список исключений - муторное занятие.
Список приложений выдай, пожалуйста, чтобы хотя бы иметь представление, что это за "все", и сколько их на самом деле.
И не забывай, что у тебя есть возможность работать с опциями этих окон, а не только добавлять в список исключений, а это ой как важно в ряде случаев. Также обращаю внимание на ключ IgnorCount, при повышении значения которого можно осуществлять прокрутку блоками.
LonerD wrote:
В названиях скачиваемых архивов нет цифры 1
Номера в названиях архивов - это не версии, и в любом случае точек там нет. Это упрощённая нумерация в порядке поступления.

Last edited by Flasher on Sat Nov 05, 2011 21:02; edited 1 time in total

#426:  Author: LonerDLocation: Донецк PostPosted: Sat Nov 05, 2011 21:02
    —
Quote:
LonerD wrote:
Quote:
Совершенно не понятно почему до сих пор не реализована просто-напросто глобальная установка скорости прокрутки для всех приложений.


Потому что контролы у приложений могут быть разные, там свои завязки.

А как же мышиные драйвера ? У них ведь один-единственный ползунок, регулирующий скорость прокрутки по колёсику.
Почему бы не сделать и в программе возможность увеличивать-уменьшать скорость прокрутки глобально? (а то в ней даже для приложений между скоростью 1 и скоростью 9 нет разницы).

Quote:
и ниже предлагаемую версию для скачивания.

Так у неё скорость примерно такая же, как и у последней.

#427:  Author: FlasherLocation: Москва PostPosted: Sat Nov 05, 2011 21:18
    —
LonerD wrote:
Почему бы не сделать и в программе возможность увеличивать-уменьшать скорость прокрутки глобально?
Можешь привести приложения, которые кардинально отличаются по скорости прокрутки? Лучше в личку.
LonerD wrote:
Так у неё скорость примерно такая же, как и у последней.
В указанном меню с перезагрузкой ТС пробовал? После переписи половины кода из-за ситуаций вероятных рывков было убрано ускорение в 1.23 (писал уже). Поэтому такого не может быть.

Last edited by Flasher on Sat Nov 05, 2011 21:23; edited 1 time in total

#428:  Author: LonerDLocation: Донецк PostPosted: Sat Nov 05, 2011 21:22
    —
Quote:
Список приложений выдай, пожалуйста, чтобы хотя бы иметь представление, что это за "все", и сколько их на самом деле.

Вот в том же и проблема. Я регулярно использую десятки приложений.
Визуально замедлено значительное замедление прокрутки во всех приложениях.
Кстати, есть ещё и игры. В них, наверное, тоже мыша будет работать в замедленном темпе? Скорость там иногда критична.

Из открытого сейчас - Opera, MS Word, MSExcell, Notepad++. Закрыл Тотал - скорость прокрутки значительно увеличилась.
Повторяю - для себя я бы оставил обработку только TC (потому как медленней, зато не заметно мерцание TwinKey).

Flasher wrote:

LonerD wrote:
А вообще - лучше бы не вылезала за пределы TC, и управляла только прокруткой в нём.
Ага, и фронт нереальной работы коту под хвост? Нет уж. Мне она нужна именно с возможностью управления всеми окнами. Из TC она только активизируется для удовлетворения портабельности.

Э-мм. А почему утилитка тогда называется ScrollTC?

Проверил скорость. Win7x64, Тотал 7.56а.
Открыл папку System32, покрутил своей мышью до конца.
Результаты примерные, но тенденция видна.
40 секунд - прокрутка просто в Тотале
23 секунды - прокрутка при включенном TwinKey
73 - включён TwinKey и ScrollTC 1.2
78 - включён TwinKey и ScrollTC 1.3

#429:  Author: FlasherLocation: Москва PostPosted: Sat Nov 05, 2011 21:34
    —
LonerD wrote:
Из открытого сейчас - Opera, MS Word, MSExcell, Notepad++. Закрыл Тотал - скорость прокрутки значительно увеличилась.
Пробуй опции "Минимальный шаг прокрутки" и "Шаг прокрутки вычисляется программой". Доложи о результатах.
LonerD wrote:
Повторяю - для себя я бы оставил обработку только TC (потому как медленней, зато не заметно мерцание TwinKey).
А у меня без ScrollTC гораздо медленней. И в ряде других приложений аналогично. Видимо, у нас драйвера слишком по разному работают.
LonerD wrote:
Э-мм. А почему утилитка тогда называется ScrollTC?
Это дочерний плагин autorun.wdx, и, соответственно, запускается только из-под TC.
LonerD wrote:
23 секунды - прокрутка при включенном TwinKey
Shocked Не понял, как прокрутка могла увеличиться от включённого TwinKey?
Режим просмотра не назвал. Если в подробном, то у меня за 35 сек со ScrollTC, в кратком - 3 сек.

#430:  Author: LonerDLocation: Донецк PostPosted: Sat Nov 05, 2011 22:00
    —
Quote:
Пробуй опции "Минимальный шаг прокрутки" и "Шаг прокрутки вычисляется программой". Доложи о результатах.

Разницы не заметил. Может, и есть но визуально заметить сложно. В Excel, Word и Опере к тому же не работает прокрутка страницы целиком (в Notepad++ - работает).

Quote:
Не понял, как прокрутка могла увеличиться от включённого TwinKey?
Режим просмотра не назвал.

Режим просмотра - Full view.
А скорость - да, при включённом TwinKey у меня и раньше увеличивалась.

Quote:
Видимо, у нас драйвера слишком по разному работают.

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

#431:  Author: FlasherLocation: Москва PostPosted: Sat Nov 05, 2011 22:16
    —
LonerD wrote:
В Excel, Word и Опере к тому же не работает прокрутка страницы целиком (в Notepad++ - работает).
В MS Office сейчас проверить не могу, не пользуюсь. А на скорость в Опере, насколько я помню, ScrollTC вообще не влияет. У меня там одинакого быстро бегает и при включённом ТС и при выключенном. "Страница целиком" - это насчёт опции?
LonerD wrote:
А скорость - да, при включённом TwinKey у меня и раньше увеличивалась.
Чудеса. У меня раньше только падала. На это даже жалобы были.
LonerD wrote:
Так потому ж я и завёл речь - в драйверах можно хотя бы глобально изменить скорость прокрутки, а при запущенном плагине - нельзя нигде даже подрегулировать под желаемую скорость.
Ну вот и написал бы там об этом, а то взял и положил своим "фи" на всю многотонную работу. Может, с драйверами решаемо. Многого лишишься ведь, если работать только в ТС будет.
Кстати, вопрос глобальной настройки ускорения я ещё в самом начале поднимал. Всё остановилось на подъёме возможного максимума.
В общем, если есть резон работать в ТС, то можно ещё испробовать одну из старых версий 1.9.4-1.10, либо добавь в последней версии несколько нужных окон в исключения и заблокируй обработку в них. Ждать подвижек от автора в ближайшие месяцы особого смысла нет (если руки даже до релиза не дошли).

#432:  Author: LonerDLocation: Донецк PostPosted: Sun Nov 06, 2011 00:11
    —
Flasher wrote:
А на скорость в Опере, насколько я помню, ScrollTC вообще не влияет. У меня там одинакого быстро бегает и при включённом ТС и при выключенном. "Страница целиком" - это насчёт опции?

Может и не влияет, не буду спорить. А может и влияет, но не особо сильно. Найдётся большая длинная страница - тогда можно проверить будет.
Точно в Офисе, Notepad++, QIP - скорость прокрутки заметно изменяется.
"Страница целиком" - да, это насчёт опции в ScrollTC.

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

Я ни в коем случае не ложил фи Smile
Я сетую на отсутствие гибкости.
Хошь-не хошь, а перехватываются многие приложения. И это нельзя ни отключить ни перенастроить глобально, только по одному править, и то не особо-то исправляется.

Flasher wrote:
Чудеса. У меня раньше только падала. На это даже жалобы были.

У меня на компе (7 х64) и на ноуте (ХР х32), на трёх мышах (Logitech MX1100, MS IntelliPoint и какой-то A4Tech) прокрутка в Тотале была всегда быстрее при включённом TwinKey. Отсюда и мерцание, видимо, возникает.
ScrollTC пока получается проверить только на семёрке (ноут уже за межою этой реальности) на мышах MX1100 и A4Tech, скорость примерно одинаково медленная.

Flasher wrote:
В общем, если есть резон работать в ТС, то можно ещё испробовать одну из старых версий 1.9.4-1.10

Работа с TwinKey была исправлена только только в 1.20, в более ранних версиях прокрутку мышью невозможно было остановить мгновенно.

#433:  Author: FlasherLocation: Москва PostPosted: Sun Nov 06, 2011 00:47
    —
LonerD wrote:
Точно в Офисе, Notepad++, QIP - скорость прокрутки заметно изменяется.
"Страница целиком" - да, это насчёт опции в ScrollTC.
Сейчас проверил в NP++, скорость куда быстрее, чем без SсrollTC. С горизонтальной прокруткой - вообще блеск. А страницу там действительно целиком не прокручивает, но скорость увеличивается раз в пять. Very Happy
LonerD wrote:
Я ни в коем случае не ложил фи Smile
Я сетую на отсутствие гибкости.
Я бы так не сказал, раз просишь включение только в TC. Назвать плагин негибким при всех его плюсах язык что-то никак не поворачивается.
LonerD wrote:
Хошь-не хошь, а перехватываются многие приложения. И это нельзя ни отключить ни перенастроить глобально
Правильно, чем больше, тем лучше. На это и был расчёт. Мне довольно часто требуется прокручивать и горизонтально много где, и окна на задних планах.
LonerD wrote:
и то не особо-то исправляется
В чём проблема? Первую опцию ставил? Может, у тебя не последняя версия активна?
LonerD wrote:

Работа с TwinKey была исправлена только только в 1.20, в более ранних версиях прокрутку мышью невозможно было остановить мгновенно.
Уверен? Там совсем другая проблема решалась. Уже с версии 1.96 можно останавливать по любой клавише/кнопке. См. историю.

#434:  Author: LonerDLocation: Донецк PostPosted: Sun Nov 06, 2011 01:13
    —
Quote:
раз просишь включение только в TC

Опционально. Мне, например, достаточно только в Тотале (плюс ещё может в нескольких программах, но не во всех, а только в тех, которые я задам вручную).

Quote:
Уверен? Там совсем другая проблема решалась. Уже с версии 1.96 можно останавливать по любой клавише/кнопке. См. историю

Ранние версии не пробовал. В версии 1.19 - при активном TwinKey и быстрой прокрутке невозможно стандартно быстро остановить прокрутку. В версии 1.20 - уже можно.

#435:  Author: FlasherLocation: Москва PostPosted: Sun Nov 06, 2011 01:25
    —
LonerD wrote:
Опционально. Мне, например, достаточно только в Тотале (плюс ещё может в нескольких программах, но не во всех, а только в тех, которые я задам вручную).
Если опционально, то уже другие и нельзя будет подключать. И речь не только о каких-то приложениях, но и о диалогах, проводнике и программах, к которым нельзя подстраивать опции для окон, не говоря уже о прокрутке заднеплановых окон, что часто требуется для сверки или подстановки.
LonerD wrote:
В версии 1.19 - при активном TwinKey и быстрой прокрутке невозможно стандартно быстро остановить прокрутку. В версии 1.20 - уже можно.
А, с твоей мышкой - возможно. Предыдущие версии по алгоритмике тоже отличаются, и то, что происходит в 1.19, не факт что есть в указанных мной.

#436:  Author: LonerDLocation: Донецк PostPosted: Sun Nov 06, 2011 03:13
    —
Quote:
Если опционально, то уже другие и нельзя будет подключать.

Почему нельзя? Сделать два варианта работы (переключаются в настройках):
1) работать во всех приложениях кроме списка исключений
2) работать только в тех приложениях, в которых задал пользователь.

#437:  Author: FlasherLocation: Москва PostPosted: Sun Nov 06, 2011 03:25
    —
Потому что.
Flasher wrote:
диалогах, проводнике и программах, к которым нельзя подстраивать опции для окон
1) Я предпочитаю работать с исключениями.

#438:  Author: Loopback PostPosted: Mon Nov 07, 2011 13:40
    —
MVV wrote:
Loopback, так что, скоро мир увидит Autorun.wdx с псевдо-переменной AUTORUN_TCARCH?

Да хоть сейчас. Только ничего нового там больше нет.

Версия 1.6 beta 2: Скачать

LonerD wrote:
Попробовал, дело в плагинах (или в новом способе подгрузки плагинов плагином Autorun).

В принципе, сама по себе невозможность переименования каталога с загруженным плагином не является багом.

Однако, если посмотреть Unlocker-ом, то видны открытые дескрипторы, которых по-идее быть не должно. Так что тут есть повод посмотреть.

#439:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Nov 07, 2011 16:17
    —
Loopback wrote:
MVV wrote:
Loopback, так что, скоро мир увидит Autorun.wdx с псевдо-переменной AUTORUN_TCARCH?

Да хоть сейчас. Только ничего нового там больше нет.

Версия 1.6 beta 2: Скачать

Спасибо, работаетSmile

#440:  Author: LonerDLocation: Донецк PostPosted: Mon Nov 07, 2011 16:28
    —
Quote:
В принципе, сама по себе невозможность переименования каталога с загруженным плагином не является багом.

Я не знаю, заметил изменение в работе по сравнению с прошлой версией - и зарепортил.

А как насчёт краха Тотала при закрытии (если программы запущены с параметрами ShellExec /TT /W)? Это считается ошибкой, будет исправляться?

#441:  Author: Loopback PostPosted: Mon Nov 07, 2011 16:54
    —
LonerD wrote:
Это считается ошибкой, будет исправляться?

Считается. Будет ли - если удастся повторить или хотя бы понять причину по косвенным признакам.

Закончу с TCTorrent, начну смотреть.

#442:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Nov 07, 2011 18:52
    —
Loopback, на оффоруме проскочила мысль, что это неплохо бы добавить в autorun.example.cfg:
Code:
If %AUTORUN_TCARCH% == 32 Then
   SetEnv /EV COMMANDER_PROGRAM %COMMANDER_PATH%\TOTALCMD.EXE
Else
   SetEnv /EV COMMANDER_PROGRAM %COMMANDER_PATH%\TOTALCMD64.EXE
EndIf

Считаю это целесообразным (позволяет запускать экзешник тотала юзеркомандами независимо от разрядности тотала). Заодно будет пример использования условного блока.

#443:  Author: FlasherLocation: Москва PostPosted: Mon Nov 07, 2011 19:40
    —
MVV wrote:
Code:
TOTALCMD64.EXE
Считаю это целесообразным
Не вижу этого файла в TC8 32 bit, а также в более ранних версиях. Тогда пример нужно закомментировать и написать условие применения. Хотя там таких примеров можно массу написать. Лучше уж в Ридми.

#444:  Author: Loopback PostPosted: Mon Nov 07, 2011 20:41
    —
MVV wrote:
Считаю это целесообразным (позволяет запускать экзешник тотала юзеркомандами независимо от разрядности тотала). Заодно будет пример использования условного блока.

Вполне можно. Давно думал о хорошем примере, который бы пригодился многим.

Flasher wrote:
Не вижу этого файла в TC8 32 bit, а также в более ранних версиях. Тогда пример нужно закомментировать и написать условие применения. Хотя там таких примеров можно массу написать. Лучше уж в Ридми.

Его отсутствие никак не повлияет на работу в ранних версиях или 32-битной версии тотала, поскольку AUTORUN_TCARCH будет равна 64 только под 64-битным тоталом. Документировать нужно по-любому, но это вполне можно уместить в пару строк комментария.

#445:  Author: FlasherLocation: Москва PostPosted: Mon Nov 07, 2011 20:47
    —
Loopback
Теперь вижу, что переменная только TC касается, а не системы. Тогда я присоединяюсь.
С правами юзера примерчик тоже бы не помешал.

#446:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 09, 2011 11:19
    —
Loopback, тут товарищ с оффорума сообщает об ошибках в LNG-файле:
tbeu wrote:
There are some typos in the English translation
Code:
retreiving -> retrieving
Library have not such function -> has
"%s" keyword have not opening "If" -> has

#447:  Author: Loopback PostPosted: Wed Nov 09, 2011 12:42
    —
MVV
Даа, "retreiving" - это у меня вечная ошибка Very Happy

Да и с остальным инглишем не идеально. Исправлю.

#448:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 09, 2011 12:44
    —
Можно в ворде проверку орфографии включитьSmile или в перводчик запихать - если что-то не переведёт, скорее всего ошибкаSmile

Так получилось, что у плагина теперь есть страничка на оффоруме, можно указать её в Readme. По вопросам коррекции содержания первого поста обращайся. Кстати, в английском описании на totalcmd.net тоже есть кой-какие ошибки.

#449:  Author: LonerDLocation: Донецк PostPosted: Thu Nov 10, 2011 03:56
    —
Можно ли прописать каким-то образом проверку запущен ли процесс/программа или нет, и если запущено, то не запускать повторно?
Что-то наподобие:
If программа ещё не запущена Then
запустить программу
EndIf

#450:  Author: FlasherLocation: Москва PostPosted: Thu Nov 10, 2011 04:45
    —
Пока нет.

#451:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Nov 10, 2011 10:04
    —
Плагин написать надо, чтобы позволял делать проверку на запущенность процесса. В ShellExec такой функции действительно не место.

#452:  Author: FlasherLocation: Москва PostPosted: Thu Nov 10, 2011 22:56
    —
MVV wrote:
Плагин написать надо, чтобы позволял делать проверку на запущенность процесса. В ShellExec такой функции действительно не место.
Если не место, то как этот плагин будет взаимодейтсвовать с ShellExec, с помощью которого запускается программа/скрипт?

#453:  Author: Loopback PostPosted: Fri Nov 11, 2011 09:29
    —
Flasher wrote:
Если не место, то как этот плагин будет взаимодейтсвовать с ShellExec, с помощью которого запускается программа/скрипт?

Стандартная конструкция, что-нибудь типа "If ProcessExists() Then" (собственно, как и написал LonerD). Т.е. проверяется наличие процесса, и если его нет - выполняется запуск.

#454:  Author: FlasherLocation: Москва PostPosted: Fri Nov 11, 2011 10:36
    —
А что писать в ProcessExists? PID мы не знаем. Знаем путь к файлу, имя, класс. А нам не во всех случаях нужно, допустим, учитывать процессы копий. Как тут? И если это скрипт, работающий через постредника, то как и что указывать?
Если указывать путь, то нужно бы сделать так, чтобы не делать это дважды, т.е. в обеих командах ProcessExists/ShellExec. Хотя указывать путь - это не решение для копий TC.

#455:  Author: Loopback PostPosted: Fri Nov 11, 2011 12:50
    —
Flasher wrote:
А что писать в ProcessExists?

Имя процесса.
Flasher wrote:
А нам не во всех случаях нужно, допустим, учитывать процессы копий.

Не понял.
Flasher wrote:
Если указывать путь, то нужно бы сделать так, чтобы не делать это дважды, т.е. в обеих командах ProcessExists/ShellExec.

Не вижу тут ничего ужасного. Нормальная практика для скриптинга. Если что - есть переменные.

#456:  Author: FlasherLocation: Москва PostPosted: Fri Nov 11, 2011 20:24
    —
Loopback wrote:
Не понял.
У нас запущено некое приложение, вызываемое по ShellExec. Нам нужно, чтобы копии программ запускались только тогда, когда не запущено ни одной копии TC. Т.е. если другая копия TC уже запущена, то копию программы открывать надо.

Loopback wrote:
Если что - есть переменные.
Точно.

По скриптам не ответил.


Last edited by Flasher on Fri Nov 11, 2011 20:55; edited 1 time in total

#457:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Nov 11, 2011 20:42
    —
Flasher wrote:
Loopback wrote:
Не понял.
У нас запущено некое приложение, вызываемое по ShellExec. Нам нужно, чтобы копии программ запускались всегда кроме случаев, когда не запущено не одной копии TC. Т.е. если другая копия TC уже запущена, то копию программы открывать надо.

То есть, для первого запущенного тотала программу запускать не надо? А для второго, третьего, десятого и т.п. - надо? Rolling Eyes

Если надо учитывать число процессов с таким именем, функция плагина вполне может возвращать число таких процессов.

#458:  Author: FlasherLocation: Москва PostPosted: Fri Nov 11, 2011 20:46
    —
Я вроде ясно написал.
Flasher wrote:
если другая копия TC уже запущена, то копию программы открывать надо
Значит, программа запущена, а Тотал только вот запускается и проверяет не запущена ли уже копия ТС. Если запущена, то запускать копию программы, и наоборот.

#459:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Nov 11, 2011 20:55
    —
Ну я вроде так и написал. Первый тотал программу запускать не будет, т.к. он первый, а второй, третий, десятый - будут.

#460:  Author: FlasherLocation: Москва PostPosted: Fri Nov 11, 2011 20:56
    —
MVV
Да, но ты не написал об условии запущенности самой программы.

#461:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Nov 11, 2011 20:58
    —
Это условие можно отделить, оно не влияет на остальное. В предложении, которое начинается с "Нам нужно", оно не фигурирует, поэтому может быть вынесено во внешний условный блок.

#462:  Author: FlasherLocation: Москва PostPosted: Fri Nov 11, 2011 21:02
    —
MVV wrote:
В предложении, которое начинается с "Нам нужно", оно не фигурирует
Ну и что? В контексте то фигурирует.
MVV wrote:
может быть вынесено во внешний условный блок
Это понятно, но это не значит, что его не нужно учитывать.

#463:  Author: LonerDLocation: Донецк PostPosted: Fri Nov 11, 2011 22:52
    —
Я тут встряну в диалог и напомню о своей ошибке с закрыванием Тотала 1.6 беты если в настройках прописан запуск программ ShellExec /TT /W.

Сейчас примерно такой же баг (ошибка при закрытии тотала и шизофреничное поведение мыши при этом) словил в Win7x64 и на предыдущих версиях (1.5, 1.4 последняя бета) в случае если указанный ехе файл не существует.
Строка запуска выглядит так:
ShellExec /TT /W "%commander_path%\Plugins\exe\Program.exe" "" "%commander_path%\Plugins\exe\"
Но самого файла Program.exe не существует.
Тотал крашится. Может, инфа как-то поможет исправить баг.

#464:  Author: FlasherLocation: Москва PostPosted: Fri Nov 11, 2011 23:50
    —
LonerD, а зачем задавать рабочую папку, если путь к файлу и так указан?

#465:  Author: Loopback PostPosted: Sat Nov 12, 2011 14:30
    —
LonerD wrote:
Я тут встряну в диалог и напомню о своей ошибке с закрыванием Тотала 1.6 беты если в настройках прописан запуск программ ShellExec /TT /W.

Вовсе необязательно напоминать об этом на каждой странице Smile Говорил же - займусь после релиза TCTorrent.

Попробуй эту версию.

Похоже, с новым компилятором, функции OpenProcess почему-то внезапно перестало хватать привилегий...
LonerD wrote:
в случае если указанный ехе файл не существует.

Это вероятнее всего другое. Но тут достаточно очевидный баг, тоже исправил.

#466:  Author: LonerDLocation: Донецк PostPosted: Sun Nov 13, 2011 04:57
    —
Quote:
а зачем задавать рабочую папку, если путь к файлу и так указан?

по привычке так прописал.

Loopback
Quote:
Вовсе необязательно напоминать об этом на каждой странице

Подумал - может найденный баг с несуществующими путями поможет добраться до сути ошибки.

Quote:
Попробуй эту версию.

За полдня предыдущие ошибки не возникли.
Зато появилась новая - Тотал схлопывается при нажатии Shift+вверх.

#467:  Author: Loopback PostPosted: Sun Nov 13, 2011 14:52
    —
LonerD wrote:
Подумал - может найденный баг с несуществующими путями поможет добраться до сути ошибки.

Помог, но только до другой Smile

LonerD wrote:
Зато появилась новая - Тотал схлопывается при нажатии Shift+вверх.

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

#468:  Author: LonerDLocation: Донецк PostPosted: Sun Nov 13, 2011 16:49
    —
Quote:
Не могу повторить.

Извиняюсь, это у меня горячие клавиши сбились, в плагине действительно нет ошибки.

#469:  Author: LonerDLocation: Донецк PostPosted: Mon Nov 14, 2011 00:14
    —
Я чего-то опять перемудрил у себя или в версиях 1.5-1.6 действительно отвалились пользовательские команды?
CommandExec em_...

#470:  Author: Loopback PostPosted: Mon Nov 14, 2011 11:07
    —
LonerD wrote:
Я чего-то опять перемудрил у себя или в версиях 1.5-1.6 действительно отвалились пользовательские команды?

В версии 1.5 всё вроде работает, а в 1.6 действительно отвалились - опять проблемы перехода на юникод. Исправил.

Скачать 1.6 beta 3

+ добавлен пример использования условного блока в autorun.example.cfg
- исправлены ошибки в файле перевода
- исправлена нерабочая команда CommandExec
- исправлено падение при выходе с ключами T/TT в ShellExec

#471:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Nov 14, 2011 11:21
    —
Loopback, исправь в autorun.example.cfg строку The block below is set COMMANDER_PROGRAM environment variable на The block below sets COMMANDER_PROGRAM environment variable. Кроме того, ошибки в LNG-файле так и остались (сам файл не изменился с беты 2 - забыл заменить?). Плюс, можно добавить в LNG-файл немецкую локализацию отсюда.

#472:  Author: Loopback PostPosted: Mon Nov 14, 2011 12:59
    —
MVV
Точно, изменил, но забыл добавить. Добавил также немецкий перевод, обновил архив.

#473:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Nov 14, 2011 14:15
    —
Кстати, ещё поправки:
Code:
5=Missing closing quote for string: %s

(missing, не -ed)

Code:
16=Library has no such function: %s
20="%s" keyword has no opening "If"

(no, не not)

Code:
18=Operator is not applicable here: %s

#474:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 14, 2012 20:56
    —
Просьба добавить в плагин ключ, который проверяет - запущена ли уже заданная программа, и если процесс висит в памяти (то есть программа уже запущена) - не пытаться запускать её снова (и в то же время не пытаться убивать этот запущенный процесс при выходе из Тотала если задан ключ ТТ).
То есть если программа с таким именем не была запущена до запуска Тотала - нужно запустить её и убить при выходе из Тотала. Если программа была уже запущена до запуска Тотата - тогда никаких действий не производить.

Возможны два варианта проверок - просто по имени процесса и по месторасположению запускаемого файла, то есть в идеале неплохо бы добавить два ключа запуска, но лично мне пока что не хватает только проверки имени запущенного процесса.

Дело в том, что некоторые программы если пытаться запустить их дважды - или запускают вторую копию, или вообще выбивают предупредительное сообщение "одна копия уже запущена".

#475:  Author: FlasherLocation: Москва PostPosted: Sat Jan 14, 2012 21:04
    —
LonerD
Повторяемся?

#476:  Author: Andrey_ALocation: Сочи PostPosted: Sat Jan 14, 2012 21:23
    —
LonerD wrote:
Просьба добавить в плагин ключ, который проверяет - запущена ли уже заданная программа, и если процесс висит в памяти (то есть программа уже запущена) - не пытаться запускать её снова (и в то же время не пытаться убивать этот запущенный процесс при выходе из Тотала если задан ключ ТТ).

Я присоединяюсь к просьбе

#477:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 14, 2012 21:33
    —
Quote:
Повторяемся?

Скорее напоминаем, более подробно сформулировав пожелание.

И ещё вопрос - так и не понял работу LoadFont.
LoadFont [/N] <font name>
Пробую:
LoadFont /N "%commander_path%\Install\1.ttf"
LoadFont /N Plugins\1.ttf
Шрифта нету.
Судя по ридми-файлу - нужно указывать не имя файла шрифта, а font name - имя шрифта. Тогда непонятно - где плагин его искать будет, по какому пути?

#478:  Author: FlasherLocation: Москва PostPosted: Sat Jan 14, 2012 22:03
    —
LonerD wrote:
Скорее напоминаем, более подробно сформулировав пожелание.
Ты там по моей ссылке ходил, ответ автора касаемо добавления ключей читал?

LonerD wrote:
Пробую:
LoadFont /N "%commander_path%\Install\1.ttf"
А /EV где?

#479:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 14, 2012 22:11
    —
Quote:
А /EV где?

Нету, потому как такого ключа у LoadFont нету, а если и добавить /EV - выкидывает ошибку.

Quote:
Ты там по моей ссылке ходил, ответ автора касаемо добавления ключей читал?

Это было почти три месяца назад.
Можно пока перегрузить ShellExec ключами (не все ведь их будут использовать), можно ввести новую команду не (ShellExec, а по другому назвать), можно сделать условие сравнения. А если найдётся более элегантное решение - то потом переделать.


Last edited by LonerD on Sat Jan 14, 2012 22:17; edited 1 time in total

#480:  Author: FlasherLocation: Москва PostPosted: Sat Jan 14, 2012 22:15
    —
LonerD
Тогда пиши путь относительно папки плагина.

#481:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 14, 2012 22:20
    —
Quote:
Тогда пиши путь относительно папки плагина.

Я уже как только не пробовал, после чего задал вопрос здесь. Может автор прояснит или тот, кто пользуется этой функцией.
Тем более сказано в ридми - что писать надо не путь к файлу, а Font Name (то есть имя шрифта).

#482:  Author: FlasherLocation: Москва PostPosted: Sat Jan 14, 2012 22:29
    —
LonerD
Вообще-то я раньше проверял эту команду, всё работало.
Обрати внимание, что в ряде команд автор написал в синтаксисе "имя/name", не указав, что может быть использован путь, это вовсе не исключает самой возможности.
И, кстати, не имя шрифта надо было писать, а - имя файла шрифта.

#483:  Author: LonerDLocation: Донецк PostPosted: Sat Jan 14, 2012 22:31
    —
Разобрался. Надо указывать путь к файлу относительно папки Тотала.
Например, если файл шрифта лежит в подпапке Install папки Тотала, то путь должен быть:
LoadFont /N Install\MyFont.ttf

#484:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Sep 10, 2012 11:00
    —
If %AUTORUN_OSVERSION% == WIN_XP Then
SetEnv COMMANDER_OSVER "Windows XP"
ElseIf %AUTORUN_OSVERSION% == WIN_2003 Then
SetEnv COMMANDER_OSVER "Windows Server 2003"
ElseIf %AUTORUN_OSVERSION% == WIN_VISTA Then
SetEnv COMMANDER_OSVER "Windows Vista"
ElseIf %AUTORUN_OSVERSION% == WIN_2008 Then
SetEnv COMMANDER_OSVER "Windows Server 2008"
ElseIf %AUTORUN_OSVERSION% == WIN_2008R2 Then
SetEnv COMMANDER_OSVER "Windows Server 2008R2"
ElseIf %AUTORUN_OSVERSION% == WIN_7 Then
SetEnv COMMANDER_OSVER "Windows Seven"
ElseIf %AUTORUN_OSVERSION% == WIN_UNKNOWN Then
SetEnv COMMANDER_OSVER "MS Windows"
EndIf

подскажите, что здесь неправильно?.
как сделать такое условие, чтобы правильно определилась версия ОС?.
сейчас условие сравнения срабатывает самое первое, даже на WIN7, и определяет как WinXP (потому что она первая в блоке)
помогите пожалуста разобратся

#485:  Author: LonerDLocation: Донецк PostPosted: Tue Sep 11, 2012 20:43
    —
У меня не получилось тоже. Игрался с кавычками, пробелами, ничего не дало. Упростил конструкцию; на семёрке стабильно даёт значение WindowsXP.
Code:
If %AUTORUN_OSVERSION% == WIN_XP Then
SetEnv COMMANDER_OSVER WindowsXP
Else SetEnv COMMANDER_OSVER MSWindows
EndIf

А вот такая
If %AUTORUN_OSVERSION% != WIN_XP Then
SetEnv COMMANDER_OSVER WindowsXP
Else SetEnv COMMANDER_OSVER MSWindows
EndIf
вообще не добавляет переменную.


Last edited by LonerD on Tue Sep 11, 2012 23:15; edited 4 times in total

#486:  Author: FlasherLocation: Москва PostPosted: Tue Sep 11, 2012 22:05
    —
LonerD wrote:
вообще не добавляет переменную.
Конечно, ты же команду на одной строке с Else написал. См. как в ридми.

#487:  Author: LonerDLocation: Донецк PostPosted: Tue Sep 11, 2012 23:13
    —
Quote:
См. как в ридми.

А, ну да. Я уже по-всякому пробовал, дошёл и до таких извратов ))

#488:  Author: Loopback PostPosted: Wed Sep 12, 2012 14:48
    —
KopBuH
LonerD
Это была ошибка при сравнении строк. Впрочем, даже если бы они сравнивались правильно, то всё испортила бы ошибка в коде определения версии...

Исправленная версия: wdx_autorun_1.6_beta4.zip

#489:  Author: LonerDLocation: Донецк PostPosted: Wed Sep 12, 2012 15:36
    —
Loopback
Теперь нормально отрабатывает. Спасибо.
А WIN_8 ещё не поддерживается? (в документации нету упоминания).

#490:  Author: FlasherLocation: Москва PostPosted: Wed Sep 12, 2012 16:07
    —
Loopback, при установке:
Quote:
---------------------------
wdx_autorun_1.6_beta4.zip
---------------------------
Этот архив содержит следующий плагин/аддон для Total Commander:

Total Commander. ****** , . , !



Вы хотите установить его?
---------------------------
Да Нет
---------------------------

У меня локализация ТС в юникоде.

#491:  Author: Loopback PostPosted: Thu Sep 13, 2012 13:17
    —
LonerD wrote:
Loopback
Теперь нормально отрабатывает. Спасибо.
А WIN_8 ещё не поддерживается? (в документации нету упоминания).

Нет, но думаю несложно будет добавить.

Flasher
Не понял в чем проблема.

#492:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Sep 13, 2012 16:35
    —
Flasher, если у тебя локаль не 1251, то конечно ты не увидишь строку, написанную в ASCII.

#493:  Author: FlasherLocation: Москва PostPosted: Thu Sep 13, 2012 17:21
    —
Loopback wrote:
Не понял в чем проблема.
Я же красным выделил.

MVV, локаль системы? Русская.

#494:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Sep 13, 2012 17:33
    —
Хм, а действительно, если в LNG-файле стоит codepage=65001, эта строка нечитаема. Но это скорее баг тотала.

#495:  Author: FlasherLocation: Москва PostPosted: Thu Sep 13, 2012 17:58
    —
MVV
Ага, я с этим давно мучаюсь. Что-то показывает нормально, а что-то нет. Сообщишь Гислеру? Хотя там не только с этим проблема при юникодизации.

#496:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Sep 14, 2012 14:13
    —
спасибо, теперь всё работает)
вот бы еще проверку ServicePack'а прикрутили Rolling Eyes

#497:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Oct 14, 2012 17:33
    —
есть еще одна вещь, которую хотелось бы видеть в плагине:
это переменная с PID текущего процесса TotalCmd.exe.

#498:  Author: Loopback PostPosted: Tue Oct 16, 2012 12:22
    —
KopBuH wrote:
вот бы еще проверку ServicePack'а прикрутили

Специализированной функции точно не будет. Скорее что-нибудь универсальное для чтения реестра.
KopBuH wrote:
есть еще одна вещь, которую хотелось бы видеть в плагине:
это переменная с PID текущего процесса TotalCmd.exe.

Можно, по аналогии с AUTORUN_TCHANDLE.

#499:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Tue Oct 16, 2012 12:27
    —
Loopback wrote:

Можно, по аналогии с AUTORUN_TCHANDLE.

ура Smile Ждем следующей бетки.

#500:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Tue Oct 23, 2012 09:10
    —
заметил еще такой глюк:

autorun.cfg
# Проверка архитектуры ОС
If %AUTORUN_OSARCH% == 64 Then
SetEnv COMMANDER_OSARCH x64
ElseIf %AUTORUN_OSARCH% == 32 Then
SetEnv COMMANDER_OSARCH x86
EndIf

на Win8 x64 Pro все равно определяет битность ОС как x86
ну, и конечно хорошо бы добавить определение Win8
%AUTORUN_OSVERSION% == WIN_8

#501:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Oct 23, 2012 09:52
    —
Думаю, пора уже выносить эту кучу псевдопеременных в подплагин, чтобы не надо было каждый раз обновлять сам плагин, чтобы добавить новую или исправить имеющиеся... Там их, кстати, можно даже сделать обычными переменными окружения, с которыми потом можно будет работать далее.

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

А насчёт AUTORUN_OSVERSION - надо сделать, чтобы переменная возвращала числовое значение версии, если не может его опознать (например, 6.2W для рабочей станции, или 6.2S для серверной). Тогда этим можно будет пользоваться на неизвестных версиях винды (глядишь, через годик Windows 9 выпустят... сейчас мода пошла на накрутку номеров версий).

#502:  Author: Loopback PostPosted: Wed Oct 24, 2012 18:25
    —
MVV wrote:
Думаю, пора уже выносить эту кучу псевдопеременных в подплагин, чтобы не надо было каждый раз обновлять сам плагин, чтобы добавить новую или исправить имеющиеся... Там их, кстати, можно даже сделать обычными переменными окружения, с которыми потом можно будет работать далее.

Все эти переменные, за исключением, может, версии винды - одна-две строчки кода, и эти данные так или иначе используются плагином. Нет смысла делать еще дополнительные плагины для этого. Модульность, конечно, хорошо, но до разумных пределов.

Если будет нужно организовать действительно что-то сложное, а главное - малоиспользуемое, то можно и задуматься о плагине.

MVV wrote:
И вообще, не надо плодить псевдопеременные. К псевдопеременным нужно прибегать только в случае, когда они возвращают различное значение в зависимости от определенных условий (например, случайное число - каждый раз новое значение). Если же значение переменной неизменно (версия винды, например - она явно не изменится, пока тотал запущен), спокойно можно добавить её как обычную переменную окружения, головной боли в разы меньше.

Если бы плагин работал напрямую с переменными окружения (как батник), это имело бы смысл. Но он оперирует переменными.

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

MVV wrote:
А насчёт AUTORUN_OSVERSION - надо сделать, чтобы переменная возвращала числовое значение версии, если не может его опознать (например, 6.2W для рабочей станции, или 6.2S для серверной). Тогда этим можно будет пользоваться на неизвестных версиях винды (глядишь, через годик Windows 9 выпустят... сейчас мода пошла на накрутку номеров версий).

Вот с этим согласен. Вместо UNKNOWN вполне можно выводить числовое значение.

#503:  Author: sEXEcutor PostPosted: Thu Oct 25, 2012 21:54
    —
В некоторых внутренних ассоциациях я пользуюсь командой "%COMMANDER_EXE%" /S=L "%1" для открытия файла в Листере. Как оказалось, ShellExec срабатывает каждый раз, когда Листер вызывается таким образом. Можно ли добавить проверку, чтобы не вызывать ShellExec повторно во время одной сессии TC?

#504:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 26, 2012 09:40
    —
Откуда же плагин может знать, с какой целью запущен тотал?

Создай второй wincmd.ini без плагинов (разве что листерные оставь) и запускай второй экземпляр тотала с этим INI с помощью ключа /i=путь_к_ini. Чем меньше лишнего будет в этом конфиге, тем быстрее будет открываться этот отдельный листер.

Можешь даже для секции ListerPlugins в альтернативном конфиге редирект сделать на основной wincmd.ini, тогда плагины всегда будут одни и те же. Думаю, такого конфига вполне хватит (поправь путь к основному конфигу, если у тебя другой):
Code:
[Configuration]
AlternateUserIni=%COMMANDER_PATH%\wincmd.ini
[ListerPlugins]
RedirectSection=%COMMANDER_PATH%\wincmd.ini

#505:  Author: sEXEcutor PostPosted: Fri Oct 26, 2012 14:59
    —
MVV wrote:
Откуда же плагин может знать, с какой целью запущен тотал?

Разве из плагина нельзя видеть параметры, с которыми запущен TC?

Так или иначе, RedirectSection хороший вариант, спасибо.

#506:  Author: FlasherLocation: Москва PostPosted: Sat Oct 27, 2012 13:08
    —
sEXEcutor
Можно также открывать через программу Lister.exe, а если не отдельным процессом, то так.

#507:  Author: Loopback PostPosted: Tue Oct 30, 2012 13:01
    —
Пятая бета.

Скачать

В этой версии поменялся API плагинов. Теперь можно добавлять переменные и функции, возвращающие результат. Наверняка, он еще будет меняться. Также добавил исходник тестового плагина.

Сделана эта версия была довольно давно, и долгое время проработала у меня без проблем, но все же вполне могут быть новые косяки.

KopBuH
Определение восьмерки добавил. Но проверить архитектуру пока не могу за отсутствием установленной восьмерки.

#508:  Author: Loopback PostPosted: Thu Nov 01, 2012 17:15
    —
KopBuH wrote:
заметил еще такой глюк:

Поставил восьмерку (x64 Pro) в виртуалку. Опуская лирику (по большей части матерную) касаемо нового интерфейса, могу сказать, что косяк не наблюдаю, все определяется верно.

#509:  Author: Loopback PostPosted: Wed Nov 07, 2012 16:42
    —
Шестая бета.

Скачать

Что нового:
Code:

+ возможность использования полноценных условий сравнения
+ возможность использования специальных функций в сравнении
+ плагин Process (работа с процессами)
* изменения в языковом файле


Второй и третий пункты подразумевают добавление востребованного функционала по определению запущенности процесса.

#510:  Author: Loopback PostPosted: Thu Nov 08, 2012 18:03
    —
Седьмая бета.

Скачать

Изменения:
Code:

+ возможность выполнения действий при закрытии TC
+ добавлена функция ProcessTerminate в плагин Process
+ файл конфигурации может быть ANSI или UTF-16(LE).
- исправлена проблема с ShellExec в определенных условиях

#511:  Author: ask-rusLocation: Russian Federation PostPosted: Thu Nov 08, 2012 18:06
    —
Loopback wrote:
+ возможность выполнения действий при закрытии TC

Ух ты! Как вовремя, спасибо.

#512:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Nov 09, 2012 15:11
    —
Loopback:
спасибо, теперь всё работает и в Win8 с таким кодом:

# Проверка версии ОС
If %AUTORUN_OSVERSION% = WIN_XP Then
SetEnv COMMANDER_OSVER "Windows XP"
ElseIf %AUTORUN_OSVERSION% = WIN_2003 Then
SetEnv COMMANDER_OSVER "Windows Server 2003"
ElseIf %AUTORUN_OSVERSION% = WIN_VISTA Then
SetEnv COMMANDER_OSVER "Windows Vista"
ElseIf %AUTORUN_OSVERSION% = WIN_2008 Then
SetEnv COMMANDER_OSVER "Windows Server 2008"
ElseIf %AUTORUN_OSVERSION% = WIN_2008R2 Then
SetEnv COMMANDER_OSVER "Windows Server 2008R2"
ElseIf %AUTORUN_OSVERSION% = WIN_7 Then
SetEnv COMMANDER_OSVER "Windows Seven"
ElseIf %AUTORUN_OSVERSION% = WIN_8 Then
SetEnv COMMANDER_OSVER "Windows 8"
ElseIf %AUTORUN_OSVERSION% = WIN_2012 Then
SetEnv COMMANDER_OSVER "Windows Server 2012"
Else
SetEnv COMMANDER_OSVER "%AUTORUN_OSVERSION%"
EndIf


P.S. (для людей) Если оставить условие сравнения по старому, то есть:
If %AUTORUN_OSVERSION% == WIN_XP Then
то при запуске ТС будет закрыватся с ошибкой.
при переходе на 7 бету увидел, что теперь сравнение производится одним знаком "равно", то есть так:
If %AUTORUN_OSVERSION% = WIN_XP Then

#513:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Nov 09, 2012 18:56
    —
Тотал закрывается с ошибкой? Или просто модуль пишет ошибку, но тотал работает? По логике модуль должен сообщить об ошибке, но не закрывать тотал.

Кстати, из DllMain вызывать MessageBox нельзя, может случиться, что его невозможно закрыть.

#514:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Nov 10, 2012 08:52
    —
если в конфиге оставить условие сравнения по старому, то есть символом ==, то при запуске ТС выдает такое:

версия ТС 8.01 Final.

#515:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 10, 2012 21:11
    —
Loopback
Я не уверен, что у меня выполняется некоторая команда... Замечаний не будет?
Code:
ShellExec %COMMANDER_PATH%\PLUGINS\Tools\TCFS2\TCFS2.exe /ef "set_tcini(TCFS2, Bar, 1)"

#516:  Author: FlasherLocation: Москва PostPosted: Sat Nov 10, 2012 21:20
    —
Замечания очевидны:
Quote:
ShellExec "%COMMANDER_PATH%\PLUGINS\Tools\TCFS2\TCFS2.exe" "/ef set_tcini(TCFS2,Bar,1)"

#517:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 10, 2012 21:41
    —
Flasher wrote:
Замечания очевидны:

TCFS2 так не работает, а вот так тем более:
Quote:
ShellExec "%COMMANDER_PATH%\PLUGINS\Tools\TCFS2\TCFS2.exe" "/ef "set_tcini(TCFS2,Bar,1)""

#518:  Author: FlasherLocation: Москва PostPosted: Sat Nov 10, 2012 21:45
    —
Так, стоп, а при чём тут TCFS2, когда есть команда IniWrite, её и использовать.

#519:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 10, 2012 21:46
    —
Если надо в параметрах запуска TCFS2 (и т.д.) писать кавычки, вместо внешних кавычек надо указывать апострофы - это написано в справке по Autorun.
Quote:
Если в параметре команды должен использоваться пробел, оберните параметр в кавычки - двойные или одинарные. При этом кавычки другого типа могут быть использованы в тексте параметра. Смешанные кавычки в тексте не поддерживаются.

Т.е.:
Code:
ShellExec '%COMMANDER_PATH%\PLUGINS\Tools\TCFS2\TCFS2.exe' '/ef "set_tcini(TCFS2,Bar,1)"'


Last edited by MVV on Sat Nov 10, 2012 21:50; edited 1 time in total

#520:  Author: FlasherLocation: Москва PostPosted: Sat Nov 10, 2012 21:48
    —
MVV
У меня мои команды с TCFS2 работают и с обычными кавычками. Апострофы тоже используются, только для скриптов AutoIt/AHK. Кстати, в твоей команде кавычки лишние (там не пробелов).

#521:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 10, 2012 21:52
    —
Знаю, что нет пробелов, но это пример, показывающий, как правильно использовать кавычки. И потом, худым не будет заключать каждую команду в кавычки - вдруг случайно поставишь пробел после запятой в списке параметров...

Вот завалялся ещё один пример использования кавычек разного типа:
Code:
ShellExec /SW_HIDE /EV "reg.exe" 'export "HKEY_CURRENT_USER\Environment" "%commander_path%\Data\Total.reg"'

#522:  Author: FlasherLocation: Москва PostPosted: Sat Nov 10, 2012 21:56
    —
Пример команды, которая давно и исправно работает без апострофов:
Code:
ShellExec "%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe" "/d=0 /ei run redraw"

MVV wrote:
вдруг случайно поставишь пробел
Копипаст избавляет от случайностей. Wink

Last edited by Flasher on Sat Nov 10, 2012 21:56; edited 1 time in total

#523:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 10, 2012 21:56
    —
Команда с апострофами работает, и проблема исчезла.

#524:  Author: FlasherLocation: Москва PostPosted: Sat Nov 10, 2012 22:03
    —
Ну, неужели лень-матушка и в такой мелочёвке свою роль сыграла?
Code:
IniWrite /EV %COMMANDER_INI% TCFS2 Bar 1

#525:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 10, 2012 22:24
    —
Плагином грузил библиотеки, да шрифты - не вникал во всю его суть (апострофы, IniWrite), сомневался в TCFS2, в себе, нужно ли было выжидать 15 секунд, когда выгрузятся копии в Диспетчере или ещё что-нибудь.

#526:  Author: Loopback PostPosted: Mon Nov 12, 2012 14:23
    —
KopBuH
Действительно есть проблема, буду смотреть. Уж падать-то точно не должен.

#527:  Author: Loopback PostPosted: Wed Nov 14, 2012 15:08
    —
Восьмая бета, только исправления ошибок.

Скачать

Code:
- исправлены неправильные номера строк в сообщениях об ошибках
- исправлено падение при использовании == в сравнении

#528:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Thu Nov 15, 2012 08:37
    —
заметил еще один интересный глюк:
код из конфига:
Code:
IniRead RemoteAdminName "%COMMANDER_INI%" "RemoteAdministration" "RemoteAdminName" "Администратор"
IniRead RemoteAdminPWD "%COMMANDER_INI%" "RemoteAdministration" "RemoteAdminPwd" "0"

SetEnv /EV COMMANDER_ADMINNAME "%RemoteAdminName%"
SetEnv /EV COMMANDER_ADMINPWD "%RemoteAdminPwd%"

код из wincmd.ini:
Code:
[RemoteAdministration]
RemoteAdminName=
RemoteAdminPwd=

как видите, ключи в ini-файле стоят пустые, а в переменной RemoteAdminName по умолчанию стоит "Администратор"
теперь, при загрузке ТС, получаем это:
Скриншот

если удалить ключи из ini-файла, то всё работает:
Скриншот

что я делаю неправильно?, быть может если ключи пустые, то лучше чтобы плагин писал в переменной ключи по умолчанию?
и еще было бы неплохо установки ключей по умолчанию из переменной, например:
Code:
IniRead RemoteAdminName "%COMMANDER_INI%" "RemoteAdministration" "RemoteAdminName" "%USERNAME%"

 !  Avada:
Неформатные картинки заменены ссылками, текст преобразован в код. Читаем правила форума и впредь проверяем через предварительный просмотр результаты внедрения картинок. Также прошу обратить внимание, как на форуме принято оформлять фрагменты кода. И заодно отмечу, что читать посты при использовании в начале фраз заглавных букв значительно приятнее.

#529:  Author: FlasherLocation: Москва PostPosted: Thu Nov 15, 2012 11:20
    —
KopBuH
RemoteAdminName - это не внутренняя переменная, её заключать в % не надо. И, кстати, кавычки в командах вообще не нужны.

#530:  Author: Loopback PostPosted: Thu Nov 15, 2012 11:43
    —
KopBuH
Если ключ есть - он есть, неважно, какое у него значение. В данном случае есть ключ с пустым значением, следовательно, считываться должно оно.

Другое дело, что функция SetEnv не позволяет создавать переменные окружения с пустым значением, поскольку Windows не допускает создания пустых переменных окружения.

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

Code:

If %RemoteAdminName% = "" Then
  SetEnv /EV COMMANDER_ADMINNAME "Администратор"
Else
  SetEnv /EV COMMANDER_ADMINNAME "%RemoteAdminName%"
EndIf


Last edited by Loopback on Thu Nov 15, 2012 14:17; edited 1 time in total

#531:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Thu Nov 15, 2012 14:11
    —
Flasher wrote:
KopBuH
RemoteAdminName - это не внутренняя переменная, её заключать в % не надо. И, кстати, кавычки в командах вообще не нужны.


заключать её надо, в соотствии с созданием выше внутренней переменной:
Code:
IniRead RemoteAdminName "%COMMANDER_INI%" "RemoteAdministration" "RemoteAdminName" "Администратор"


полный код из поста выше:
Code:
IniRead RemoteAdminName "%COMMANDER_INI%" "RemoteAdministration" "RemoteAdminName" "Администратор"
IniRead RemoteAdminPWD "%COMMANDER_INI%" "RemoteAdministration" "RemoteAdminPwd" "0"

SetEnv /EV COMMANDER_ADMINNAME "%RemoteAdminName%"
SetEnv /EV COMMANDER_ADMINPWD "%RemoteAdminPwd%"

Flasher
или все таки я не прав?

Добавлено спустя 7 минут:

Loopback wrote:
KopBuH
Если ключ есть - он есть, неважно, какое у него значение. В данном случае есть ключ с пустым значением, следовательно, считываться должно оно.

да, оно считывается. посколько при удалении ключа из ini-файла происходит подставка значений по умолчанию.

Loopback wrote:

Другое дело, что функция SetEnv не позволяет создавать переменные с пустым значением, поскольку Windows не допускает создания пустых переменных окружения.

а можно сделать, что если значение пустое, то переменная создавалась со значением по умолчанию, а не с именем самой переменной?.

P.S.:
а можно в таком сравнении, которое вы указали выше, вместо конкретного "Администратор" использовать глобальную переменную, например %USERNAME%?

#532:  Author: Loopback PostPosted: Thu Nov 15, 2012 14:28
    —
KopBuH wrote:
а можно сделать, что если значение пустое, то переменная создавалась со значением по умолчанию, а не с именем самой переменной?.

Можно все, но идеологически это неправильно. Set и SetEnv - это по-сути присваивание, а присваиваем мы что-то заранее известное. Для проверки есть условия.

KopBuH wrote:
а можно в таком сравнении, которое вы указали выше, вместо конкретного "Администратор" использовать глобальную переменную, например %USERNAME%?

Разумеется, любые существующие переменные, внутренние или окружения.

#533:  Author: FlasherLocation: Москва PostPosted: Thu Nov 15, 2012 22:17
    —
KopBuH wrote:
или все таки я не прав?
Нет. Переменная изначально объявлялась без %, в том же виде она должна быть использована в других командах.

#534:  Author: Loopback PostPosted: Fri Nov 16, 2012 11:15
    —
KopBuH
Flasher
Насчет переменных правила просты: если переменная устанавливается (Set, SetEnv, IniRead), то ее имя пишется без %, во всех остальных местах, т.е. там где она читается - % обязательны.

#535:  Author: FlasherLocation: Москва PostPosted: Fri Nov 16, 2012 15:40
    —
Loopback
Так в SetEnv читаем или устанавливаем?

#536:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Nov 17, 2012 08:31
    —
Flasher wrote:
Loopback
Так в SetEnv читаем или устанавливаем?

насколько знаю, читаем внутреннею переменную, а устанавливаем переменную окружения (внешнюю).

Добавлено спустя 4 минуты:

Loopback wrote:
KopBuH
Flasher
Насчет переменных правила просты: если переменная устанавливается (Set, SetEnv, IniRead), то ее имя пишется без %, во всех остальных местах, т.е. там где она читается - % обязательны.


всё так. если оставить без %, то получишь просто текст, а не содержание переменной. просто уже не стал спорить с Flasher.

#537:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 17, 2012 11:11
    —
Loopback
Как и значки, мои шрифты подвергаются частому редактированию. Со значками проще - изменил, а после обновил панель инструментов и вуаля. Шрифты же, загруженные плагином, доступны только для чтения. Чтобы их изменить, я делаю их копии, редактирую, далее из Проводника с закрытым TC произвожу замену. Есть ли способ выгрузить эти шрифты? Перезапуск TC их вернет. Шрифты задействованы в TC, но перед выгрузкой я могу сменить их на что-либо из стандартного набора.

#538:  Author: FlasherLocation: Москва PostPosted: Sat Nov 17, 2012 13:31
    —
KopBuH wrote:
насколько знаю, читаем внутреннею переменную, а устанавливаем переменную окружения (внешнюю).
если оставить без %, то получишь просто текст, а не содержание переменной. просто уже не стал спорить с Flasher
Внутренняя переменная является предопределённой либо устанавливается командой Set, чего мы не наблюдаем в примерах выше. Даже если взять такой пример
Code:
Set Ren "Переменная окружения"
SetEnv Perem %Ren%
, записывается тот же текст %Ren%. И чего тут спорить?

#539:  Author: Loopback PostPosted: Sat Nov 17, 2012 19:00
    —
Flasher wrote:
Так в SetEnv читаем или устанавливаем?

Не совсем правильно выразился: там где мы вводим имя переменной для записи - там без %, там где ее читаем - там с %.

Flasher wrote:
записывается тот же текст %Ren%. И чего тут спорить?

Ты забыл ключ /EV. C ним будет значение.

ask-rus wrote:
Есть ли способ выгрузить эти шрифты?

Есть - я же их выгружаю при завершении работы плагина. Но как ты это предлагаешь сделать во время работы?

#540:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 17, 2012 20:35
    —
Loopback
Странно, что программа для редактирования шрифтов не может сохранить измененный шрифт (привелегии админа экзешнику присваивал), загруженный плагином, а переименовать файл в TC можно легко. Я точно помню, что раньше TC выдавал ошибку, ссылаясь на доступность файла только для чтения. Возможно, тогда я запускал TC без прав администратора. Можешь у себя это проверить? Программа Type light, бесплатная.
Loopback wrote:
Есть - я же их выгружаю при завершении работы плагина.

Значит, cm_UnloadPlugins должна помочь.

#541:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 17, 2012 20:58
    —
ask-rus,
А ты попробуй изменить экзешник или библиотеку, загруженную в память. Сохранить не сможешь, а переименовать - легко (впрочем, в некоторых случаях даже переименовать нельзя). Операционная система позволяет. То же и тут.

Quote:
Значит, cm_UnloadPlugins должна помочь.

Неа. Smile Autorun не выгружается этой командой.

И вообще, шрифты не выгрузишь, пока хоть кто-то их использует. Не всё так просто.

#542:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 17, 2012 21:02
    —
MVV
Точно не выгружается? Так-то прога сохраняет измененный шрифт после cm_UnloadPlugins, два раза проверил.

#543:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 17, 2012 21:04
    —
Вроде добавляли защиту от выгрузки, по идее не должен.

Ну раз помогает, тогда в чем проблема? Smile

#544:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 17, 2012 21:10
    —
Последний эксперимент.

- Шрифт загружен плагином;
- Шрифт задействован в файл. панелях;
- Изменяю шрифт программой, сохраняю - фиг;
- Изменяю шрифт программой, cm_UnloadPlugins, сохраняю - браво;
- Смотрю файл. панели и уже вижу изменения, даже перезапускать не пришлось.

Как так...

Добавлено спустя 12 минут:

Вроде всё здорово, погляжу как будет после перезагрузки Windows. Слишком всё гладко, до этого чего только не было.

#545:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 17, 2012 21:26
    —
Странно, конечно, что изменения применяются так быстро. Но попытаться объяснить можно. При обновлении содержимого панели тотал загружает Autorun вновь (если он действительно выгружался - можно проверить диспетчером задач типа Process Explorer), следовательно, загружаются и шрифты.

#546:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 17, 2012 21:39
    —
Перезапуск TC всё-таки требуется, там был какой-то глюк явно. С выгрузкой по команде шрифт файл. панелей сбрасывается на один из стандартных Windows.

#547:  Author: Loopback PostPosted: Sat Nov 17, 2012 21:40
    —
MVV wrote:
Вроде добавляли защиту от выгрузки, по идее не должен.

Она отдельной командой активируется, по-умолчанию выгрузка возможна.

ask-rus
Видимо ты успеваешь сохранить шрифт до обновления окна тотала и повторной загрузки плагина. Ну и хорошо, раз получается.

Опоздал...


Last edited by Loopback on Sat Nov 17, 2012 21:44; edited 1 time in total

#548:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 17, 2012 21:47
    —
Quote:
С выгрузкой по команде шрифт файл. панелей сбрасывается на один из стандартных Windows.

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

#549:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Nov 17, 2012 22:01
    —
Это был не глюк, значит, я успевал сохранить шрифт до обновления окна TC и повторной загрузки плагина (зачеркнуто Loopback-ом). Редактирую шрифт, cm_UnloadPlugins, сохраняю шрифт и перезапускаю TC - такой порядок меня устраивает, проблема иссякла.

#550:  Author: Loopback PostPosted: Thu Nov 22, 2012 18:02
    —
Девятая бета.

Скачать

Code:

+ функция FileExist
* оптимизирован код, слегка уменьшен размер плагина
* внутренние переменные могут принимать пустое значение


Вроде на данном этапе все хотелки учел?

#551:  Author: FlasherLocation: Москва PostPosted: Thu Nov 22, 2012 18:53
    —
Loopback wrote:
Вроде на данном этапе все хотелки учел?
Была ещё старая тема по закрытию запущенных из плагина процессов при закрытии ТС.
Ещё такое было пожелание.
И можно ещё FolderExist, раз FileExist есть?

#552:  Author: Loopback PostPosted: Thu Nov 22, 2012 21:49
    —
Flasher wrote:
Была ещё старая тема по закрытию запущенных из плагина процессов при закрытии ТС.

Не понял, а ShellExec с ключом /T разве это не делает?
Flasher wrote:
Ещё такое было пожелание.

Так теперь можно выполнять действия на выходе.
Flasher wrote:
И можно ещё FolderExist, раз FileExist есть?

FileExist работает с каталогами. Надо только, чтобы имя проверяемого каталога не заканчивалось на "\". Кстати да, нужно сделать, чтобы функция сама убирала слэш с конца.

#553:  Author: FlasherLocation: Москва PostPosted: Fri Nov 23, 2012 00:00
    —
Loopback wrote:
Не понял, а ShellExec с ключом /T разве это не делает?
А, пардон, не из плагина, а вообще любые, включая отдельные скрипты, вызванные через интерпретатор.

Loopback wrote:
Так теперь можно выполнять действия на выходе.
Где? Не могу найти такой команды.
Можно пару примеров с dll/inf/скриптом?

#554:  Author: Loopback PostPosted: Fri Nov 23, 2012 13:34
    —
Flasher wrote:
А, пардон, не из плагина, а вообще любые, включая отдельные скрипты, вызванные через интерпретатор.

ProcessTerminate. Нужно подключить плагин Process.

Насчет "любых скриптов" нет, для этого надо получать полную командную строку приложения и как-то сравнивать ее.



Flasher wrote:
Где? Не могу найти такой команды.
Можно пару примеров с dll/inf/скриптом?

Все есть в справке. Секция "на выходе" отделяется от основной директивой #FinalizeSection. Вот пример для регистрации/разрегистрации:

Code:


ShellExec regsvr32.exe "mydll.dll"

#FinalizeSection

ShellExec regsvr32.exe "/u mydll.dll"


#555:  Author: FlasherLocation: Москва PostPosted: Fri Nov 23, 2012 17:43
    —
Loopback wrote:
ProcessTerminate. Нужно подключить плагин Process.
Это я видел, только мне надо было именно при закрытии.

Loopback wrote:
Все есть в справке. Секция "на выходе" отделяется от основной директивой #FinalizeSection.
Вот другое дело. Только в справке это располагается в разделе "Планы", поэтому я не придал этому значения.
Буду пробовать. Получается плагин будет начинать поиск с решётки? Может, стоит взять другой символ, чтобы не проверять строки комментариев?

#556:  Author: Loopback PostPosted: Fri Nov 23, 2012 22:16
    —
Flasher wrote:
Только в справке это располагается в разделе "Планы",

Планы это планы, а это в новом разделе "файл конфигурации". Впрочем, вполне можно было и не заметить.

Flasher wrote:
Получается плагин будет начинать поиск с решётки? Может, стоит взять другой символ, чтобы не проверять строки комментариев?

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

#557:  Author: FlasherLocation: Москва PostPosted: Sat Nov 24, 2012 19:45
    —
Loopback wrote:
Впрочем, вполне можно было и не заметить.
Ага, не заметил, вроде планы обычно в конце пишутся, даже не обратил внимания на последующие заголовки.

Замечания по ReadMe
Опечатки:
Quote:
Стандартный таймаут ожаидания (дважды)
имя библиотеки с раСширением "dll" (отсутствие С)
Кстати, не очень понятно, что такое "таймаут ожидания"? Это не тавтология?
В нескольких местах фигурирует "тотал" с маленькой буквы.

Историю и Планы стоит сместить вниз для удобства перехода к основному описанию.

Quote:
При этом кавычки другого типа могут быть использованы в тексте параметра. Если нужно использовать в тексте кавычки обоих типов, то кавычки того типа, с которых начинается параметр, в тексте должны быть задвоены. Пример: "этот ""текст"" в кавычках"
Не очень понятно, что понимается под использованием кавычек в тексте параметра. Если кавычки используются для того же, что и тут, т.е. учёта пробелов, то это одно, если же в параметрах прописывается некое название с наличием этих кавычек, то - другое. Надо об этом как-то конкретней написать.
И приведённый пример не проясняет ситуацию использования обоих типов кавычек.

Loopback wrote:
которую нужно найти до выполнения скрипта
Вот я и пишу про поиск. Фильтрация-то начинается с первого символа - решётки.

#558:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 24, 2012 19:59
    —
Думаю, комментарии лучше не трогать. Для директив можно завести функцию типа Pragma, которой в параметре указывать саму директиву. И парсить легко, и подсветку синтаксиса можно сделать для выделения таких строк, скажем, красным цветом, и не путать их с комментариями.

А для точки, после которой идут команды завершения, надо завести внутреннюю функцию с именем SuspendUntilTerminate, WaitForTermination, WaitForExit или типа того (типа, на ней выполнение скрипта "замораживается" до завершения работы тотала), или же Pragma-директиву: Pragma WaitForTermination, Pragma FinalizeSection и т.п. Парсинг имен функций и параметров по идее уже есть в плагине, не придётся дописывать ничего нового.

#559:  Author: FlasherLocation: Москва PostPosted: Sat Nov 24, 2012 20:15
    —
MVV wrote:
WaitForTermination, WaitForExit или типа того
Тоже хотел написать, важная вещь.

#560:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 24, 2012 21:45
    —
Не, я имел в виду не опцию ожидания завершения запущенных процессов, а ожидание выгрузки плагина тоталом, т.е. закрытия тотала. Ожидание завершения процессов - это уже параметры запуска этих самых процессов.

#561:  Author: Loopback PostPosted: Sat Nov 24, 2012 22:59
    —
Flasher wrote:
Историю и Планы стоит сместить вниз для удобства перехода к основному описанию.

Только вчера об этом подумал, а то история разрослась уже.
Flasher wrote:
Не очень понятно, что понимается под использованием кавычек в тексте параметра.

Я думаю к релизу переведу справку в html, как и в других плагинах, там можно будет сделать выделение цветом для большей понятности. Ну и перефразировать заодно.
Flasher wrote:
Вот я и пишу про поиск. Фильтрация-то начинается с первого символа - решётки.

Я в том смысле, что никакой разницы в накладных расходах на поиск нет.
MVV wrote:
Думаю, комментарии лучше не трогать. Для директив можно завести функцию типа Pragma, которой в параметре указывать саму директиву. И парсить легко, и подсветку синтаксиса можно сделать для выделения таких строк, скажем, красным цветом, и не путать их с комментариями.

Ну понятно, кому что ближе Smile В С++ используется #pragma, в паскале - директивы в фигурных скобках, типа {$E wdx}, что по-сути комментарии.
В принципе я сначала и хотел сделать такую псевдофункцию, но как-то не придумалось достойное имя. Если появится хорошая идея - можно и переделать. Можно и Pragma, но оно по-моему не дает очевидного представления о назначении функции. Ну и вообще, все же хотелось бы, чтобы директивы отличались от функций.

Вообще, если бы я начинал делать плагин сейчас, то использовал бы другой символ комментария. Может для директив какой-нибудь незадействованный символ применить, $ например?

#562:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Nov 24, 2012 23:28
    —
Lingvo wrote:
pragma
указание транслятору, псевдокомментарий

По-моему, очень даже в точку. Smile

Символов можно на выбор взять целую кучу. Можно @, $, ~. Но слово pragma по-моему хорошо бы подошло, и приметное, и осмысленное. В паскале эти комментарии хрен отличишь от обычных...

А делать лучше сразу так, чтобы потом не пришлось переделывать.

#563:  Author: FlasherLocation: Москва PostPosted: Sat Nov 24, 2012 23:31
    —
Loopback wrote:
$ например?
Пойдёт.

А можно прояснить момент с последовательным запуском процессов по ShellExec? Необходим параметр WaitOnReturn для возобновления вызова последующих команд только после завершения вызванного процесса. Или это по умолчанию предусмотрено? Иначе без этого ряд вещей работает некорректно.

#564:  Author: Loopback PostPosted: Sun Nov 25, 2012 10:38
    —
MVV wrote:
По-моему, очень даже в точку.

Ну, наверно технический словарь. В обычном оно не переводится. Ладно, подумаю.
MVV wrote:
А делать лучше сразу так, чтобы потом не пришлось переделывать.

На раннем этапе обычно никогда не удается спланировать всё идеально. А сейчас уже приходится подгонять под имеющиеся реалии. Если посмотреть, то AutorunBlockUnload как раз бы хорошо смотрелся директивой.
Flasher wrote:
А можно прояснить момент с последовательным запуском процессов по ShellExec?

Да, теперь вспомнил про что речь. Уж очень далеко в ветке это обсуждение осталось, не домотал. Этого пока нет, посмотрю.

#565:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Nov 25, 2012 11:11
    —
Quote:
Ну, наверно технический словарь. В обычном оно не переводится. Ладно, подумаю.

Хз, что тут за словарь, а у меня оно есть в словарях Computers, LingvoComputer и Polytechnical. В общих вообще очень большой кучи милых нашему уху слов нет. А посмотри, как в общем словаре переводится file, долго будешь смеяться. Very Happy

Quote:
На раннем этапе обычно никогда не удается спланировать всё идеально. А сейчас уже приходится подгонять под имеющиеся реалии. Если посмотреть, то AutorunBlockUnload как раз бы хорошо смотрелся директивой.

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

#566:  Author: Loopback PostPosted: Mon Nov 26, 2012 11:13
    —
Flasher
Оказывается, ожидание уже давно сделал, но совершенно про это забыл. В функции ShellExec используй ключ /WAIT для ожидания завершения. Ключ может быть в виде /WAIT:хххх, где параметр - таймаут ожидания в миллисекундах.

#567:  Author: FlasherLocation: Москва PostPosted: Mon Nov 26, 2012 13:00
    —
Loopback
Мм.. Т.е. сам плагин отследить этот момент не может? Только в виде такой задержки?

#568:  Author: Loopback PostPosted: Mon Nov 26, 2012 13:56
    —
Flasher wrote:
Мм.. Т.е. сам плагин отследить этот момент не может? Только в виде такой задержки?

Задержка опциональна. По-умолчанию ожидание до завершения процесса.

#569:  Author: FlasherLocation: Москва PostPosted: Mon Nov 26, 2012 13:57
    —
Loopback
Понял. Ценная вещь. Благодарю! Давно ждал. Smile

#570:  Author: Loopback PostPosted: Mon Nov 26, 2012 16:23
    —
Десятая бета.

Скачать

В основном в ней сведены последние решения, идеи и исправления.

Code:

+ Дополнительные примеры использования кавычек в справке
+ Документирован параметр /WAIT в функции ShellExec
* AutorunBlockUnload теперь используется в Pragma (функция оставлена для совместимости)
* FinalizeSection переименовано в AutorunFinalizeSection и используется в Pragma
+ Ключевое слово Pragma для работы с директивами
* FileExist работает с каталогами с завершающим "\"

#571:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Dec 01, 2012 14:47
    —
что здесь не так?:

Code:
Pragma AutorunFinalizeSection

ShellExec /EV "%COMMANDER_PATH%\Macroses\cc.exe" -e -v -r -s -K "%USERNAME%" "%commander_path%\Web.ini"

с таким кодом ничего не запускается при закрытии тотала. (процесс cc.exe не запускается

#572:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Dec 01, 2012 15:54
    —
А так?
Code:
ShellExec /EV '%COMMANDER_PATH%\Macroses\cc.exe' '-e -v -r -s -K "%USERNAME%" "%commander_path%\Web.ini"'

Вся строка параметров должна быть заключена в кавычки, всё это прописано в Readme.

#573:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Dec 02, 2012 09:00
    —
вопрос к Loopback:
можно сделать встроенную переменную с SID текущего пользователя, из под которого запущен TC?

Добавлено спустя 4 минуты:

MVV wrote:
А так?
Code:
ShellExec /EV '%COMMANDER_PATH%\Macroses\cc.exe' '-e -v -r -s -K "%USERNAME%" "%commander_path%\Web.ini"'

Вся строка параметров должна быть заключена в кавычки, всё это прописано в Readme.


так работает, спасибо.

#574:  Author: Loopback PostPosted: Mon Dec 03, 2012 09:56
    —
KopBuH wrote:
Можно сделать встроенную переменную с SID текущего пользователя, из под которого запущен TC?

Это где-то в таком виде: S-1-5-18...? А для чего, если не секрет?

Попробовать можно, но точно не в основном плагине. Пожалуй, Process - самое место.

#575:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Dec 10, 2012 11:15
    —
еще вопрос. можно ли сделать внутреннею переменную для отображения текущего языка ТС?. (COMMANDER_LANG например)
я реализовал функцию вручную через конфиг, но есть минус: нужен перезапуск плагина для обновления переменной, можно сделать чтобы при переключении языка в ТС плагин автоматически менял значение переменной?

#576:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Dec 10, 2012 11:59
    —
KopBuH
Loopback wrote:
А для чего, если не секрет?

#577:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 10, 2012 14:31
    —
KopBuH wrote:
еще вопрос. можно ли сделать внутреннею переменную для отображения текущего языка ТС?. (COMMANDER_LANG например)
я реализовал функцию вручную через конфиг, но есть минус: нужен перезапуск плагина для обновления переменной, можно сделать чтобы при переключении языка в ТС плагин автоматически менял значение переменной?

Переменными, которые объявляет плагин, можно пользоваться только из его скрипта, т.е. при запуске тотала (ну и при закрытии) - это назначение плагина. Остальное должно решаться иными средствами. Например, подплагином, который будет сидеть и от нечего делать следить, не записал ли кто чего в конфиг...

#578:  Author: Loopback PostPosted: Mon Dec 10, 2012 14:41
    —
KopBuH
MVV прав: я не могу изменить переменную окружения после того, как скрипт уже отработал.

#579:  Author: FlasherLocation: Москва PostPosted: Mon Dec 10, 2012 14:55
    —
Loopback
Так он пишет не про переменную окружения, а про внутреннюю переменную. Хотя логика по сути тут будет та же..

#580:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Tue Dec 11, 2012 18:48
    —
Loopback wrote:
KopBuH
MVV прав: я не могу изменить переменную окружения после того, как скрипт уже отработал.


хорошо. тогда просто может добавите внутренную переменную "%AUTORUN_TCLANG%" чтоб была возможность запускать нужные конфиги в зависимости какая версия ТС запускается - русская или английская?.

Добавлено спустя 10 минут:

Avada wrote:
KopBuH
Loopback wrote:
А для чего, если не секрет?


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

сейчас я это реализовал так:


Code:
# Проверка языкового файла
IniRead "Commander_LangIni" "%COMMANDER_PATH%\Configs\wincmd.ini" "Configuration" "LanguageIni" ""

If %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG "Rus"
ElseIf %COMMANDER_LANGINI% = wcmd_eng.lng Then
  SetEnv /EV COMMANDER_LANG "Eng"
Else
  SetEnv /EV COMMANDER_LANG "Default"
EndIf

#581:  Author: Loopback PostPosted: Tue Dec 11, 2012 21:58
    —
KopBuH wrote:
чтобы иметь возможность запускать разные версии программ в зависимости от языка самого ТС.

Вообще-то, я спрашивал про получение SID. С языком-то и так понятно Smile

KopBuH wrote:
сейчас я это реализовал так:

Вполне нормально в пределах возможностей синтаксиса плагина.

Переменную-то сделать можно, но она может быть получена только из того же wincmd.ini. И ее значение будет каким-то прямым производным от значения ключа. Например, "eng" для wcmd_eng.lng, "cz" для wcmd_cz.lng и т.д.

#582:  Author: LonerDLocation: Донецк PostPosted: Tue Dec 11, 2012 23:36
    —
Quote:
для русской версии - русские тулбары. для английской - английские.
сейчас я это реализовал так

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

#583:  Author: FlasherLocation: Москва PostPosted: Tue Dec 11, 2012 23:58
    —
LonerD wrote:
Вот так и есть самый лучший вариант.
Не самый. Там не учтено умолчательное отсутствие ключа, когда стоит либо выбирается в настройках английский.

#584:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Dec 12, 2012 11:08
    —
Flasher,
Почему же, есть ветка Else...

#585:  Author: FlasherLocation: Москва PostPosted: Wed Dec 12, 2012 12:52
    —
MVV
А там всего 2 языка до Else..
Тут нужен какой-то указатель типа Empty, True/False при проверке наличия ключа/значения.

#586:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Dec 12, 2012 16:28
    —
Flasher wrote:
MVV
А там всего 2 языка до Else..


а у меня в сборке только 2 языка и есть Smile
Rus/Eng мне хватает.
хотите добавлять языки, добавляйте вручную:
(тут указаны стандартные названия файлов меню)


Code:
IniRead "Commander_LangIni" "%COMMANDER_PATH%\wincmd.ini" "Configuration" "LanguageIni" ""

If %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG "Rus"
ElseIf %COMMANDER_LANGINI% = wcmd_eng.lng Then
  SetEnv /EV COMMANDER_LANG "Eng"
ElseIf %COMMANDER_LANGINI% = wcmd_fra.lng Then
  SetEnv /EV COMMANDER_LANG "Fra"
ElseIf %COMMANDER_LANGINI% = wcmd_deu.lng Then
  SetEnv /EV COMMANDER_LANG "Deu"
Else
  SetEnv /EV COMMANDER_LANG "Default"
EndIf

#587:  Author: FlasherLocation: Москва PostPosted: Sat Dec 15, 2012 15:36
    —
KopBuH wrote:
хотите добавлять языки, добавляйте вручную
Вот об этом технически неправильном подходе я и пишу.
А должно быть по идее так:
Code:
IniRead COMMANDER_LANGINI %COMMANDER_INI% Configuration LanguageIni False

If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = False Then
  SetEnv /EV COMMANDER_LANG Eng
ElseIf %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG Rus
EndIf

Avada wrote:
Loopback wrote:
А для чего, если не секрет?
Я вижу смысл только в случае использования переменной в скриптах, где сообщения будут выводиться на соответствующем текущему языке.

#588:  Author: Loopback PostPosted: Sat Dec 15, 2012 20:48
    —
Flasher wrote:
А должно быть по идее так:

IniRead получает дефолтное значение только в случае отсутствия ключа файле. Если ключ есть, но пустой или с другим содержимым, неучтенным в условии, то переменная COMMANDER_LANG может остаться неопределенной. Поэтому последняя часть в условии KopBuH - правильная, только вместо Default можно поставить тот же Eng. Либо, надо перед условием установить начальное значение COMMANDER_LANG в нужное значение.

Flasher wrote:
Я вижу смысл только в случае использования переменной в скриптах, где сообщения будут выводиться на соответствующем текущему языке.

Народ, вы посмотрите вопрос-то. При чем тут язык? Я спрашивал про SID, который в том виде, как я показал, мне представляется малоприменимым.

#589:  Author: FlasherLocation: Москва PostPosted: Sat Dec 15, 2012 20:57
    —
Loopback wrote:
IniRead получает дефолтное значение только в случае отсутствия ключа файле.
Я знаю, приведённый пример к этому и относится. Только что-то не работает твой плагин в этом отношении.
Loopback wrote:
Поэтому последняя часть в условии KopBuH - правильная
Неправильная. Почему - на предыдущей странице объяснял.
Loopback wrote:
При чем тут язык?
Avada привёл цитату после появления обсуждаемой задачи.

#590:  Author: Loopback PostPosted: Sat Dec 15, 2012 21:20
    —
Flasher wrote:
Только что-то не работает твой плагин в этом отношении.

Если не работает - так и скажи, что баг. Это я еще проверю.

Но в остальном, достаточно вместо Default использовать Eng - и условие станет вполне правильным.

Flasher wrote:
Avada привёл цитату после появления обсуждаемой задачи.

Ок. Насчет SID'a, как я понимаю, ответа вряд ли дождусь Smile

#591:  Author: FlasherLocation: Москва PostPosted: Sat Dec 15, 2012 21:36
    —
Loopback wrote:
и условие станет вполне правильным.
Объясняю. Допустим, кто-то захотел активировать отсутствующий в условиях язык. В этом случае переменная окружения будет иметь неправильное значение Eng. С моим примером переменная будет вообще отсутствовать, что явно лучше, чем иметь неправильное значение.

Loopback wrote:
Насчет SID'a, как я понимаю, ответа вряд ли дождусь
А я тут при чём? Smile В мои задачи это не входило. Сам бы хотел знать, на кой оно..

#592:  Author: Loopback PostPosted: Sat Dec 15, 2012 23:10
    —
Flasher wrote:
С моим примером переменная будет вообще отсутствовать, что явно лучше, чем иметь неправильное значение.

И чем же это будет лучше?

Как раз обычная практика - использование языка по-умолчанию, если языковый файл не найден.

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

Хотя, конечно, можно и поверять, есть ли она или нет - это просто вопрос подхода.

Flasher wrote:
А я тут при чём?

Ни при чем, конечно, вопрос риторический.

#593:  Author: FlasherLocation: Москва PostPosted: Sat Dec 15, 2012 23:20
    —
Loopback wrote:
Как раз обычная практика - использование языка по-умолчанию, если языковый файл не найден.
Я пишу про отсутствие переменной. FileExist тут даже не используется. К чему тут поиск файла?
Loopback wrote:
она должна быть определена и у нее должно быть значение
Даже если оно неправильное? И какой в этом практический смысл?
Loopback wrote:
Хотя, конечно, можно и поверять, есть ли она или нет - это просто вопрос подхода.
Увы, подходы дают разные результаты при описанных условиях.
Я бы, откровенно, вообще записывал в переменную значение ключа, а потом обрезал бы лишнее: wcmd_deu.lng.

#594:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 16, 2012 10:36
    —
Quote:
Даже если оно неправильное? И какой в этом практический смысл?

Ну суть же понятна. Чем меньше значений может принимать переменная, тем лучше. Пустое или нет значение по умолчанию - это действительно вопрос подхода.

Quote:
Я бы, откровенно, вообще записывал в переменную значение ключа, а потом обрезал бы лишнее: wcmd_deu.lng.

Непросто будет с ограниченным синтаксисом обработать все случаи вида WCMD_BLABLA_RUS.lng и т.п. Так что вариант с проверкой возможных (автор скрипта знает наверняка, какие у него там есть языки) имён куда проще.

#595:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Dec 16, 2012 11:17
    —
Flasher wrote:
KopBuH wrote:
хотите добавлять языки, добавляйте вручную
Вот об этом технически неправильном подходе я и пишу.
А должно быть по идее так:
Code:
IniRead COMMANDER_LANGINI %COMMANDER_INI% Configuration LanguageIni False

If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = False Then
  SetEnv /EV COMMANDER_LANG Eng
ElseIf %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG Rus
EndIf



понимаешь...откуда мне знать, как называется файл меню у тебя?.
может быть он у тебя по другому называется?. поэтому - хочешь добавить - добавь нужные языки ручками. я просто привел пример, как я сделал это для себя, и всё.
P.S. почему именно по умолчанию именно default? потому что я привязываю тулбары к конкретному языку. а у ТС по умолчанию стоит тулбар default.bar в корне ТС. поэтому я делаю переменную со значением default и скрипт грузит тулбар по умолчаню, в случае если langini пустой. язык по умолчанию - и тулбар по умолчанию.
У меня английский язык выбирается вручную, и в соответсвии с этим грузятся меню, тулбары, сообщения и т.д. если значение LangIni пустое, я не хочу чтобы грузились эти расширенные английские тулбары. поэтому у меня в случае отсутсвия конкретного значения - переменная назначается default. это значит, что в ТС установлен язык "по умолчанию" и грузить какие-то отдельные тулбары и меню - не надо.

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

#596:  Author: FlasherLocation: Москва PostPosted: Sun Dec 16, 2012 13:31
    —
MVV wrote:
Пустое или нет значение по умолчанию - это действительно вопрос подхода.
Какого подхода? Как "я" пойму, что "у меня" стоит не английский, если переменная показывает Eng?

MVV wrote:
Непросто будет с ограниченным синтаксисом обработать все случаи вида WCMD_BLABLA_RUS.lng и т.п.
Почему с ограниченным синтаксисом? Я же пишу, как бы я делал (уже в скрипте, соответственно) после возврата переменной среды.


KopBuH wrote:
понимаешь...откуда мне знать, как называется файл меню у тебя?
Синтаксис имён глаголит справка:
Справка ТС wrote:
Этот диалог позволяет выбрать внутреннюю команду из файла totalcmd.inc, а также определить новые команды, которые будут храниться либо в файле usercmd.ini, либо в специфическом для данного языка файле wcmd_lng.ini (например, wcmd_rus.ini для русского языка).
Другого знать и не надо. Имеем отсечённое значение, сверяем по массиву переменных. А вот как соотносится ответ с не понять зачем процитированным кодом я вообще не понял.
KopBuH wrote:
поэтому - хочешь добавить - добавь нужные языки ручками
Опять - 25. Такое ощущение, что читал мои ответы сквозь пальцы (если вообще читал)..
Если всё сводить к частному случаю с наличием 2-ух языков, то в таком случае ElseIf - вообще лишняя конструкция, тут и Else достаточно.


Кстати, Loopback, а ты можешь добавить возможность работы с условиями без переноса строк и EndIf, как в VB?

#597:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 16, 2012 14:43
    —
Quote:
Какого подхода? Как "я" пойму, что "у меня" стоит не английский, если переменная показывает Eng?

Если ты в своем скрипте используешь английский, когда в тотале стоит не русский, то какая тебе разница, именно английский ли язык в действительности или нет? В данном случае eng - как раз значение по умолчанию (т.е., если язык не русский, считаем его английским, остальное не имеет значения).

Quote:
Кстати, Loopback, а ты можешь добавить возможность работы с условиями без переноса строк и EndIf, как в VB?

Так ли это необходимо? Кто-то пишет такие простыни в скрипте Autorun, что эта мелочь сильно прояснит что-то?

#598:  Author: FlasherLocation: Москва PostPosted: Sun Dec 16, 2012 15:05
    —
MVV wrote:
какая тебе разница, именно английский ли язык в действительности или нет?
Язык сообщения должен в идеале соответствовать текущему языку. Разница в знании/понимании отражаемого языка. Можно ставить указание на отсутствие языка перевода и менять это при необходимости.
А в случае предложенной обрезки можно сразу устанавливать язык меню, плагинов, программ, к примеру.
MVV wrote:
Кто-то пишет такие простыни в скрипте Autorun, что эта мелочь сильно прояснит что-то?
Я как раз не люблю простыни..

#599:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 16, 2012 16:00
    —
По-моему, все операции, которые не требуют быть сделанными непосредственно в пространстве тотала, должны выноситься во внешние скрипты и т.п., а в конфиге плагина должен остаться минимум (типа установки переменных окружения, т.к. извне этого не сделать).

#600:  Author: FlasherLocation: Москва PostPosted: Sun Dec 16, 2012 16:15
    —
Так а тут больше кроме установки переменной ничего и не требуется. Главное баг исправить.

#601:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Dec 16, 2012 16:57
    —
Loopback:
Можете сделать команду для вызова выполнения внешнего скрипта, что-то вроде ExecCfg autorun_custom.cfg ?.

#602:  Author: FlasherLocation: Москва PostPosted: Sun Dec 16, 2012 17:11
    —
У кого-нибудь работает такая команда?
Code:
Pragma AutorunFinalizeSection

ShellExec /EV /SW_HIDE %comspec% '/c del C:\Sample.txt'

#603:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Dec 16, 2012 17:23
    —
Flasher wrote:
У кого-нибудь работает такая команда?
Code:
Pragma AutorunFinalizeSection

ShellExec /EV /SW_HIDE %comspec% '/c del C:\Sample.txt'


Так
Code:
ShellExec /EV /SW_HIDE cmd.exe '/c del C:\Sample.txt'

и так
Code:
ShellExec /EV /SW_HIDE '%COMSPEC%' '/c del C:\Sample.txt'

работает.


Last edited by KopBuH on Sun Dec 16, 2012 17:25; edited 1 time in total

#604:  Author: FlasherLocation: Москва PostPosted: Sun Dec 16, 2012 17:24
    —
Нужно именно при закрытии ТС.

#605:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Dec 16, 2012 17:27
    —
Flasher wrote:
Нужно именно при закрытии ТС.

добавь одинарные кавычки к строке %COMSPEC% - и всё заработает Wink
пример:
Code:
ShellExec /EV /SW_HIDE '%COMMANDER_PATH%\Macroses\sample.exe' ' -K "%RANDOM%" "%commander_path%\sample.txt"'


Last edited by KopBuH on Sun Dec 16, 2012 17:30; edited 1 time in total

#606:  Author: FlasherLocation: Москва PostPosted: Sun Dec 16, 2012 17:28
    —
Одинарные кавычки тут не нужны. Пробелов нет. Кавычки пользы не принесут. Просто баг похоже. То ли параметры не обрабатываются после директивы выхода, то ли с кавычками непорядок. Жду автора..

#607:  Author: Loopback PostPosted: Sun Dec 16, 2012 21:10
    —
KopBuH wrote:
Можете сделать команду для вызова выполнения внешнего скрипта, что-то вроде ExecCfg autorun_custom.cfg ?.

Нет, на текущей реализации это вряд ли получится. Единственное, что можно сделать - аналог include, т.е. включать в тело скрипта содержимое другого файла. Однако, в этом случае надо будет следить, чтобы не получилась вложенность условий.
Flasher wrote:
Кстати, Loopback, а ты можешь добавить возможность работы с условиями без переноса строк и EndIf, как в VB?

В текущей реализации нет, для этого нужен полноценный парсер с разбивкой на токены.
Flasher wrote:
У кого-нибудь работает такая команда?

У меня отработала, на WinXP и на Win7.

Но не исключено, что это опять проблема с одной из самых оригинальных функций WinAPI AssocQueryString, которая на всех системах выдает разные результаты. А иногда и на одной тоже разные.

Завтра сделаю дебажную версию, посмотрим, что там выдается.

#608:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 16, 2012 21:33
    —
Quote:
Но не исключено, что это опять проблема с одной из самых оригинальных функций WinAPI AssocQueryString

А зачем вызывать эту странную функцию для команды ShellExec? С головой достаточно прямого вызова ShellExecuteEx...

#609:  Author: Loopback PostPosted: Sun Dec 16, 2012 22:37
    —
MVV wrote:
А зачем вызывать эту странную функцию для команды ShellExec?

ShellExecuteEx хороша, если нужно только запустить процесс и больше с ним ничего не делать. Однако когда я делал закрытие процесса при выходе, с ней возникли проблемы. Поэтому пришлось перейти на более предсказуемый CreateProcess.

#610:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 16, 2012 23:52
    —
А какие проблемы-то? Дескриптор процесса она тоже может возвращать... Опиши, может разберемся.

#611:  Author: Loopback PostPosted: Mon Dec 17, 2012 14:58
    —
MVV wrote:
А какие проблемы-то?

Не помню точно, уже больше года прошло. Вроде не удавалось получить корректный pid из дескриптора процесса.

Flasher
Попробуй эту версию. В каталоге плагина будет создан файл debug.log, в нем для каждого вызова ShellExec три строчки. Скинь те, которые относятся к проблемному.

#612:  Author: FlasherLocation: Москва PostPosted: Mon Dec 17, 2012 18:03
    —
Loopback
Ничего особого нет.
Code:
Source: C:\WINDOWS\system32\cmd.exe
AssocExePath: %1
CmdLine: "C:\WINDOWS\system32\cmd.exe"

Проверял на XP и 7 x32.

#613:  Author: Loopback PostPosted: Mon Dec 17, 2012 18:18
    —
Flasher
Все правильно, у меня то же самое. Только при этом файл удаляет.

Случайно права на удаляемый файл не ограничены? Или может атрибут какой-нибудь системный стоит?

#614:  Author: FlasherLocation: Москва PostPosted: Mon Dec 17, 2012 18:40
    —
Loopback
Никаких ограничений. Просто команды не отрабатывают. С любым файлом так.

#615:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 17, 2012 20:08
    —
Loopback,
Да, pid не получить просто так. Но нужен ли он тебе? У тебя же есть дескриптор, который можно использовать для проверки состояния процесса и его завершения. А что ты делаешь по pid?

#616:  Author: Loopback PostPosted: Tue Dec 18, 2012 16:15
    —
Flasher
А хоть что-то на выходе запускается? Калькулятор, например, или блокнот.

MVV
Для корректного закрытия окна процесса и для убиения дерева процессов.

#617:  Author: FlasherLocation: Москва PostPosted: Tue Dec 18, 2012 17:07
    —
Loopback
Не работают именно параметры. Просто так exe-шники я уже проверял, там порядок.

#618:  Author: Loopback PostPosted: Tue Dec 18, 2012 17:53
    —
Flasher
А попробуй еще одну версию по той же ссылке, там более подробная информация выводится.

#619:  Author: FlasherLocation: Москва PostPosted: Tue Dec 18, 2012 19:23
    —
Loopback
Debug помог лучше разобраться. Оказывается, если есть ошибки в синтаксисе команд, расположенных над требуемой, то данная команда не отработает как надо. Надо бы этот подход поменять.

#620:  Author: Loopback PostPosted: Wed Dec 19, 2012 10:10
    —
Flasher
Менять в какую сторону?

Сейчас скрипт прекращает работу, если в синтаксисе команды ошибка, и мне такой подход представляется единственно правильным. Однако, плагин должен об этой ошибке сообщать.

Какая была команда с ошибочным синтаксисом?

#621:  Author: FlasherLocation: Москва PostPosted: Wed Dec 19, 2012 11:03
    —
Loopback
Нужно сделать не так, чтобы скрипт прекращал работу на любой неправильной команде, а не трогал только те команды, в которых есть ошибка.
А сейчас плагин не сообщает ни о каких ошибках, если не брать debug, в котором и понять, в чём именно ошибка, без танцев с бубном нельзя. Например, есть команды которые работают с синтаксисом, где одинарные и двойные кавычки чередуются ('exe "Param').

#622:  Author: Loopback PostPosted: Wed Dec 19, 2012 13:12
    —
Flasher wrote:
Нужно сделать не так, чтобы скрипт прекращал работу на любой неправильной команде, а не трогал только те команды, в которых есть ошибка.

Перечитал несколько раз, но так и не понял.
Flasher wrote:
А сейчас плагин не сообщает ни о каких ошибках

Так-то уж ни о каких? А двадцать с лишним строк сообщений об ошибках - они для красоты сделаны?
Flasher wrote:
Например, есть команды которые работают с синтаксисом, где одинарные и двойные кавычки чередуются ('exe "Param').

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

#623:  Author: FlasherLocation: Москва PostPosted: Wed Dec 19, 2012 13:51
    —
Loopback wrote:
Перечитал несколько раз, но так и не понял.
Т.е. все команды с правильным синтаксисом должны отработать в любом случае.

Loopback wrote:
Так-то уж ни о каких? А двадцать с лишним строк сообщений об ошибках - они для красоты сделаны?
Я непосредственно о ShellExec пишу. Никаких ошибок не появляется, если команда не отрабатывает, как в приведённом выше примере.

#624:  Author: Loopback PostPosted: Wed Dec 19, 2012 14:18
    —
Flasher wrote:
Т.е. все команды с правильным синтаксисом должны отработать в любом случае.

Добавлю - с формально правильным синтаксисом.
Они так и отрабатывают. Если нет - пиши, с какими проблемы, буду проверять.

Flasher wrote:
Я непосредственно о ShellExec пишу. Никаких ошибок не появляется, если команда не отрабатывает, как в приведённом выше примере.

Можно добавить сообщение об ошибке, если процесс не запустился.

Но вот, если я правильно помню, с тем же cmd.exe это не прокатит. Поскольку cmd может запуститься, но не отработать команду.

#625:  Author: FlasherLocation: Москва PostPosted: Wed Dec 19, 2012 15:26
    —
Loopback wrote:
Они так и отрабатывают.
Ты же пишешь:
Loopback wrote:
Сейчас скрипт прекращает работу, если в синтаксисе команды ошибка
У меня так и происходит. Последующие команды не отрабатывают.
Loopback wrote:
Поскольку cmd может запуститься, но не отработать команду.
Не проверял (там ключ скрытия), другие программы запускал без параметров.

#626:  Author: Loopback PostPosted: Wed Dec 19, 2012 15:38
    —
Flasher wrote:
Ты же пишешь:

Я не вижу противоречия. Если ошибка синтаксиса - скрипт останавливается. Если формальных ошибок нет - выполняет команду.

А что ты предлагаешь? Продолжать выполнять скрипт даже после того, как в одной из команд обнаружилась ошибка?

#627:  Author: FlasherLocation: Москва PostPosted: Wed Dec 19, 2012 15:52
    —
Ну, да. Ведь это отдельные команды, не зависящие друг от друга (хотя бы ShellExec).

#628:  Author: Loopback PostPosted: Wed Dec 19, 2012 16:02
    —
Flasher wrote:
Ну, да. Ведь это отдельные команды, не зависящие друг от друга.

Как это не зависят? Например, что-то может зависеть от IniRead, Set, SetEnv, LoadLibrary.

И потом, если есть ошибка - плагин все равно остановится и сообщит об этом. Какой смысл продолжать выполнение? Надо просто исправить ошибку.

#629:  Author: FlasherLocation: Москва PostPosted: Wed Dec 19, 2012 16:09
    —
Loopback
Это если есть сообщение. А если нет? Поэтому про ShellExec и написал.

#630:  Author: Loopback PostPosted: Thu Dec 20, 2012 10:52
    —
Flasher
Ну, кажется причина ясна. Сообщения об ошибках появляются при запуске, но их нет при выходе. Причина - при выходе Тотал уничтожает свое окно (родительское для сообщений) раньше, чем выполняется скрипт завершения.

Попробуй тестовую версию по той же ссылке. Теперь сообщения об ошибках должны появляться в любом случае. Разумеется, при условии что ошибка входит в число тех, которые выявляются плагином.

#631:  Author: FlasherLocation: Москва PostPosted: Thu Dec 20, 2012 23:40
    —
Loopback
В общем-то, пока неясно.
Вылетело пока это: "If" found but "Then" missed.
На эту строку:
Code:
If ProcessExist /EV /F '%COMMANDER_PATH%\Scripts\AutoIt\AutoIt3.exe' Then ProcessTerminate /F /EV /TT /A '%COMMANDER_PATH%\Scripts\AutoIt\AutoIt3.exe'
Хотя она работала.

#632:  Author: Loopback PostPosted: Fri Dec 21, 2012 11:11
    —
Flasher
После Then в строке ничего быть не должно. ProcessTerminate нужно писать на следующей строке. Ну и дальше EndIf, само-собой. Как она могла работать - я не очень представляю.

Добавлю в документацию.

#633:  Author: FlasherLocation: Москва PostPosted: Fri Dec 21, 2012 13:24
    —
Loopback
Может, и не она работала, может, сам скрипт убивался (/W и /TT убирал).
Настолько уже привык писать на одной строке, что и про правила местного синтаксиса забыл.. Sad

#634:  Author: Loopback PostPosted: Fri Dec 21, 2012 14:00
    —
Flasher wrote:
Настолько уже привык писать на одной строке, что и про правила местного синтаксиса забыл..

Ну да, это же не язык программирования. Чтобы делать однострочные выражения, нужен совсем другой парсер, на этом не получится.

#635:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Dec 21, 2012 16:03
    —
Вот поэтому иногда полезно иметь сильно отличающийся синтаксис в конкретном случае. Чтобы привычки не мешали. Very Happy

#636:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Dec 23, 2012 12:46
    —
Loopback: можно ли сделать внутренние переменные со значениями текущих языков ТС и системы?.
например, если язык системы русский - то значение было бы RU?,
вещь не такая уж и бесполезная, имхо.

#637:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 23, 2012 13:26
    —
Ты так часто приходишь в гости к иностранцам, у которых винда с нерусскими диалогами, и при этом хочешь, чтобы у них в твоем тотале что-то было по-английски?..

#638:  Author: FlasherLocation: Москва PostPosted: Sun Dec 23, 2012 13:41
    —
Если бы была команда RegRead, то можно было бы проверять через реестр..

P.S. MVV, подсказываю - это автор TechAdmin.


Last edited by Flasher on Sun Dec 23, 2012 16:15; edited 2 times in total

#639:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 23, 2012 14:01
    —
А вот кстати это куда полезнее будет кучи частных переменных. Smile Из инишников плаг читает, из реестра тоже полезно. Но тогда уже RegRead, по аналогии с IniRead.


Кстати, мысль появилась кой-какая. Можно же вызывать скрипты из плагина (типа, вызывать всякие там wscript.exe с параметрами и флагом ожидания завершения). Нетрудно будет научить скрипт создавать простейший INI-файлик, в который записывать результат своей работы:
Code:
[foo]
bar=RU

И сразу же после вызова скрипта читать ключи этого файлика в скрипте... Если не проще будет действия прямо из скрипта выполнять...

#640:  Author: FlasherLocation: Москва PostPosted: Sun Dec 23, 2012 15:02
    —
MVV wrote:
Но тогда уже RegRead, по аналогии с IniRead.
Это я описался, пардоньте, исправил..
Про скрипт не понял. Для чего ini с ключами? Что в них должно быть?
MVV wrote:
Если не проще будет действия прямо из скрипта выполнять.
Смотря что. Пока целесообразности не вижу.

#641:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Dec 23, 2012 15:04
    —
Quote:
Про скрипт не понял. Для чего ini с ключами? Что в них должно быть?

Предположим, тебе нужно узнать что-то, что из плагина не узнать (из реестра, например, т.к. плагин пока не читает реестр). Пишешь и вызываешь скрипт, который в таком файлике возвращает то, что он узнал. А в плагине читаешь. Smile

#642:  Author: FlasherLocation: Москва PostPosted: Sun Dec 23, 2012 15:18
    —
Ааа.. Не, как-то через левую ногу получается, лучше сразу в cfg.

#643:  Author: Loopback PostPosted: Mon Dec 24, 2012 11:53
    —
Flasher wrote:
Если бы была команда RegRead, то можно было бы проверять через реестр..

Будет, давно запланирована.
MVV wrote:
Кстати, мысль появилась кой-какая. Можно же вызывать скрипты из плагина...

Мысль имеет место быть, но чтение реестра лучше все же сделать, широкие возможности открываются.

#644:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Dec 24, 2012 15:11
    —
Loopback: вот если бы была поддержка чтения из WMI Rolling Eyes
из WMI можно получить любую информацию о системе.
примеры получения информации из WMI можно посмотреть, запустив Sysinternals BgInfo (http://technet.microsoft.com/ru-ru/sysinternals/bb897557), и добавив новую строку с чтением из WMI.

#645:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 24, 2012 16:39
    —
Вопрос в том, насколько эта информация необходима в скрипте данного плагина...

#646:  Author: Loopback PostPosted: Mon Dec 24, 2012 22:00
    —
KopBuH wrote:
вот если бы была поддержка чтения из WMI

Не, внутреннюю поддержку этого я делать не буду.

Хотя, если модифицировать идею MVV без использования ini, можно попробовать сделать захват стандартного вывода запускаемой программы. Тогда, если сделать скрипт или экзешник, выводящие информацию в stdout, ее можно будет получать сразу в скрипте.

#647:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 24, 2012 23:15
    —
Loopback, такой функции самое место в отдельном плагине.
А вообще, не думаю, что такая уж и проблема выдать результат в инишник во временной папке... на то она и временная.

#648:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Dec 26, 2012 20:40
    —
ждем функцию RegRead.
чтобы можно было выставлять тип значения - REG_DWORD REG_SZ и т.п. Smile

например, так:

Code:
RegRead AutorunKey "HKLM\Software\TC_Autorun" "sz" "AutorunKey" "Autorun"

отсюда: переменная, путь ключа в реестре, тип значения, имя значения, значение по умолчанию.

#649:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Dec 26, 2012 22:20
    —
Зачем указывать тип? Строка всегда будет возвращаться в виде строки (ololo), число - тоже в виде строки (4660 или $1234), зачем тут тип указывать? Переменные всё равно в плагине бывают только строковые, а тип параметра прекрасно возвращает функция RegQueryValueEx.
Нужны только имя переменной, адрес ключа и имя значения, ну и значение по умолчанию. В качестве параметра вижу уточнение, в какой системе возвращать число - в десятеричной или шестнадцатеричной.
Code:
RegRead [/HEX] <имя_переменной> <адрес_ключа> <имя_значения> [<текст_по_умолчанию>]

Параметр /HEX - чтобы возвращать число в виде $1234, а не в виде 4660, на строки влиять вообще не должен. Если вместо имени ключа заданы пустые кавычки, читать значение (По умолчанию) - впрочем, это даже реализовывать не нужно, RegQueryValueEx и так прочитает значение по умолчанию, если указано пустое имя значения.

#650:  Author: Loopback PostPosted: Thu Dec 27, 2012 11:49
    —
По поводу RegRead согласен с MVV, указание типа при чтении - излишне. Да и по остальной логике возражений нет, как-то так и я себе ее представлял.

MVV wrote:
такой функции самое место в отдельном плагине.

В этом случае в плагине придется по-сути повторять функционал ShellExec. Есть ли смысл? Можно просто опционально добавить чтение потока сразу после запуска в переменную. Должно уместиться в десяток строк кода.
Нет, лучше действительно в плагин. Практически все ключи ShellExec неприменимы, а сопутствующего кода оказалось больше (перекодировка).

#651:  Author: Loopback PostPosted: Fri Dec 28, 2012 18:22
    —
Одиннадцатая бета.

Скачать

Изменения:

Code:

+ команда ProcessExecGetOutput в плагине Process
+ команда RegRead


Вообще процесс развития - он бесконечен, поэтому, если ничего не выплывает критического, я бы хотел сделать релиз.

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

#652:  Author: FlasherLocation: Москва PostPosted: Fri Dec 28, 2012 18:37
    —
Loopback
Т.е. такой код у тебя работает?
Новую пока не качал..

#653:  Author: Loopback PostPosted: Fri Dec 28, 2012 20:43
    —
Flasher
А, нашел, спасибо за наводку. Это не в IniRead ошибка была, а с операторами and/or, которые обрабатывались регистрозависимо.

Версию обновил по той же ссылке.

#654:  Author: FlasherLocation: Москва PostPosted: Sat Dec 29, 2012 13:41
    —
Loopback
Сейчас порядок. Можно релизить. Отдельное мерси за RegRead, начинаю уже прикручивать. Smile
Про stdout пока не думал. Есть какие-то идеи? Что там из полезного окромя cmd у нас выводит?

#655:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Dec 29, 2012 14:41
    —
Loopback
вроде сделал проверку локализации ОС:
Code:
# Проверка локализации (языка) ОС
RegRead COMMANDER_OSLANG "HKCU\Control Panel\International" "Locale" "unknown"
# Проверка версии ОС
If %COMMANDER_OSLANG% = 00000419 Then
  SetEnv COMMANDER_OSLANG "Rus"
ElseIf %COMMANDER_OSLANG% = 00000409 Then
  SetEnv COMMANDER_OSLANG "Eng"
Else
  SetEnv COMMANDER_OSLANG "%COMMANDER_OSLANG%"
EndIf

в принципе, всё работает, спасибо.
но иногда почему то вылазиют странные сообщения плагина при выходе из ТС.
причем не всегда Sad .

и еще:
является ли такой код правильным: (переменная "%ShowHiddensOnStart%" и "%COMMANDER_ASADMIN%" уже создана)
Старый код: (10-ая бета)
Code:
If %ShowHiddensOnStart% = 0 Then
ElseIf %COMMANDER_ASADMIN% = 1 Then
  ShellExec /EV "%COMMANDER_PATH%\Macroses\nircmd%COMMANDER_ARCH%.exe" "win show class TTOTAL_CMD"
Else
EndIf

Новый код: (11-ая бета)
Code:
If %ShowHiddensOnStart% = 0 Then
ElseIf %COMMANDER_ASADMIN% = 1 Then
  ShellExec /EV "%COMMANDER_PATH%\Macroses\nircmd%COMMANDER_ARCH%.exe" "win show class TTOTAL_CMD"
EndIf

как видите, там я удалил строку else, поскольку ничего выполнять не нужно. вроде пока проблем не наблюдаю. или else всё же должна быть?. (сообщения об ошибках исчезли вроде именно после того, как я везде убрал эту else. но в 10-ой бетке такого не наблюдалось )


P.S.: Loopback, добавил бы в autorun.example.cfg пару примеров работы с RegRead

#656:  Author: Loopback PostPosted: Sun Dec 30, 2012 20:02
    —
Flasher wrote:
Про stdout пока не думал. Есть какие-то идеи? Что там из полезного окромя cmd у нас выводит?

В первую очередь - cscript. Для меня - Autoit, конечно.

Ну вот, например, очень специфический запрос KopBuH по получению SID. Теперь его можно вытащить скриптом через WMI. Скрипт (get_sid.vbs):
Code:

On Error Resume Next

Set strUserName = ""
Set WshShell  = WScript.CreateObject( "WScript.Shell" )
Set WshSysEnv = WshShell.Environment( "PROCESS" )
strUserName   = WshSysEnv( "USERNAME" )

Set objWMIService = GetObject( "winmgmts://./root/CIMV2" )

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", &h30)

For Each objItem In colItems
   If LCase( objItem.Name ) = LCase( strUserName ) Then
      WScript.Stdout.Write objItem.SID
   End If
Next


Строка запуска в Autorun:
Code:

ProcessExecGetOutput SID cscript.exe "//Nologo get_sid.vbs"
SetEnv /EV USER_SID %SID%


KopBuH wrote:
но иногда почему то вылазиют странные сообщения плагина при выходе из ТС. причем не всегда

Странно, не наблюдал ничего такого странного.
KopBuH wrote:
является ли такой код правильным:

Можно в любой комбинации, минимально If..Endif.
Тут возникает другой вопрос - а зачем нужно условие%ShowHiddensOnStart% = 0, если оно ничего не делает.

KopBuH wrote:
P.S.: Loopback, добавил бы в autorun.example.cfg пару примеров работы с RegRead

Есть идеи? Нужно что-то применимое для многих.

#657:  Author: FlasherLocation: Москва PostPosted: Sun Dec 30, 2012 20:13
    —
Loopback wrote:
В первую очередь - cscript. Для меня - Autoit, конечно.
Я не думаю, что вообще есть смысл использовать скрипты для вывода потока, чтобы получить какое-то значение, записываемое в переменную среды, которое потом тем же скриптингом и будет обрабатываться. В этом нет практического смысла, на мой взгяд (если не брать какие-то совсем простые операции типа создания одноимённых папок и т.п.). Или, может, я чего не улавливаю?

#658:  Author: Loopback PostPosted: Sun Dec 30, 2012 20:21
    —
Flasher wrote:
Или, может, я чего не улавливаю?

Скрипт может менять унаследованную переменную окружения, но в родительском процессе эти изменения не отразятся.

#659:  Author: FlasherLocation: Москва PostPosted: Sun Dec 30, 2012 20:30
    —
Loopback
Какой процесс в данном случае понимается под родительским, и какие изменения должны на нём отражаться?

#660:  Author: Loopback PostPosted: Sun Dec 30, 2012 21:09
    —
Flasher
Родительский процесс - Тотал с загруженным Autorun. Переменная окружения, созданная в Autorun, будет видна во внешнем (запускаемом из Autorun) скрипте, но не может быть им изменена. Созданная во внешнем скрипте переменная вообще не будет видна в скрипте Autorun (и в ТС).

Так что передача через stdout, на мой взгляд, самый простой и удобный способ передать информацию в Autorun.

#661:  Author: FlasherLocation: Москва PostPosted: Sun Dec 30, 2012 22:29
    —
Loopback wrote:
Созданная во внешнем скрипте переменная вообще не будет видна в скрипте Autorun (и в ТС).
Это было понятно. Я как раз к тому, что, в скрипте Autorun она не нужна будет, поскольку необходимое значение будет задействовано в тех же скриптах, в кот. и так можно его получить без специально созданной переменной среды.
Под улавливанием я подразумевал какие-то неспецифичные примеры задействования таких переменных скорее вне скриптов (т.е. касаемо кнопок/юзеркоманд, где это необходимость может возникнуть).
Если же мы говорим про переменные, требуемые исключительно при запуске ТС, то это уже другой момент, кот. тоже есть смысл обсудить в плане применения.

#662:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 31, 2012 00:07
    —
Loopback wrote:
Тут возникает другой вопрос - а зачем нужно условие%ShowHiddensOnStart% = 0, если оно ничего не делает.

Полагаю, чтобы ничего не делать, если условие истинно, и выполнять какие-то действия в противном случае (внешний условный блок).

#663:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Dec 31, 2012 08:59
    —
Loopback wrote:


Строка запуска в Autorun:
Code:

ProcessExecGetOutput SID cscript.exe "//Nologo get_sid.vbs"
SetEnv /EV USER_SID %SID%


насколько я понял, нужно подгружать плагин Process, так?.
есть одно маленькое "но": при запуске ТС с другой рабочей папкой, отличающейся от папки ТС, например через контекстное меню проводника - скрипт берет рабочую папку оттуда, но есть решение, код такой:
Code:

ProcessExecGetOutput /EV /OEM COMMANDER_USERSID cscript.exe '//Nologo "%commander_path%\Macroses\get_usersid.vbs"' '%commander_path%'

естественно, вместо Macroses может быть любая папка, но тут уж люди сами разберутся, я думаю.
кстати, с помощью ProcessExecGetOutput можно очень много чего добыть Smile , спасибо за скрипт по получению SID.

Добавлено спустя 24 минуты:

MVV wrote:
Loopback wrote:
Тут возникает другой вопрос - а зачем нужно условие%ShowHiddensOnStart% = 0, если оно ничего не делает.

Полагаю, чтобы ничего не делать, если условие истинно, и выполнять какие-то действия в противном случае (внешний условный блок).


точноSmile.
Пример:
Code:
If %EncryptAdminINI% = 0 Then
ElseIf %EncryptAdminINI_withSID% = 1 Then
  ShellExec /EV /SW_HIDE '%COMMANDER_PATH%\Macroses\ccrypt.exe' '-e -v -r -s -K "%COMMANDER_USERSID%" "%commander_path%\Admin.ini"'
Else
  ShellExec /EV /SW_HIDE '%COMMANDER_PATH%\Macroses\ccrypt.exe' '-e -v -r -s -K "%USERNAME%" "%commander_path%\Admin.ini"'
EndIf

разбираем условие: если %EncryptAdminINI% равно 0, то ничего не происходит. если же отличается от 0, происходит проверка второй переменной: %EncryptAdminINI_withSID%, и если значение переменной равно 1 - то происходит запуск ccrypt.exe с ключом шифрования, взятой из переменной %COMMANDER_USERSID% (thanks to Loopback). если же значение %EncryptAdminINI_withSID% отличается от 1, то происходит запуск того же ccrypt.exe, но ключ шифрования берется уже из переменной %USENAME%.

#664:  Author: Loopback PostPosted: Mon Dec 31, 2012 17:48
    —
Flasher wrote:
Я как раз к тому, что, в скрипте Autorun она не нужна будет, поскольку необходимое значение будет задействовано в тех же скриптах, в кот. и так можно его получить без специально созданной переменной среды.

Разумеется, в этом случае не нужно. Но задача состояла как раз в том, что это значение нужно использовать в Autorun, а кроме как скриптом получить его затруднительно.

Пример KopBuH с использованием SID для шифрования вполне показателен, поскольку как я понял, это значение используется и после окончания запуска.

MVV wrote:
Полагаю, чтобы ничего не делать, если условие истинно, и выполнять какие-то действия в противном случае (внешний условный блок).

Имелось в виду, что в том конкретном примере можно было бы оба условия объединить в одно:
Code:

If (%ShowHiddensOnStart% <> 0) and (%COMMANDER_ASADMIN% = 1) Then
...
EndIf


KopBuH wrote:
при запуске ТС с другой рабочей папкой, отличающейся от папки ТС, например через контекстное меню проводника - скрипт берет рабочую папку оттуда, но есть решение, код такой:

Да, для этого и сделана возможность задать рабочий каталог.

#665:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 31, 2012 23:24
    —
Quote:
Имелось в виду, что в том конкретном примере можно было бы оба условия объединить в одно:

Пришлось бы писать это дополнительное условие также и в каждой ветке Else[If].

#666:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 08:59
    —
Loopback, приведи пожалуйста пример сравнения, если ключ в ini файле есть, но он пустой.

Скажем, вот на таком практическом примере:
Code:
 
If (%OfflineSystemDir% = "") OR (%OfflineSystemDir% = %SystemRoot%) Then
ElseIf FileExist "C:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows"
ElseIf FileExist "D:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows"
ElseIf FileExist "E:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows"
ElseIf FileExist "F:\Windows" Then
  SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows"
Else
  SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"
EndIf

предположим, что переменная %OfflineSystemDir% читается из ini файла, и файл содержит ключ, но значение там не установлено (пустое).
разбираем условие: если значение %OfflineSystemDir% или пустое, или равно с переменной %SystemRoot%, то происходит цикл проверок на наличие папки Windows на разных дисках. при первом же совпадении, эта папка устанавливается как значение переменной %OfflineSystemDir%.
если же ключ из ini файла был прочитан, и не совпадает со значением %SystemRoot% то он записывается в переменную %COMMANDER_OFFLINESYSTEM%.

Еще есть такой вопрос: как сделать так, чтобы проверка ElseIf FileExist "E:\Windows" Then проверяла так же не совпадает ли оно с %SystemRoot%?.
типа такового:
Code:
ElseIf (FileExist C:\Windows) AND (C:\Windows <> %SystemRoot%) Then


вот еще вариант, который я пробовал:
Code:
If %OfflineSystemDir% = False Then
  FileExist OfflineDirAtDriveC C:\Windows
  FileExist OfflineDirAtDriveD D:\Windows
  FileExist OfflineDirAtDriveE E:\Windows
  FileExist OfflineDirAtDriveF F:\Windows
ElseIf (%OfflineDirAtDriveC% = 1) AND (%SystemRoot% <> C:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows"
ElseIf (%OfflineDirAtDriveD% = 1) AND (%SystemRoot% <> D:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows"
ElseIf (%OfflineDirAtDriveE% = 1) AND (%SystemRoot% <> E:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows"
ElseIf (%OfflineDirAtDriveF% = 1) AND (%SystemRoot% <> F:\Windows) Then
  SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows" 
Else
  SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"
EndIf

#667:  Author: FlasherLocation: Москва PostPosted: Wed Jan 02, 2013 13:11
    —
Loopback wrote:
Пример KopBuH с использованием SID для шифрования вполне показателен, поскольку как я понял, это значение используется и после окончания запуска.
Для меня пока не показателен. Сам же назвал запрос очень специфичным. Я писал про неспецифичные задачи. А то, что используется после запуска, возвращается и без участия Autorun (мы только это обсудили).

KopBuH wrote:
приведи пожалуйста пример сравнения, если ключ в ini файле есть, но он пустой.
Я же приводил.
Только надо ставить конкретное значение, как у меня False, а не пустое.

А что даёт COMMANDER_OFFLINESYSTEM, чего не даст WINDIR?

#668:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 13:25
    —
Flasher wrote:
KopBuH wrote:
приведи пожалуйста пример сравнения, если ключ в ini файле есть, но он пустой.
Я же приводил.
Только надо ставить конкретное значение, как у меня False, а не пустое.


про конкретное значение я знаю, например у меня в некоторых ключах оно Unknown.
просто Loopback обещал добавить условие сравнения, если ключ в ini файле пустой. а поскольку в Readme.txt ничего не появилось, приходится писать сюда.

Flasher wrote:
А что даёт COMMANDER_OFFLINESYSTEM, чего не даст WINDIR?


я добавляю в сборку некоторые функции для работы с отключенной (оффлайн) системой: подключение оффлайн реестра, просмотр событий, анализ BSOD, выгрузка системных настроек и т.д.

#669:  Author: FlasherLocation: Москва PostPosted: Wed Jan 02, 2013 13:45
    —
KopBuH
Что в таком случае онлайн-система? Удалённое управление?
Реестр подключается прямиком из Autorun? Каким образом?

#670:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 13:52
    —
Flasher wrote:
KopBuH
Что в таком случае онлайн-система? Удалённое управление?

текущая активная система.
Flasher wrote:

Реестр подключается прямиком из Autorun? Каким образом?

реестр подключается через пункт меню:
http://i52.fastpic.ru/big/2013/0102/0b/2cb6ac3441245b833352b0c2681b260b.jpg
путь к реестру задается из Autorun.
но эти вопросы (как и ответы) по-моему не по теме топика Sad .

#671:  Author: FlasherLocation: Москва PostPosted: Wed Jan 02, 2013 13:58
    —
KopBuH wrote:
текущая активная система
Это как раз оффлайн (название сопряжено с работающей/неработающей сетью).
KopBuH wrote:
но эти вопросы (как и ответы) по-моему не по теме топика
Всё, что связано с Autorun и его примерами - по теме (по крайней мере касаемо вопросов).
KopBuH wrote:
Loopback обещал добавить условие сравнения, если ключ в ini файле пустой
Можно пруфлинк (не припомню, хотя тоже на эти грабли в своё время напоролся) ?

Last edited by Flasher on Wed Jan 02, 2013 14:05; edited 1 time in total

#672:  Author: Loopback PostPosted: Wed Jan 02, 2013 14:04
    —
MVV wrote:
Пришлось бы писать это дополнительное условие также и в каждой ветке Else[If].

Но не для того конкретного примера Smile
KopBuH wrote:
Скажем, вот на таком практическом примере:

Если нет разницы, пусто ли значение ключа, или он отсутствует совсем, то при использовании в IniRead в качестве дефолтного значения пустого значения можно сделать так:
Code:

If (%OfflineSystemDir% <> "") AND (%OfflineSystemDir% <> %SystemRoot%) Then
 SetEnv /EV COMMANDER_OFFLINESYSTEM %OfflineSystemDir%
ElseIf FileExist "C:\Windows" Then
 SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows"
ElseIf FileExist "D:\Windows" Then
 SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows"
ElseIf FileExist "E:\Windows" Then
 SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows"
ElseIf FileExist "F:\Windows" Then
 SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows"
EndIf

KopBuH wrote:
вот еще вариант, который я пробовал:

Так работать не будет, поскольку при первом совпадении условия, последующие условия не проверяются. Следовательно, переменные OfflineDirAtDriveC и т.д. нужно присваивать перед условием.
Code:

FileExist OfflineDirAtDriveC C:\Windows
FileExist OfflineDirAtDriveD D:\Windows
FileExist OfflineDirAtDriveE E:\Windows
FileExist OfflineDirAtDriveF F:\Windows

If (%OfflineDirAtDriveC% = 1) AND (%SystemRoot% <> C:\Windows) Then
 SetEnv COMMANDER_OFFLINESYSTEM "C:\Windows"
ElseIf (%OfflineDirAtDriveD% = 1) AND (%SystemRoot% <> D:\Windows) Then
 SetEnv COMMANDER_OFFLINESYSTEM "D:\Windows"
ElseIf (%OfflineDirAtDriveE% = 1) AND (%SystemRoot% <> E:\Windows) Then
 SetEnv COMMANDER_OFFLINESYSTEM "E:\Windows"
ElseIf (%OfflineDirAtDriveF% = 1) AND (%SystemRoot% <> F:\Windows) Then
 SetEnv COMMANDER_OFFLINESYSTEM "F:\Windows" 
Else
 SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"
EndIf


Flasher wrote:
Для меня пока не показателен. Сам же назвал запрос очень специфичным. Я писал про неспецифичные задачи. А то, что используется после запуска, возвращается и без участия Autorun (мы только это обсудили).

Переменные окружения, созданные в скриптах, не могут быть использованы в TC после выхода из скрипта. Функция устраняет это ограничение для тех случаев, когда значение, которое можно получить только внешним скриптом, нужно использовать в дальнейшем в ТС.
Я не могу сейчас сходу придумать такие примеры, однако ввиду универсальности решения, применение наверняка найдется.
KopBuH wrote:
просто Loopback обещал добавить условие сравнения, если ключ в ini файле пустой. а поскольку в Readme.txt ничего не появилось, приходится писать сюда.

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

#673:  Author: FlasherLocation: Москва PostPosted: Wed Jan 02, 2013 14:10
    —
Loopback wrote:
нужно использовать в дальнейшем в ТС
Ты имеешь в виду те самые кнопки/юзеркоманды, о которых я писал? Без примеров как-то не ахти. Sad Код не нужен, нужно простое описание.
Loopback wrote:
это дефолтное значение, которое записывается в переменную, если ключ отсутствует
Он имеет в виду, если ставить кавычки вместо значения.
Quote:
IniRead COMMANDER_LANGINI %COMMANDER_INI% Configuration LanguageIni ""

#674:  Author: Loopback PostPosted: Wed Jan 02, 2013 14:17
    —
Flasher wrote:
Ты имеешь в виду те самые кнопки/юзеркоманды, о которых я писал? Без примеров как-то не ахти.

Ну видишь ли, я сам до сих пор обходился без этого функционала. Потом появилась мысль, которая показалась перспективной, и при этом несложной в реализации. Думаю, со временем и идеи использования появятся.
Flasher wrote:

Он имеет в виду, если ставить кавычки вместо значения.

Получится пустая переменная. Ее можно проверить в условии как Var = "".

#675:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 14:19
    —
Loopback wrote:

Я не могу сейчас сходу придумать такие примеры, однако ввиду универсальности решения, применение наверняка найдется.

ладно, давай попробуем так: по идее, функция ProcessExecGetOutput запускает консольную программу, и выдает в переменную результат её работы, то есть её вывод.
можешь доработать такой пример (получение версии Windows)?:
Code:
ProcessExecGetOutput /EV COMMANDER_WINVER cmd.exe '/c ver'


Добавлено спустя 6 минут:

Loopback wrote:

Получится пустая переменная. Ее можно проверить в условии как Var = "".

а вот как бы не так:
ключ из ini-файла
Code:
WLanProfile=


Начало кода из конфига Autorun:
Code:

IniRead WLanProfile "%COMMANDER_PATH%\wincmd.ini" "WLan" "WLanProfile" ""
If %WLanProfile% = "" Then
...

запуск ТС:

#676:  Author: FlasherLocation: Москва PostPosted: Wed Jan 02, 2013 14:31
    —
KopBuH wrote:
по идее, функция ProcessExecGetOutput запускает консольную программу, и выдает в переменную результат её работы, то есть её вывод.
Необязательно консольную. Вопрос не в том, как получать переменную, вопрос в том, как и где её применять. Т.е. осмысленность создания псевдопеременной должна быть.

Loopback wrote:
Получится пустая переменная. Ее можно проверить в условии как Var = "".
Ну, ниже уже ответили, я, собственно, об этом же. Не предусмотрены пока пустые кавычки.

#677:  Author: Loopback PostPosted: Wed Jan 02, 2013 14:37
    —
KopBuH wrote:
а вот как бы не так:

Flasher wrote:
Не предусмотрены пока пустые кавычки.

Странно, совершенно точно проверял такой сценарий, и он работал. А сейчас выдает ошибку. Буду смотреть.

Добавлено спустя 43 минуты:

Попробуйте тестовую версию. Пустые значения должны работать.

#678:  Author: FlasherLocation: Москва PostPosted: Wed Jan 02, 2013 15:26
    —
Loopback
Порядок.

#679:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 15:44
    —
но теперь наблюдаю следующее:
Win8 x64, TotalCommander 32bit, запуск ТС происходит без тулбаров:
Скриншот
хотя если зайти в настройку тулбаров, там стоит основной тулбар, стоит нажать "ОК" - и тулбар нарисуется Sad
тестовая версия плагина ведь под 32 бита, поэтому запускаю ТС x64 - всё работает.
 !  Avada:
Внедрять в сообщения картинки такой ширины запрещено правилами форума. Выношу замечание и заменяю на ссылку.


Добавлено спустя 15 минут:

при закрытии ТС вылезло:

(вылазиет не всегда Sad )

строки конфига с 201 по 204:
If %WLanProfile% = Unknown Then
ElseIf %WLanDeleteProfile% = 1 Then
ShellExec /EV /SW_HIDE 'netsh.exe' 'wlan delete profile name="%WLanProfile%"'
EndIf

Добавлено спустя 12 минут:

изменил конфиг:
If %WLanProfile% = "" Then
теперь при выходе:


Добавлено спустя 2 минуты:

установка переменной происходит так:
IniRead WLanProfile "%COMMANDER_PATH%\wincmd.ini" "WLan" "WLanProfile" ""
код из wincmd.ini:
Code:
WLanProfile=


Добавлено спустя 3 минуты:

P.S. строки с 201-204 находятся в блоке выполнения при выходе, после комментария Pragma AutorunFinalizeSection

#680:  Author: Loopback PostPosted: Wed Jan 02, 2013 16:27
    —
KopBuH wrote:
Win8 x64, TotalCommander 32bit, запуск ТС происходит без тулбаров:

В этой версии не менялось ничего, кроме обработки кавычек в условиях. Т.е. если у тебя тулбары как-то завязаны на условия в Autorun, нужно проверить эти условия, возможно то, что раньше работало (неправильно), сейчас перестало.

KopBuH wrote:
при закрытии ТС вылезло:

Да, странное что-то. Эта ошибка вызывается только в случае, если в начале строки находится текст, который не может быть обработан. Т.е. не комментарий, не команда и не условие. Значит, одна из строк содержит символ "d". Поскольку вряд ли ты это не проверил, единственная мысль, которая пока приходит, что я что-то накосячил с чтением скрипта из файла или перекодированием, в результате чего в буфере появляются левые символы.

Кстати, а скрипт в какой кодировке?

#681:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 16:38
    —
кодировка конфига - ANSI
а как их проверять теперь, условия то? я ж не знаю, что изменилось в их механизме Sad
тулбары привязаны к переменной %commander_arch% и %commander_lang%. переменные нормально создаются, и содержат нужные значения:


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

#682:  Author: Loopback PostPosted: Wed Jan 02, 2013 17:00
    —
KopBuH wrote:
удалил все лишние комментарии из конфига - тулбары начали грузится.

Ну, пока не знаю, что тут могло быть. Надеюсь, удастся повторить достоверно.
KopBuH wrote:
но ошибка при выходе не исчезла, и всегда ругается на последную строку конфига.

Раз всегда - уже хорошо. Попробуй новую версию по той же ссылке.

#683:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 17:13
    —
в 32битной версии ошибка вроде исчезла.
можешь откомпилить x64?


Last edited by KopBuH on Wed Jan 02, 2013 17:23; edited 2 times in total

#684:  Author: Loopback PostPosted: Wed Jan 02, 2013 17:16
    —
KopBuH
Конечно, та же ссылка.

#685:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 17:23
    —
сообщения об ошибке исчезли в обоих версиях.

P.S.: глюк с загрузкой тулбаров не исчез. тулбар иногда не подгружается. а так - грузится.
сейчас просто еще раз запустил - не загрузился. загрузил вручную, нажав ОК в настройке тулабара, вышел из ТС, открыл ТС - тулбар загрузился.
код из wincmd.ini:
Code:
Buttonbar=%commander_path%\Configs\wcmd%commander_arch%_%commander_lang%.BAR

переменные загруженны нормальном, значения в них есть.

наблюдаю еще такое:
код из конфига:
Code:
IniRead OfflineSystemDir "%COMMANDER_PATH%\wincmd.ini" "OFFLINESYSTEM" "OfflineSystemDir" "C:\Windows"
SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"

ключ в ini файле стоит пустой.
при запуске плагин сообщает, что нужно установить имя переменной.

#686:  Author: Loopback PostPosted: Wed Jan 02, 2013 17:27
    —
KopBuH wrote:
сейчас просто еще раз запустил - не загрузился. загрузил вручную, нажав ОК в настройке тулабара, вышел из ТС, открыл ТС - тулбар загрузился.

Кстати, возникла такая мысль: поскольку команды Autorun работают в отдельном потоке, может быть возникает ситуация, когда Тотал загружает меню до того, как Autorun успевает присвоить переменные?

Это может быть связано, например, с командой получения SID, поскольку скрипт выполняется достаточно медленно. Попробуй ее перенести в самый конец секции загрузки.

#687:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 17:32
    —
а с этим как быть?
код из конфига:
Code:
IniRead OfflineSystemDir "%COMMANDER_PATH%\wincmd.ini" "OFFLINESYSTEM" "OfflineSystemDir" "C:\Windows"
SetEnv /EV COMMANDER_OFFLINESYSTEM "%OfflineSystemDir%"


ключ в ini файле стоит пустой.
при запуске плагин сообщает, что нужно установить имя переменной.
или нужно каждый раз создавать условие, если ключ и в ini файле будет пустой?.

P.S.:
оптимизировал код конфига, с тулбарами пока все вроде нормально.

#688:  Author: Loopback PostPosted: Wed Jan 02, 2013 17:52
    —
KopBuH
Вообще-то да, сейчас посмотрел повнимательнее - переменная окружения таки может быть пустой. Ее удаление происходит не при присвоении пустой строки, а при присвоении null. Наверно, смутил еше плагин Environment, не позволяющий сохранить пустую строку. Убираем.

С тулбарами что-нибудь прояснилось?

#689:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 18:02
    —
оптимизировал код конфига, с тулбарами вроде все пока нормально.
скажешь потом, что будем делать, если ключ будет пустой, но значение по умолчанию должно быть не пустым.

#690:  Author: Loopback PostPosted: Wed Jan 02, 2013 18:56
    —
KopBuH wrote:
скажешь потом, что будем делать, если ключ будет пустой, но значение по умолчанию должно быть не пустым.

Проверять в условии, что же еще?

#691:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 02, 2013 19:34
    —
да, вот сделал пример для функции ProcessExecGetOutput:
если в конфиге много комманд, строку нужно добавлять где-то в середину конфига.
вторую строчку лучше ближе в конец конфига

Code:
# Получение версии ОС с помощью командной строки Windows
ProcessExecGetOutput OSVER %COMSPEC% '/c ver'

# Создание переменной содержащей версию Windows
SetEnv /EV COMMANDER_OSVER "%OSVER%"

#692:  Author: FlasherLocation: Москва PostPosted: Thu Jan 03, 2013 01:06
    —
Loopback wrote:
Это может быть связано, например, с командой получения SID, поскольку скрипт выполняется достаточно медленно. Попробуй ее перенести в самый конец секции загрузки.
Лучше просто как следует передавать поток, не давая скрипту пройти весь цикл. Делается либо указанием возвращаемых атрибутов вместо * и выходом из цикла Exit For
Code:
For Each Item In GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT SID FROM Win32_UserAccount where" &_
" Name='" & CreateObject("WScript.Network").UserName & "'") : WScript.Stdout.Write Item.SID : Exit For : Next
либо (что ещё лучше) напрямую с получением сида из дочернего объекта WMI:
Code:
With CreateObject("WScript.Network")
WScript.Stdout.Write GetObject("winmgmts:\\.\root\CIMV2:Win32_UserAccount.Domain='" & .UserDomain & "',Name='" & .UserName & "'").SID
End With

#693:  Author: Loopback PostPosted: Thu Jan 03, 2013 13:28
    —
KopBuH wrote:
да, вот сделал пример для функции ProcessExecGetOutput:

Ок, можно будет добавить, но все что касается плагинов - только в закомментированном виде.

Flasher
Твой вариант, теоретически, более оптимален. Но ты пробовал сравнивать время отработки скрипта? Уверен, что на десятке учетных записей это будут миллисекунды. Я же при вызове cscript наблюдаю задержку минимум полсекунды. Визуально разницы между двумя вариантами не заметил. Так что скорее всего это издержки именно cscript.

#694:  Author: FlasherLocation: Москва PostPosted: Thu Jan 03, 2013 14:04
    —
Loopback
10 учёток и 16 атрибутов - миллисекунды? Ну, не знаю. WMI сам по себе долго свою базу загружает. К тому же текущая учётка может оказаться в конце списка, как у меня, например. Мой опыт подсказывает, что это могут быть и доли секунды, при большом списке - секунда и более. Могу, конечно, накидать отладочный скрипт - проверить, но у меня нет и 10-ти учёток.
А полсекунды (да ещё и минимум) - это уже не мало, с учётом того, сколько всего в autorun-е другого вызывается. И это уже не теория.
А два варианта - какие имеешь в виду? Оба - мои? Или твой и какой-то из моих?

#695:  Author: Loopback PostPosted: Thu Jan 03, 2013 19:37
    —
Flasher
Мой и твой второй.

Да я, собственно, и не спорю, что оптимизированные решения лучше. Просто это тот случай, когда оптимизация незаметна. Может быть на сотне учеток будет заметнее, не знаю.

Кстати, для сравнения, команда ver отрабатывает значительно быстрее. Но все равно с заметной задержкой.

#696:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Jan 04, 2013 13:19
    —
слушай, Loopback
а не мог бы ты добавить определение в переменной %AUTORUN_OSVERSION% среды Preinstallation Environment (PE), а Smile ?
и еще сделать бы переменную с языком текущей ОС, например %AUTORUN_OSLANG%, хотя бы русский и английский? Rolling Eyes

сейчас я делаю это так:
Code:
# Проверка локализации (языка) ОС
RegRead COMMANDER_OSLANG "HKCU\Control Panel\International" "Locale" "unknown"
If %COMMANDER_OSLANG% = 00000419 Then
  SetEnv COMMANDER_OSLANG "Rus"
ElseIf %COMMANDER_OSLANG% = 00000409 Then
  SetEnv COMMANDER_OSLANG "Eng"
Else
  SetEnv COMMANDER_OSLANG "Unknown"
EndIf

а коды языков можно взять здесь:
http://www.science.co.il/language/locale-codes.asp

#697:  Author: Loopback PostPosted: Fri Jan 04, 2013 14:16
    —
KopBuH wrote:
а не мог бы ты добавить определение в переменной %AUTORUN_OSVERSION% среды Preinstallation Environment (PE), а ?

Если это можно определить программно. Я поискал - что-то не нашел ничего полезного.
KopBuH wrote:
сейчас я делаю это так:

И чем же плох способ? Вполне корректно и надежно. Ну я понимаю еще, если бы способа не было или он был запредельно сложный.

Если я сделаю такую переменную, то язык она будет содержать только в виде, который можно получить напрямую: либо код языка (en, ru), либо его LSID (00000419). Потому что
KopBuH wrote:
хотя бы русский и английский

такой вариант неприемлем.

#698:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Jan 04, 2013 14:54
    —
Loopback wrote:

И чем же плох способ? Вполне корректно и надежно. Ну я понимаю еще, если бы способа не было или он был запредельно сложный.

либо код языка (en, ru), либо его LSID (00000419). Потому что
KopBuH wrote:
хотя бы русский и английский

такой вариант неприемлем.


LSID подойдет.
только если без нолей в начале. например просто 419.
а имя переменной такое например: %AUTORUN_OSLANGID%

#699:  Author: FlasherLocation: Москва PostPosted: Fri Jan 04, 2013 17:59
    —
Loopback wrote:
либо код языка (en, ru)
Лучше код. Его же сразу задействовать можно. LSID ни к селу, ни к городу.

#700:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Jan 04, 2013 19:42
    —