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
    —
Да, прямой код лучше.
но всё дело в том, что в XP код языка в реестре еще не придумали, и там есть только параметр Locale, содержащий числовой код.
вот именно поэтому я сделал универсальный вариант с числовым значением.
в Win7/8 есть параметр LocaleName содержащий строковой код, типа "ru-RU"
Loopback, глянь его здесь:
HKCU\Control Panel\International

#701:  Author: FlasherLocation: Москва PostPosted: Fri Jan 04, 2013 21:21
    —
Не знаю точно, что там в реестре XP, но никто не пишет про получение данных из него, есть же API типа GetCPInfo, GetLocaleInfo и т.п. И никто не мешает автору программно сопоставить с ID коды языков.

Есть, кстати, и другие ветки:
HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\

#702:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Jan 05, 2013 09:43
    —
Flasher wrote:

Есть, кстати, и другие ветки:
HKLM\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\
HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\

такие ветки есть. и да, по второй ветке указана локализация при установке системы.
но про выше упомянутому мной ключу реестра, а именно HKCU\Control Panel\International находится код локализации именно текущего пользователя. дело в том, что сам Windows может быть английским, но локализация пользовательской среды - русской. имхо, тогда лучше определять значение из HKCU, ведь именно под ним и будет запускаться ТС.

#703:  Author: Loopback PostPosted: Sat Jan 05, 2013 15:05
    —
Читать реестр я, разумеется, не буду. Для этого есть функция GetLocaleInfo. В висте и выше есть ее расширенный вариант, но ограничивать использование этими системами преждевременно.

Функция возвращает много разных значений, но здесь применимы только два: LCID (0419) или трехбуквенная аббревиатура языка (RUS). Не исключено, что последняя будет коррелировать с именами языков TC.

#704:  Author: FlasherLocation: Москва PostPosted: Sat Jan 05, 2013 15:34
    —
Loopback
Сойдёмся на алфавитных кодах языков по ISO 639-3?

#705:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Jan 05, 2013 15:50
    —
Зачем встраивать то, что элементарно реализуется 5 строчками Autorun-скрипта (благодаря функциям чтения из реестра) и за несколько лет существования плагина понадобилось 1 раз?

#706:  Author: FlasherLocation: Москва PostPosted: Sat Jan 05, 2013 16:09
    —
MVV
Не реализуется. Из реестра ты такие коды не достанешь. Только ISO 639-1/3166-1, а это не то, что нужно.

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

#707:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Jan 05, 2013 16:39
    —
В разделе HKCU\Control Panel\International может быть есть другие ключи, дающие нужное значение? Locale - это по определению не язык интерфейса, а кодировка для не-юникодных программ. Параметр Language какое значение содержит?

#708:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Jan 05, 2013 17:00
    —
однако, смею не согласится:
Поменял эти параметры, перезагрузка была произведена, потом был взят скрин:
http://i51.fastpic.ru/big/2013/0105/85/fc4bbe6ff3ed2e3c8642068cbbadf985.jpg
и потом, помоему этот параметр влияет на всю систему, а не только на текущего пользователя. и значит значение должно было бы быть не в HKCU.

#709:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Jan 05, 2013 18:05
    —
Я ж говорю, локаль - это не язык интерфейса. На скрине показан диалог выбора локали.

#710:  Author: Loopback PostPosted: Mon Jan 07, 2013 12:52
    —
Flasher
В стандарте ISO 639-3 сейчас более 7,5 тысяч записей. Даже если исключить мертвые языки, все равно остается очень много.

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

#711:  Author: FlasherLocation: Москва PostPosted: Mon Jan 07, 2013 14:25
    —
Loopback
Меня бы устроило кол-во из этой таблицы.
Флаг даёт верхний регистр. Нижний сделай тогда. Ок?

#712:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 07, 2013 16:38
    —
На хрена забивать такую здоровую таблицу в код? Кому надо, пусть сохранит её себе и смотрит коды по ней. Вряд ли кто-то будет использовать больше 2-3 значений... Вполне достаточно получить номер локали.

#713:  Author: FlasherLocation: Москва PostPosted: Mon Jan 07, 2013 16:50
    —
Опять ты со своим вечным вопросом "зачем". Smile
Всю-то таблицу не пришлось бы забивать, только один столбец.
Кто сколько значений будет использовать - это дело десятое. Мультиязычность никто не отменял. И использовать будут, естественно, одну, свою любимую. Вопрос в том - кто будет использовать. Wink
И уже далее идёт текст про флаг, так что вопрос с "хреном" лишний.

#714:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jan 07, 2013 20:38
    —
MVV wrote:
Вряд ли кто-то будет использовать больше 2-3 значений... Вполне достаточно получить номер локали.

я тоже с этим согласен, номер локали устроит, если значение "rus" или "eng" будет сложно получить напрямую.

#715:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 07, 2013 20:48
    —
Flasher,
Да, я за разумный минимализм. Забивать надо два столбца. Числа и строки. Но перегружать плагин этой информацией нет никакого смысла, т.к. нет никакой разницы, числа сравнивать в скрипте или их строковые обозначения, а сам скрипт явно не предназначен для чтения блондинками.

#716:  Author: FlasherLocation: Москва PostPosted: Mon Jan 07, 2013 21:17
    —
MVV
Номер локали не нужен. Уже назван необходимый флаг. Что тебя не устраивает я не пойму? Сослагательного наклонения в моих пояснениях до сих пор не видно? Я даже жирным персонально для тебя выделил.
А вот то, что переменная предназначена не только для сравнения в конфиге, ты должен осознавать.

#717:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 07, 2013 21:22
    —
Для 2-3 строковых обозначений интересующих языков можно в скрипте поставить If ... Else и определить новую переменную. В которую уже пихать что душе угодно. Или вообще можно передать число скрипту или утилите, которая вернёт строковое обозначение. А базовый плагин должен предоставлять самые необходимые функции.

#718:  Author: FlasherLocation: Москва PostPosted: Mon Jan 07, 2013 21:35
    —
Базовые - это какие? Все, что сейчас уже есть, с твоей точки зрения, базовые? Предлагаешь всё свести к твоей базовости? Неправильно это. К тому же мы уже ознакомлены с минусами получения данных иными способами. Всё, что получается через плагин, будет возвращаться значительно быстрее.
Меня ответ Loopback по поводу того, что будет, устраивает, и не вижу логики в том, чтобы этому сопротивляться. Ты от этого точно ничего не потеряешь.

#719:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 08, 2013 09:42
    —
Конечно быстрее, но недаром же плагин поддерживает плагины, зачем перегружать основной плагин, когда можно любую фигню получить через подплагин, особенно когда никаких проблем с этим нет.

А из того, что есть, часть уже можно было бы обособить))

#720:  Author: FlasherLocation: Москва PostPosted: Tue Jan 08, 2013 09:49
    —
MVV
Там на GetLocalInfo уйдёт "пару" строк. Отдельный плагин городить?

MVV wrote:
Параметр Language какое значение содержит?
Language или sLanguage?

#721:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 08, 2013 12:44
    —
Возможно, стоит все такие Get*** можно вынести в один плагин, получающий всякие сведения о системе.

Да, я имел в виду sLanguage (другого там нет, первая буква используется для обозначения типа). По-моему, он должен содержать как раз язык интерфейса (MUI)...

#722:  Author: FlasherLocation: Москва PostPosted: Tue Jan 08, 2013 15:48
    —
MVV
Я не против плагина, который будет получать кучу системных сведений. Тогда нужно обсудить, какие функции он в себе объединит, и кто за его написание возмётся.

sLanguage даёт также верхний регистр. Ключ точно есть на всех версиях винды?

#723:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 08, 2013 16:59
    —
Ключ-то есть даже на Win2K, но похоже, это не то.

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

#724:  Author: Victor_Dobrov PostPosted: Wed Jan 09, 2013 02:34
    —
Loopback

ошибка Autorun.wdx64 beta11 при закрытии TotalCmd64.exe (x32 работает нормально):

Autorun Plugin error:
Error in command at line [27]:
Unknown command: e

если убрать строку
Pragma AutorunFinalizeSection

то ошибка появляется при запуске TotalCmd64.exe

Autorun.wdx64 beta6 работает (и выполняет скрипты) без ошибок
система: Windows Server 2003 SP2 x64 (5.2.3790)

#725:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jan 09, 2013 10:26
    —
Victor_Dobrov,
Напрашивается мысль, что после строки Pragma AutorunFinalizeSection находится строка с ошибкой... Тогда вполне логично, что с этой строкой ошибка при закрытии тотала, а без неё - при открытии. Попробуй для теста оставить в конфиге лишь те строки, что лежат после строки Pragma AutorunFinalizeSection, если ошибка повторится, думаю, будет полезно их здесь привести. Методом исключения также можно попытаться определить конкретную строчку (начать со строки номер 27).

#726:  Author: Loopback PostPosted: Wed Jan 09, 2013 11:41
    —
MVV
Flasher
Можно, конечно, вынести получение разной информации в плагин. Только много ли это даст выигрыша? Не в размере - уж точно.

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

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

#727:  Author: FlasherLocation: Москва PostPosted: Wed Jan 09, 2013 13:55
    —
Loopback wrote:
Только много ли это даст выигрыша?
Не думаю. Тебе виднее. Идея не моя.
Loopback wrote:
определиться, какую информацию в плагин, какую оставить
Т.е. цель только в переносе? Или же мы про новые функции?

#728:  Author: Loopback PostPosted: Sun Jan 13, 2013 11:56
    —
Flasher wrote:
Т.е. цель только в переносе? Или же мы про новые функции?

И в переносе, и потенциальном добавлении новых.

В общем, в целом идея правильная, поскольку полезных системных параметров огромное количество, и все подряд их добавлять нерационально. Предполагаю все переменные, относящиеся к параметрам и метрикам системы, размещать в отдельном плагине Sysinfo. Т.е. из основного вынести переменные OSARCH, OSVERSION и DESKTOP*. При этом поменять префикс переменных: SYSINFO_OSARCH и т.д.

#729:  Author: FlasherLocation: Москва PostPosted: Sun Jan 13, 2013 17:03
    —
Loopback wrote:
полезных системных параметров огромное количество
Раз так оно и есть, давайте обсудим каких, чтобы действительно понимать осмысленность переноса.
К примеру, GetSystemMetrics, GetWindowMetrics, GetWorkArea уже есть в TCFS2Tools. Его же можно будет к autorun.cfg прикрутить?

#730:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jan 13, 2013 18:50
    —
Quote:
Его же можно будет к autorun.cfg прикрутить?

Если научить Autorun посылать оконные сообщения и возвращать результат в виде строк. Но это будет сложный способ вызова.

#731:  Author: FlasherLocation: Москва PostPosted: Sun Jan 13, 2013 18:53
    —
MVV wrote:
научить Autorun ... возвращать результат в виде строк
А сейчас он этого не умеет?
Этот "сложный" вызов кто может реализовывать? Ты или Loopback?

#732:  Author: Loopback PostPosted: Mon Jan 14, 2013 12:05
    —
Flasher
Какой смысл получать эти значения передачей сообщений через дополнительные утилиты, когда всё гораздо проще и надежнее реализовать нативно, функцией?

#733:  Author: FlasherLocation: Москва PostPosted: Mon Jan 14, 2013 12:07
    —
Loopback
TCFS2Tools - это дочерний плагин Autorun (хотя может подключаться и как отдельный wdx), а не утилита.

#734:  Author: Loopback PostPosted: Mon Jan 14, 2013 12:20
    —
Flasher
Я знаю, но он Autorun-ом только загружается, не взаимодействуя с ним.

#735:  Author: FlasherLocation: Москва PostPosted: Mon Jan 14, 2013 12:34
    —
Loopback
Как и ScrollTC. Но мы же не исключаем возможности взаимодействия. Я об этом как раз и писал.

#736:  Author: Loopback PostPosted: Mon Jan 14, 2013 14:25
    —
Flasher
Не исключаем. Но вообще логичнее, если вся системная информация будет в одном плагине. Иначе зачем это всё было затевать?

#737:  Author: FlasherLocation: Москва PostPosted: Mon Jan 14, 2013 14:31
    —
Loopback
Я к тому, что есть ли вообще смысл что-то вытаскивать в отдельный плагин, если можно оставить как есть и доработать TCFS2Tools. По логике этого должно хватить. Я же спросил про информацию, больше никто ничего не предложил.

#738:  Author: jentoso PostPosted: Mon Jan 14, 2013 15:34
    —
Почитал тему, но остался один вопрос. Этот плагин предназначен для выполнения команд только при запуске ТС или он еще используется вовремя работы в ТС, помимо загруженных библиотек через него?

#739:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Jan 14, 2013 16:05
    —
jentoso
Используется. И с библиотеками, и помимо. Скажем, установленная переменная используется, естественно, в течение всего сеанса TC. Изменённый вид диалога копирования — соответственно, тоже. И так далее.

#740:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 14, 2013 20:58
    —
jentoso,
Сам плагин выполняет свои действия только в моменты запуска и закрытия тотала. Но изменения, внесённые им (такие как запуск других модулей и объявление переменных окружения), имеют силу на протяжении всего сеанса работы тотала.

#741:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Thu Jan 17, 2013 15:50
    —
Loopback:
есть предложение:
сделать два отдельных файла конфига. чтобы 32-х битный (autorun.wdx) обрабатывал autorun32.cfg
а 64-х - autorun64.cfg.
тогда из конфига можно будет исключить очень много строк скрипта, и ускорить запуск и выполнение функций.

#742:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Jan 17, 2013 15:54
    —
KopBuH,
А по-моему наоборот, один конфиг позволяет объединить одинаковые команды для обоих разрядностей в одном месте. А если размножать файлы, то только с помощью команды Include подключения содержимого другого CFG-файла... Тогда в блоке для каждой разрядности можно будет свой конфиг подключить.

#743:  Author: Loopback PostPosted: Thu Jan 17, 2013 22:03
    —
Не, два раздельных конфига это как-то не очень. Да и не для этого я городил механизм с dll/dll64 Smile

Вариант с include, несомненно, более правильный, собственно, он уже упоминался в ветке раньше, и я от этой идеи не отказывался. Однако в существующем варианте, когда Autorun не поддерживает вложенные условия, для разделения 32/64 конфигураций толку от него достаточно мало.

#744:  Author: Loopback PostPosted: Sun Jan 20, 2013 12:56
    —
Двенадцатая бета.

Скачать

Изменения:

Code:

+ добавлен API для С++
* системная информация перенесена в плагин Sysinfo
+ добавлен плагин Sysinfo
- исправлена работа с пустыми строками в сравнении
- исправлена загрузка скрипта в некоторых ситуациях

#745:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Jan 20, 2013 16:02
    —
Классно!.

теперь неплохо было бы разжевать функции из плагина sysinfo
что такое GetSystemMetrics? (просто я не юзал TCFSTools, или как их там Smile )

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

насколько я понял, OSLANG там нет?

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

текст из readme:
AutorunBlockUnload <True/False> - команда временно оставлена для совместимости, используйте вместо нее "Pargma AutorunBlockUnload".
очепятка Wink .

#746:  Author: Loopback PostPosted: Sun Jan 20, 2013 16:21
    —
KopBuH wrote:
что такое GetSystemMetrics?

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

Есть, забыл добавить в документацию. Константа SYSINFO_USERLANG. User - потому что язык активного пользователя.
KopBuH wrote:
очепятка .

Исправлю.

#747:  Author: FlasherLocation: Москва PostPosted: Sun Jan 20, 2013 16:32
    —
Loopback
Такую добавь, пож-та.

Loopback wrote:
исправлена загрузка скрипта в некоторых ситуациях
На MoveButton, кажется, плагин при перезапуске ТС после своего обновления или правки cfg ругаться перестал. Хотя, может, это и в предыдущей бете уже так было. Rolling Eyes

#748:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Jan 20, 2013 18:03
    —
прикрутил:
Code:
SetEnv /EV COMMANDER_OSLANG %SYSINFO_USERLANG%

спасибо, вроде работает
вопрос: определение каких языков поддерживает SYSINFO_USERLANG?

#749:  Author: FlasherLocation: Москва PostPosted: Sun Jan 20, 2013 18:37
    —
KopBuH wrote:
определение каких языков поддерживает SYSINFO_USERLANG?
Полагаю, из этого списка.

Loopback, а как же моя просьба о нижнем регистре?

#750:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Jan 20, 2013 20:33
    —
Loopback,
AUTORUN_OSARCH теперь SYSINFO_OSARCH? В Readme ни слова.

Flasher, сравнение ж регистронезависимое вроде.

#751:  Author: FlasherLocation: Москва PostPosted: Sun Jan 20, 2013 21:29
    —
MVV
Flasher wrote:
переменная предназначена не только для сравнения в конфиге

#752:  Author: Loopback PostPosted: Sun Jan 20, 2013 22:29
    —
KopBuH wrote:
вопрос: определение каких языков поддерживает SYSINFO_USERLANG?

Flasher wrote:
Полагаю, из этого списка.

Нет, трехбуквенные, что выдаются GetLocaleInfo с флагом LOCALE_SABBREVLANGNAME. Двухбуквенные значения по ISO, насколько я помню, можно получить только в Vista и выше.

Flasher wrote:
а как же моя просьба о нижнем регистре?

Забыта. Сделаю.

#753:  Author: FlasherLocation: Москва PostPosted: Sun Jan 20, 2013 22:36
    —
Loopback wrote:
Нет, трехбуквенные
Был вопрос про языки, а не обозначения.
Loopback wrote:
Сделаю.
ОК.

#754:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 00:07
    —
Может, добавить для команды SetEnv флаг указания регистра символов в создаваемой переменной? Типа, /CU - все большие, /CL - все маленькие. Будет универсальное средство.

#755:  Author: FlasherLocation: Москва PostPosted: Mon Jan 21, 2013 00:29
    —
Тогда уж лучше функции LCase()/UCase, переменную необязательно передавать в окружение.

#756:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jan 21, 2013 09:19
    —
MVV wrote:
Loopback,
AUTORUN_OSARCH теперь SYSINFO_OSARCH? В Readme ни слова.

у меня пока работает через AUTORUN_OSARCH. видимо, префикс пока не изменили.

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

но думаю подключение SysInfo теперь обязательно

#757:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 09:46
    —
KopBuH,
А у меня ругался при каждом запуске, пока не исправил. И ещё ругался на сравнение ==, хотя 1.6b1 прекрасно работала с таким:
Code:
If %AUTORUN_OSARCH% == 64 Then

Теперь работает только с таким (при подключенном плагине):
Code:
If %SYSINFO_OSARCH% = 64 Then

#758:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jan 21, 2013 10:13
    —
MVV wrote:
KopBuH,
А у меня ругался при каждом запуске, пока не исправил. И ещё ругался на сравнение ==, хотя 1.6b1 прекрасно работала с таким:
Code:
If %AUTORUN_OSARCH% == 64 Then


так сравнение по == отменили еще в b8 или 9.
я выше писал про это в топике.
MVV wrote:

Теперь работает только с таким (при подключенном плагине):
Code:
If %SYSINFO_OSARCH% = 64 Then

и правда Rolling Eyes
но в ридми написано так:
Code:
%AUTORUN_OSARCH% - архитектура ОС, где работает Total Commander. Может быть 32 или 64.
%AUTORUN_OSVERSION% - версия ОС где работает Total Commander. Может принимать значения:

#759:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 10:15
    —
Я уже писал, что в Readme не исправлено.
MVV wrote:
AUTORUN_OSARCH теперь SYSINFO_OSARCH? В Readme ни слова.

#760:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jan 21, 2013 10:20
    —
у меня не ругался потому что:
Code:
If %AUTORUN_OSARCH% = 64 Then
  SetEnv COMMANDER_OSARCH x64
ElseIf %AUTORUN_OSARCH% = 32 Then
  SetEnv COMMANDER_OSARCH x86
EndIf

я и незаметил, что у меня под XP архитектура "64" Smile
хотя если переменная отсутствовала, то как значение принимало x64 Rolling Eyes ?

#761:  Author: Loopback PostPosted: Mon Jan 21, 2013 11:30
    —
Flasher wrote:
Такую добавь, пож-та.

С этой не так просто. У нее для разных параметров совершенно разный тип возвращаемых данных, напрямую не сделаешь.

MVV wrote:
Я уже писал, что в Readme не исправлено.

Там теперь указаны только те переменные, которые остались в основном плагине. И указание, что дополнительные системные константы реализованы в плагине.

А сами переменные перечислены в разделе плагинов для Sysinfo.

Когда справку в html переделаю, можно будет внутреннюю ссылку сделать.

#762:  Author: ask-rusLocation: Russian Federation PostPosted: Mon Jan 21, 2013 15:10
    —
Как бы зарегистрировать библиотеку?
Прилагаемый к программе батник по регистрации выглядит следующим образом:
Code:
%systemroot%\system32\regsvr32 /s redist\x64\TextCaptureLib.dll
%SystemRoot%\Syswow64\regsvr32 /s redist\x86\TextCaptureLib.dll

Чтобы разрегистрировать:
Code:
%systemroot%\system32\regsvr32 /u redist\x64\TextCaptureLib.dll
%SystemRoot%\Syswow64\regsvr32 /u redist\x86\TextCaptureLib.dll

У меня 64-битная ОСь, здесь мне непонятно, почему regsvr32 из system32, а не из Syswow64 регистрирует 64-битную библиотеку...
Необходимо выполнить команду по регистрации нужной мне библиотеки.
Что-то такое:
Code:
ShellExec '%systemroot%\system32\regsvr32' '%COMMANDER_PATH%\SOFT\TextCatch\redist\x64\TextCaptureLib.dll'

не работает.
Я так понимаю, не знает %COMMANDER_PATH%, но как быть тогда Question, цель - портабельность.
При выгрузке TC желательно библиотеку разрегистрировать.

#763:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 15:36
    —
ask-rus,
Оригинальные умы Microsoft вместо добавления папки System64 для 64-битной подсистемы придумали редирекцию: папка 64-битной подсистемы называется System32, а 32-битной - SysWow64, которая в 32-битном окружении подставляется вместо System32. Батник в таком виде будет работать только при запуске из 64-битной среды. В 32-битной обе папки (System32 и SysWow64) указывают на 32-битную подсистему.

Исходя из комстроки regsvr32, параметр /s отключает сообщения об ошибках, параметр /c позволяет зарегистрировать/разрегистрировать библиотеку только для данного пользователя (плюс к портабельности, т.к. не нужны права админа), параметр /u указывает, что нужно разрегистрировать библиотеку.

Т.о., в Autorun.cfg должно быть примерно следующее:
Code:
LoadLibrary Plugins\Autorun_SysInfo.dll

If %SYSINFO_OSARCH% = 64 Then
SetEnv X__ 64
Else
SetEnv X__ 32
EndIf

ShellExec '%SystemRoot%\System32\regsvr32.exe' '/c /s "%COMMANDER_PATH%\SOFT\TextCatch\redist\x%X__%\TextCaptureLib.dll"'

Pragma AutorunFinalizeSection

ShellExec '%SystemRoot%\System32\regsvr32.exe' '/u /c /s "%COMMANDER_PATH%\SOFT\TextCatch\redist\x%X__%\TextCaptureLib.dll"'

#764:  Author: Loopback PostPosted: Mon Jan 21, 2013 15:42
    —
В ShellExec еще надо добавить /EV, чтобы развернуть переменные.

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

#765:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jan 21, 2013 15:47
    —
Ask-rus
сделай так:
ShellExec /EV 'программа.exe' '%COMMANDER_PATH%\dll.dll'
а за пример возьми пост MVV

P.S.: опоздал чуток от Loopback Smile


Last edited by KopBuH on Mon Jan 21, 2013 15:53; edited 2 times in total

#766:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 15:50
    —
Loopback,
Приделай минус для отключения: /EV-. А по умолчанию пусть разворачивает.

#767:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jan 21, 2013 15:58
    —
Loopback wrote:
Вообще, сейчас уже очевидно, что идея разворачивать переменные только при явно заданном ключе не самая удачная, поскольку переменные приходится разворачивать в подавляющем большинстве случаев. Нужно было делать обратный ключ.

но если сейчас сделаешь так, то придется еще много чего менять, не только ShellExec.
к тому же всем придется еще также переписывать свои конфиги. если люди не читают справку, то ты тут не виноват Wink .

#768:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 16:04
    —
KopBuH,
1. Конфиги и так переделывать надо (пару примеров я приводил),
2. Вряд ли у кого-то что-то сломается, если вдруг добавится раскрытие переменных окружения по умолчанию - символ процента, тем более более одного раза в строке, в путях встречается крайне редко. А наличие параметра /EV ничего не сломает, если по умолчанию переменные и так раскрываются.

#769:  Author: Loopback PostPosted: Mon Jan 21, 2013 16:40
    —
А у меня давно уже крутится мысль сделать директиву, чтобы все переменные в пределах ее действия разворачивались по-умолчанию.

#770:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 17:11
    —
Можно и так. Тогда прописать её включение в дефолтный конфиг. Но поддержку параметров /EV и /EV- оставить для определённости конкретных случаев.

#771:  Author: ask-rusLocation: Russian Federation PostPosted: Mon Jan 21, 2013 18:24
    —
Quote:
---------------------------
Autorun plugin error
---------------------------
Error in command at line [33]:

Unknown command: Pragma
---------------------------
ОК
---------------------------

...
Загружать Autorun_SysInfo.dll обязательно?

#772:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 18:33
    —
ask-rus,
Какая версия-то плагина у тебя (номер беты)? Pragma, SysInfo - это относилось к последней, 12-й.

Если не загрузишь плагин, его переменные будут недоступны.

#773:  Author: ask-rusLocation: Russian Federation PostPosted: Mon Jan 21, 2013 18:44
    —
Обновился.
Какая-то ошибка:
Quote:
---------------------------
Autorun plugin error
---------------------------
Error in command at line [18]:

Incorrect syntax in expression: 64 == 32
---------------------------
ОК
---------------------------

#774:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 18:49
    —
Ну а теперь читай последние 2-3 страницы, я про это уже писал. Very Happy

#775:  Author: ask-rusLocation: Russian Federation PostPosted: Mon Jan 21, 2013 18:50
    —
Новая версия - круто. Оставил только свои рабочие строки и ошибки не стало.

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

MVV, Loopback, KopBuH
Спасибо. Wink

#776:  Author: Loopback PostPosted: Mon Jan 21, 2013 20:53
    —
Пока ехал домой, думал. Нет, все же директива будет не очень хорошо, поскольку тогда придется городить поддержку этого функционала в плагинах, чего совсем не хочется.

Все же идея MVV выглядит более правильной. Можно оставить /EV для совместимости, документировав его как устаревший (deprecated). А ввести обратный флаг (/EV- или /NEV или /NE) для отмены разворачивания. Флаг /EE можно оставить, поскольку эскейпы нужны редко.

А можно /EV и совсем убрать - поскольку новая версия планируется как можорное обновление, и некоторые "breaking changes" допустимы.

#777:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 21:11
    —
Quote:
А ввести обратный флаг (/EV- или /NEV или /NE)

Я предложил лучший вариант - /EV-. Это очень популярный способ отключения различных функций параметрами командной строки.

Quote:
поскольку новая версия планируется как можорное обновление

В этом плюс вечных бет. Very Happy

#778:  Author: FlasherLocation: Москва PostPosted: Mon Jan 21, 2013 23:17
    —
Loopback wrote:
С этой не так просто. У нее для разных параметров совершенно разный тип возвращаемых данных, напрямую не сделаешь.
Что можешь в таком случае предложить?

#779:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 21, 2013 23:50
    —
Flasher,
Единственное, что можно предложить в таком случае - выделять самые необходимые возвращаемые значения и вызывать функцию для них персонально, возвращая нужные поля структур.

#780:  Author: FlasherLocation: Москва PostPosted: Tue Jan 22, 2013 00:05
    —
MVV
"Выделить" - это выбрать? Сходу так список не накидаю, надо обдумать. Сперва подожду, согласен ли с этим автор.

#781:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 22, 2013 01:08
    —
Flasher,
Да, выбрать. А подплагин написать можно и без участия автора основного плагина. Smile А если в списке будут действительно полезные вещи, возможно, их даже включат в стандартный подплагин.

#782:  Author: FlasherLocation: Москва PostPosted: Tue Jan 22, 2013 01:21
    —
MVV
Тебя не поймёшь, то "подплагин может писать и автор плагина, у него код есть", то без участия. SysInfo должно быть достаточно, туда и предлагалось всё это заносить. Бесполезные в рамках автозагрузки вещи постараемся не трогать.

#783:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jan 22, 2013 09:34
    —
Flasher,
Ты списочек-то пиши. Smile А там разберемся, куда их включать - в отдельный плагин или в SysInfo. Я лишь имел в виду, что для того чтобы добавить в Autorun новые переменные, необязательно ждать автора, можно написать подплагин и своими силами.

#784:  Author: Loopback PostPosted: Tue Jan 22, 2013 09:53
    —
Flasher
Ну да, собственно других вариантов нет. Можно либо создать переменные, с данными, полученными из соответствующих вызовов этой функции, либо создать одну функцию, в которой будет набор обработчиков для разных типов возвращаемой информации. По накладным расходам примерно одинаково.

#785:  Author: FlasherLocation: Москва PostPosted: Tue Jan 22, 2013 12:19
    —
Loopback
Что-то мне подсказывает, что синтаксис в варианте "создать одну функцию" будет посложнее. Можно предварительные примеры синтаксиса обоих вариантов?

#786:  Author: Loopback PostPosted: Tue Jan 22, 2013 13:12
    —
Flasher
Первый вариант - набор переменных с префиксом SYSINFO_.

Второй - примерно так:

Code:
SystemParametersInfo VAR <индекс параметра> [<субиндекс>]


Индекс параметра - число, соотвествующее константе SPI_***.
Субиндекс - возможно и не понадобится. Для случаев, если функция возвращает структуру с несколькими элементами.

#787:  Author: FlasherLocation: Москва PostPosted: Tue Jan 22, 2013 13:28
    —
Loopback
Второй, в общем-то, устроит.

#788:  Author: Loopback PostPosted: Tue Jan 22, 2013 23:27
    —
Flasher wrote:
Второй, в общем-то, устроит.

Меня тоже.

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

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

#789:  Author: FlasherLocation: Москва PostPosted: Wed Jan 23, 2013 12:27
    —
Loopback wrote:
некоторые полезные параметры не поддерживаются на младших версиях ОС
А младшие - это какие?

#790:  Author: Loopback PostPosted: Wed Jan 23, 2013 13:43
    —
Flasher
2000/XP.

В принципе, нет проблем сделать дополнительную обработку в зависимости от версии ОС, вопрос только, что должна возвращать функция на неподдерживаемой оси.

#791:  Author: FlasherLocation: Москва PostPosted: Wed Jan 23, 2013 13:48
    —
Loopback
Да что угодно (Empty/False). Знать бы только заранее, какие параметры не поддерживаются.

#792:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Jan 25, 2013 22:13
    —
Сегодня собрал WinPE 4.0 (на базе Win8) с оболочкой в виде TC.
я был рад, когда увидел что плагин корректно определил, что это Win8 Very Happy .
правда, выдал одну ошибку на этот код скрипта:
Code:
ProcessExecGetOutput /EV /OEM USERSID cscript.exe '//Nologo "%commander_path%\Macroses\systeminfo_usersid.vbs"' '%commander_path%'

потом понял, что в PE просто нет cscript.exe Smile , да и получение SID не так уж важно.

какие планы на будущее, Loopback Cool ?

#793:  Author: Loopback PostPosted: Sun Jan 27, 2013 21:08
    —
KopBuH
Я бы пока не хотел планировать слишком далеко вперед. По плану, что надо сделать до релиза:

-Справку в html или chm
-Немного доработать API (уйти от фиксированного буфера)
-Оптимизировать сообщения об ошибках, несколько по-сути повторяют друг-друга.

#794:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Wed Jan 30, 2013 13:36
    —
Loopback:
есть проблемка: (пример)
Code:
Pragma AutorunFinalizeSection
IniWrite /EV "%COMMANDER_PATH%\wincmd.ini" "WLan" "WLanProfile" "%COMMANDER_WLAN%"

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

пытаюсь решить так:

Code:
IniRead SaveTemplateSettings "%COMMANDER_PATH%\wincmd.ini" "Configuration" "SaveTemplateSettings" "0"

If %SaveTemplateSettings% = 1 Then
  IniWrite /EV "%COMMANDER_PATH%\wincmd.ini" "WLan" "WLanProfile" "%COMMANDER_WLAN%"
EndIf

не получается...
значение SaveTemplateSettings в wincmd.ini стоит 0, но при закрытии ТС все равно выходят ошибки записи в файл.

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

могу конечно решить сохранение настроек через nircmd, но ведь это не выход...

#795:  Author: Loopback PostPosted: Wed Jan 30, 2013 15:39
    —
KopBuH
Суть проблемы понятна, вечером посмотрю. Полагаю, надо будет отключить вывод сообщения, и заменить каким-то тихим аналогом, вроде макроса @error в Autoit.

#796:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jan 30, 2013 16:45
    —
Loopback,
Может, вместо мессейджбоксов просто писать лог во временной папке? И документировать. При этом можно выдавать сообщение (максимум одно, если нет отключающей прагмы) о том, что в скрипте/при выполнении были найдены ошибки, и указывать путь к лог-файлу.

#797:  Author: Loopback PostPosted: Wed Jan 30, 2013 18:25
    —
MVV
Ну, лог-то давно планировался уже, только все не дойду до него. Только я его функционал предполагаю чуть шире, чтобы пользователь тоже мог туда выводить свои сообщения. Но скорее всего это уже после релиза будет.

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

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

#798:  Author: Loopback PostPosted: Fri Feb 01, 2013 23:14
    —
Тринадцатая бета.

Скачать

Изменения:
Code:

+ добавлен функционал переменной %ERROR%
+ добавлены команды SystemParametersInfo, GetSysColor в плагин SysInfo
+ базовые функции для работы со строками
- убрана поддержка Win9x/ME/NT4 из плагина Sysinfo (Autorun не работает на них)
* IniWrite не выдает диалог сообщения об ошибке в случае невозможности записи (теперь устанавливает %ERROR%)
* изменения в API
* уменьшен размер стандартных плагинов
* по-умолчанию переменные разворачиваются, используйте переключатель /EV- для отключения

#799:  Author: FlasherLocation: Москва PostPosted: Sat Feb 02, 2013 15:53
    —
Loopback
Много новинок. Здорово! Пока не тестировал толком.
В глаза бросилось появление строковых команд. А почему нельзя сделать их по-человечески функциями Func(Var) без выделения в отдельные команды?

#800:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Feb 02, 2013 16:22
    —
строки - это хорошо.
а можно вопрос?.
в новой версии регистр SYSINFO_USERLANG стал нижним.

Code:
SetEnv /EV COMMANDER_OSLANG %SYSINFO_USERLANG%

хочу переделать его в верхний так:
Code:
StrUpper COMMANDER_OSLANG %COMMANDER_OSLANG%

логично вроде. но не работает. или эти Strxxxxx не поддерживают обработку текста из переменных среды?
так тоже:
Code:
StrUpper COMMANDER_OSLANG

так как мне решить сей вопрос?.
хоть примеров бы дали в ридми, чтоли.

#801:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Feb 02, 2013 16:35
    —
Может ли кто-то из постоянно общающихся с автором ScrollTC пояснить, как сейчас обстоит дело с поддержкой 64-битного TC?

#802:  Author: FlasherLocation: Москва PostPosted: Sat Feb 02, 2013 16:42
    —
Avada
Сейчас там вообще с какой-либо поддержкой дела никак не обстоят, и когда она возобновится также неясно. У автора личные проблемы, о текучке которых он, естественно, не докладывает.

#803:  Author: Loopback PostPosted: Sat Feb 02, 2013 17:24
    —
Flasher wrote:
А почему нельзя сделать их по-человечески функциями Func(Var) без выделения в отдельные команды?

Func(Var) - это как?

И чем плохи отдельные команды для разных действий? Примерно такой набор используется практически во всех языках.

KopBuH wrote:
так как мне решить сей вопрос?.

Логично, так и планировалось. Баг.

KopBuH wrote:
хоть примеров бы дали в ридми, чтоли.

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

#804:  Author: FlasherLocation: Москва PostPosted: Sat Feb 02, 2013 17:33
    —
Loopback
В каких языках?
Команды загромождают конфиг. А для функций не нужны отдельные строки, они сразу возвращают нужное в строку какой-то команды, если записать их в теле. А команду в тело другой команды как переменную не запишешь.
StrLower(<%Variable%>) понятнее?


Last edited by Flasher on Sat Feb 02, 2013 18:29; edited 1 time in total

#805:  Author: Loopback PostPosted: Sat Feb 02, 2013 18:28
    —
Flasher wrote:
А для функций не нужны отдельные строки, они сразу возвращают нужное в строку какой-то команды.

А с каких это пор Autorun начал поддерживать функции? Это единственное, что можно сделать в рамках существующего синтаксиса.

KopBuH
В общем это все-таки не баг, но двойственная ситуация.

Что получается: ты создаешь переменную окружения, потом пытаешься изменить регистр. Команда пытается создать локальную переменную, но не может, поскольку уже есть такая переменная окружения, и у нее - приоритет. Так исторически сложилось, что сначала появились переменные окружения, а локальные - значительно позже.

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

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

#806:  Author: FlasherLocation: Москва PostPosted: Sat Feb 02, 2013 18:31
    —
Loopback wrote:
Это единственное, что можно сделать в рамках существующего синтаксиса.
А расширить функционал нельзя? Вот только так действовать - плодением сущностей? Было бы же удобней гораздо.

#807:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Feb 02, 2013 20:12
    —
Loopback wrote:

KopBuH
В общем это все-таки не баг, но двойственная ситуация.

Что получается: ты создаешь переменную окружения, потом пытаешься изменить регистр. Команда пытается создать локальную переменную, но не может, поскольку уже есть такая переменная окружения, и у нее - приоритет. Так исторически сложилось, что сначала появились переменные окружения, а локальные - значительно позже.

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


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

#808:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Feb 02, 2013 21:27
    —
Не пойму, зачем было проводить допобработку возвращаемой системой строки языка... Кому надо, вызовет функцию для снижения регистра.

Насчёт проблемы с StrUpper COMMANDER_OSLANG: нужно сделать процедуре два параметра, а не один. Куда писать и откуда читать. Если кому-то надо в одной переменной регистр поменять, дважды напишет её имя (или при парсинге смотреть, если указан только 1 параметр, читать и писать одну переменную).

#809:  Author: FlasherLocation: Москва PostPosted: Sat Feb 02, 2013 21:29
    —
MVV wrote:
Не пойму, зачем было проводить допобработку возвращаемой системой строки языка...
Вообще-то было запрошено дважды и подтверждено. Верхний регистр не нужен.

#810:  Author: Loopback PostPosted: Sat Feb 02, 2013 22:27
    —
Flasher wrote:
Вот только так действовать - плодением сущностей?

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

KopBuH wrote:
Все эти Strxxxxxx нигде особо не задействуешь, если в поле "текст" нельзя использовать переменную среды. если только статичный текст, то я могу и просто в конфиге прописать RUS - и все.

Можно использовать, я про другое говорил. Сейчас нельзя использовать в качестве целевой переменной переменную окружения.

MVV wrote:
Насчёт проблемы с StrUpper COMMANDER_OSLANG: нужно сделать процедуре два параметра, а не один.

Да не в этом проблема, а в том, что все команды, которые записывают значение, умеют их писать только в локальные переменные.

#811:  Author: FlasherLocation: Москва PostPosted: Sat Feb 02, 2013 22:32
    —
Loopback wrote:
Больше таких ошибок делать не буду.
А в чём ошибка, если функции повсеместно используются (и явно не дураками делались) ?

#812:  Author: Loopback PostPosted: Sat Feb 02, 2013 23:24
    —
Flasher wrote:
А в чём ошибка, если функции повсеместно используются (и явно не дураками делались) ?

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

#813:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 00:15
    —
Loopback
Вероятность использования одной и той же строковой переменной в разных местах скрипта сводится к минимуму, поэтому само создание отдельных переменных практически не востребовано.
Синтаксисы команд и функций нигде тут друг другу противоречить не будут, если как следует всё делать.
Боюсь, при текущем подходе конфиг распухнет до неузнаваемости, и автозагрузка значительно замедлится.
И большое пожелание добавить поддержку арифметических операторов (особенно конкатенации) в ShellExec, IniWrite, ProcessExecGetOutput, иначе тут появление ряда новых команд окажется бессмысленным. Не всё же через Set получать.

#814:  Author: Loopback PostPosted: Sun Feb 03, 2013 02:25
    —
Flasher
Если строчные функции в том виде, в котором они есть не нужны и опасны для размера конфига - могу убрать. Уже жалею, что вообще добавил. Но в другом виде их сейчас не будет.

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

#815:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 03:24
    —
Loopback wrote:
Отдельная конкатенация в Autorun вообще не нужна, переменные разворачиваются в тексте.
Поясни на примере. Мне нужно в ряде случаев в одну строку сливать текст и переменные. Как формируется такая запись? Так же, как и с переменными среды? И как с кавычками быть в таких записях?

#816:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Feb 03, 2013 09:52
    —
По-моему, с такими широкими запросами уже надо отдельный скрипт писать и выполнять его через ShellExec... Функции, арифметика...

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

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

#817:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Feb 03, 2013 12:18
    —
MVV wrote:
Проводить необязательную дополнительную обработку, тем более при наличии добавленной команды снижения регистра - избыточность.

поддерживаю. пока сделал так:

Code:
StrUpper OSLANG %SYSINFO_USERLANG%
SetEnv /EV COMMANDER_OSLANG %OSLANG%

но все же верхний регистр по умолчанию - это правильно.

#818:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 12:32
    —
MVV wrote:
По-моему, с такими широкими запросами уже надо отдельный скрипт писать и выполнять его через ShellExec... Функции, арифметика.
У тебя в TCFS2 всё это есть без всяких скриптов. Или забыл?
MVV wrote:
Вообще, конечно, "мне так хочется" - не ответ.
А какой тебе нужен ответ? У тебя аргумента в пользу верхнего регистра, кроме того, что так выдаёт функция по умолчанию, нет. А у меня есть и автор, видимо, это понимает, раз согласился.

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

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

#819:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Feb 03, 2013 14:16
    —
Flasher wrote:

А эту команду можно уже убирать вместе с остальными. Как видишь, зря добавлялись они. Лишние нагромождение в конфиге с такими командами - вот это избыточность.

не хочешь - не громозди. например мне они требуются.

#820:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 14:47
    —
KopBuH
Они появились исходя из моего раннего предложения. Но было оно в ином виде. Поэтому Loopback и пишет, что жалеет о добавке.

#821:  Author: Loopback PostPosted: Sun Feb 03, 2013 21:03
    —
Flasher wrote:
Поясни на примере. Мне нужно в ряде случаев в одну строку сливать текст и переменные. Как формируется такая запись? Так же, как и с переменными среды? И как с кавычками быть в таких записях?

Ну так какие проблемы? Вот пример, пусть и несколько надуманный:

Code:
Set NUMBER 1
SetEnv VAR "%COMMANDER_DRIVE%\Soft\%SYSINFO_OSARCH%\MyFile-'%NUMBER%'.ini"


В зависимости от переменных окружения, VAR будет, например: c:\Soft\32\MyFile-'1'.ini

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

Flasher wrote:
Они появились исходя из моего раннего предложения. Но было оно в ином виде. Поэтому Loopback и пишет, что жалеет о добавке.

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

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

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

#822:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Feb 03, 2013 21:18
    —
Flasher wrote:
У тебя в TCFS2 всё это есть без всяких скриптов. Или забыл?

У TCFS2 несколько иной функционал. Мне, например, хочется, чтобы Autorun оставался компактным и легким, все тяжелые действия можно делать из запускаемых им программ/модулей.

Flasher wrote:
А у меня есть и автор, видимо, это понимает, раз согласился.

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

#823:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 21:49
    —
Loopback wrote:
Такую же конструкцию можно использовать в любой команде, где разворачиваются переменные.
Так, хорошо, а если пробелы между переменными и текстом есть?
Loopback wrote:
смотрится ваще некрасиво, смысла в переменных нет, смысла в новых функциях нет
Этого я не писал. Тем более про функции.
Loopback wrote:
поскольку имеющийся парсер принципиально не может решить задачу работы с ними
В этом никто не сомневался. Речь только может идти про новый.
Loopback wrote:
Ради нескольких функций, которые будут использоваться в лучшем случае пару раз на скрипт?
У меня в голове держатся мысли, где вовсе не пару. Скажем, есть файлы, где регистр в именах гуляет и их надо прописывать в точном соответствии. Представь, сколько будет уходить строк на всё это.

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

#824:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Feb 03, 2013 22:56
    —
Quote:
TCFS2 при наличии всех этих приблуд в несколько раз легче Autorun. И каков вывод?

Вывод - кропотливое написание кода на C++ с голым API позволяет получить более компактный модуль. Very Happy

Quote:
Отличные от твоих, видимо. Ты же оспариваешь, тебе и начинать писать про верхний.

Мой аргумент был в избыточности нестандартного преобразования, которое нужно не всем, а кому нужно, вызовет процедуру приведения к нижнему регистру. Твоих аргументов кроме "я хочу" пока не было.


Last edited by MVV on Sun Feb 03, 2013 23:07; edited 1 time in total

#825:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 23:01
    —
MVV wrote:
Вывод - C++ с голым API позволяет написать более компактный модуль.
Вывод - компактность кода ещё не есть лёгкость программы/модуля.

MVV wrote:
которое нужно не всем
Могу сказать то же самое - верхний регистр тоже нужен не всем. Эта такой же "аргумент", как и псевдоизбыточность.
Агрументом тут может быть лишь непосредственно личная выгода или польза от использования исходного вида.

#826:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Feb 03, 2013 23:13
    —
Да, верхний нужен не всем, как и нижний. Но какой смысл делать избыточную операцию, когда она может быть сделана только теми, кому она нужна?

#827:  Author: FlasherLocation: Москва PostPosted: Sun Feb 03, 2013 23:17
    —
В компилированном виде это займёт ещё меньше, чем в текстовом файле и отработает быстрее.

#828:  Author: Loopback PostPosted: Mon Feb 04, 2013 00:27
    —
Flasher wrote:
Так, хорошо, а если пробелы между переменными и текстом есть?

Добавляй, что мешает-то?
Flasher wrote:
Этого я не писал. Тем более про функции.

http://forum.wincmd.ru/viewpost.php?p=98902
Не про функции, про команды. Сути-то не меняет.
Flasher wrote:
В этом никто не сомневался. Речь только может идти про новый.

Угу, т.е. я сейчас начну переписывать с нуля парсер, только чтобы сделать красиво строчные функции? Здорово придумано Very Happy

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


ЗЫ К слову, плагины к Autorun сейчас написаны на С++. Было интересно вспомнить, да и API надо было портировать. И что, кроме размера, заметил кто какие преимущества? Wink

#829:  Author: FlasherLocation: Москва PostPosted: Mon Feb 04, 2013 00:41
    —
Loopback wrote:
Добавляй, что мешает-то?
Пробел выполняет фунцию сепаратора в синтаксисе. Им отделяются ключи, имена переменных, имена секций и т..д. Синтаксис глаголит последовательность расположения данных. Плагин разве не споткнётся на любом подобном пробеле? Или там кавычки решают?
Loopback wrote:
Не про функции, про команды. Сути-то не меняет
Меняет. Я написал про некоторые новые команды, а ты про неизвестно какие переменные.
Loopback wrote:
Угу, т.е. я сейчас начну переписывать с нуля парсер
Под новым понимался дополнительный, а не изменённый существующий.
Loopback wrote:
И что, кроме размера, заметил кто какие преимущества?
Чего перед чем?

#830:  Author: Loopback PostPosted: Mon Feb 04, 2013 10:23
    —
Flasher wrote:
Или там кавычки решают?

Решают. Можно ведь и попробовать, не?

Flasher wrote:
а ты про неизвестно какие переменные.

Flasher wrote:
поэтому само создание отдельных переменных практически не востребовано.


Flasher wrote:
Под новым понимался дополнительный, а не изменённый существующий.

Т.е. под каждый вид функционала свой парсер. Нет, это не вариант. Всё должно обрабатываться единообразно.

#831:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Feb 04, 2013 11:41
    —
Что ж там за парсер, что сложно добавить поддержку параметров функций. Я у себя проблему решал достаточно просто: если вижу скобку, ищу конец выражения в скобках с учетом типа и уровней вложенности, затем просто передаю всю подстроку во вложенный вызов как параметр, а дальше уже функция сама парсит его.

На худой конец, вызов функций можно организовать как макрозамену: перед тем как вызывать процедуру, выполняешь предобработку строки параметров, подставляя макросы и раскрывая переменные окружения, например, StrUpper(бла-бла) заменяешь на БЛА-БЛА. А уже потом передаёшь результат основной процедуре:
Code:
Исходная строка:
SetEnv /EV COMMANDER_OSLANG StrUpper(%SYSINFO_USERLANG%)
После предобработки:
SetEnv /EV COMMANDER_OSLANG RUS

При этом парсер можно оставить как есть, просто добавить препроцессор. Кстати, его можно даже в виде плагина сделать, вызывать определенную функцию плагина и передавать ей строку, а она пусть возвращает обработанную строку, которую затем плагин будет парсить как обычно. От плагина всего требуется две экспортируемые функции: функция предобработки и функция освобождения памяти.
Code:
const char* __stdcall AutorunPreprocess(const char* InputLine);
void __stdcall AutorunFree(void* Pointer);

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

Loopback wrote:
ЗЫ К слову, плагины к Autorun сейчас написаны на С++. Было интересно вспомнить, да и API надо было портировать. И что, кроме размера, заметил кто какие преимущества? Wink

Обновлял сейчас плаг, начал ругаться на MoveOptionsButton, заметил, что Autorun_MoveButton.dll конкретно похудел - круто. Cool

#832:  Author: Loopback PostPosted: Mon Feb 04, 2013 14:23
    —
MVV wrote:
Что ж там за парсер, что сложно добавить поддержку параметров функций. Я у себя проблему решал достаточно просто: если вижу скобку, ищу конец выражения в скобках с учетом типа и уровней вложенности, затем просто передаю всю подстроку во вложенный вызов как параметр, а дальше уже функция сама парсит его.

Я же не говорю, что это принципиально невозможно. Но в любом случае муторно. Ну если только ограничить использованием в качестве параметра функции только переменных, т.е. так можно StrUpper(%VAR%), а так нет: StrUpper("blabla%VAR%").

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

#833:  Author: FlasherLocation: Москва PostPosted: Mon Feb 04, 2013 16:12
    —
Loopback wrote:
Можно ведь и попробовать, не?
Можно, попробую. В Ридми будет?

Loopback wrote:
В любом случае, до релиза - никакого изменения синтаксиса делать не буду.
Никто не настаивает. Wink Релизь что есть. А позже добавишь функции.

#834:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Feb 04, 2013 16:59
    —
Действительно. Должна же будет версия 2.0 чем-то отличаться от 1.0. Very Happy

#835:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Feb 09, 2013 12:06
    —
насчет %SYSINFO_USERLANG%
насколько я понял, английская Windows 7 домашняя, руссифицированая принудительно русским MUI отображается как "ENU"?.
то есть даже если язык и интерфейс пользователя русский, то все равно получаем язык оригинальной системы, так?. (я понимаю, что значение берется из ключа sLanguage, но это получается уже не USERLANG, а скорее OSLANG...)
код из конфига:
Code:
# Проверка языка системы
StrUpper OSLANG %SYSINFO_USERLANG%
If %OSLANG% = ENU Then
  SetEnv /EV COMMANDER_OSLANG Eng
Else
  SetEnv /EV COMMANDER_OSLANG %OSLANG%
EndIf

#836:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Feb 09, 2013 15:00
    —
KopBuH, эта штука какой язык пишет? Для русского должно быть $419, для английского - $409.
По идее, в твоём случае числа будут $419 (локаль), $419 (интерфейс юзера) и $409 (интерфейс системы).

#837:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Feb 09, 2013 15:20
    —
жаль, но я уже отдал нотебук ) (он был клиентский).
а на моей, старой доброй XP SP3 - все 419.
но я отпишусь, если будет еще такая система (W7 Home Basic EN).
там я в систему MUI установил принудительно, через Vistalizator.
да, я заметил что в кусте реестра той системы (HKEY_CURRENT_USER\Control Panel\International) sLanguage был ENU.
а вот какой был "Locale" - не глянул Embarassed

Добавлено спустя 1 час 2 минуты:

сейчас встретился с еще одной системой:
здесь все наоборот:
Win7 Home Basic, язык интерфейса - чисто английский.
но плагин детектит как Rus.

настройки системы:
http://savepic.org/2756825.jpg
http://savepic.org/2817240.jpg
текущее расположение - Россия.
Язык для не юникодных программ - русский.
Locale: 0419
"Эта штука" выдала это:
http://savepic.org/2773209.jpg

#838:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Feb 09, 2013 17:16
    —
Quote:
"Эта штука" выдала это:

Всё верно, локаль русская, интерфейсы английские. По идее, если вызвать GetUserDefaultUILanguage и преобразовать результат с помощью GetLocaleInfo, должны получить язык в виде строки.

#839:  Author: Loopback PostPosted: Sun Feb 10, 2013 12:57
    —
Еще одна бета, четырнадцатая.

Скачать

Из изменений - только новый формат справки.

#840:  Author: FlasherLocation: Москва PostPosted: Wed Feb 13, 2013 00:12
    —
Loopback
Файл wdx отличается от предыдущего.
Я думал, что справка будет пообширней в плане разъяснений. Ну, да ладно.

Добавь, пож-та, данные по процессору (производитель, ширина шины данных и т.д.).

#841:  Author: Loopback PostPosted: Wed Feb 13, 2013 12:16
    —
Flasher wrote:
Файл wdx отличается от предыдущего.

Ну я на всякий случай перекомпилировал, вроде там что-то правил по-мелочам.
Flasher wrote:
Я думал, что справка будет пообширней в плане разъяснений. Ну, да ладно.

Так для этого и выложил до релиза. Что непонятно, что можно добавить?
Flasher wrote:
Добавь, пож-та, данные по процессору (производитель, ширина шины данных и т.д.).

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

#842:  Author: FlasherLocation: Москва PostPosted: Thu Feb 14, 2013 02:37
    —
Loopback wrote:
Что непонятно, что можно добавить?
Добавить стоит примеры для каждого случая. Для каждой команды SysInfo лучше не менее 2-ух.
Loopback wrote:
По-моему, винда такую информацию не выдает.
WMI даёт. select * from CIM_Processor / Win32_Processor
Кое-что можно отсюда взять.

#843:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Feb 14, 2013 09:23
    —
Может, проще сразу добавить одну функцию, запихивающую вывод WMI-запроса в переменную окружения, если мы кучу данных берем оттуда?

#844:  Author: Loopback PostPosted: Thu Feb 14, 2013 10:38
    —
Flasher wrote:
Добавить стоит примеры для каждого случая.

Ок, примеры это понятно. Еще что-нибудь?

Flasher wrote:
WMI даёт.

WMI - это уже не WinAPI. По cpuid посмотрю, но может быть не сейчас.

MVV wrote:
Может, проще сразу добавить одну функцию, запихивающую вывод WMI-запроса в переменную окружения, если мы кучу данных берем оттуда?

Не уверен, что более-менее приемлемую работу с WMI вообще можно организовать в языке, не имеющем ООП-синтаксиса. Результат запроса может быть объектом со своим набором свойств, их получать как-то надо. Запросы могут возвращать коллекции - как с ними тут работать? Ну и наконец, чтобы получить некоторые данные, одним запросом не обойтись.

#845:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Feb 15, 2013 09:43
    —
Loopback:
есть один вопрос. ты можешь написать небольшую консольную утилиту, которая меняет значение переменных, только в среде уже запущенного ТС?

#846:  Author: jentoso PostPosted: Fri Feb 15, 2013 09:48
    —
KopBuH, а чем не подходит команда Set?

#847:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Feb 15, 2013 09:57
    —
какая Set?. Set это для работы внутри скрипта.
а я про
Quote:
меняет значение переменных, только в среде уже запущенного ТС

есть одна подобная утилита, setenv.exe, но она меняет переменные среды сразу для всех программ, и не работает в PE, а мне нужно только для TC, и уже созданные.

#848:  Author: jentoso PostPosted: Fri Feb 15, 2013 10:12
    —
KopBuH, а плагин Environment Variables Ex 1.0 не подойдет?

#849:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Fri Feb 15, 2013 10:20
    —
не подойдет. плагин хороший, но в нем нужно править переменную ручками, а мне нужно через консоль. то есть внешняя утилита.

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

или скрипт VBS, если он конечно такое умеет.

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

нашел!!))
да не сочтут меня изменником, но нашел эту утилиту в плагинах к FAR:
http://plugring.farmanager.com/plugin.php?pid=762

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

рано обрадовался. синтаксис у нее не очень удобен, однако.
там значение переменной установливается в начале строки, и только потом задается нужный процесс. а это значит, что придется теперь еще юзать программы вроде AskParam. а поскольку я не смог передать в нее чтобы задать PID тотала, то нужно запускать её через cmd. а это значит, чтобы поменять одну переменную нужно запустить целых 3 программы. к тому же она не может изменять переменные 64-битных приложений (отказано в доступе)Crying or Very sad
Loopback, или все же можно сделать такую утилитку, только для ТС, если это не очень трудно?
типо такой: SetTCEnv.exe "переменная" "значение переменной"

#850:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Feb 17, 2013 14:03
    —
вопрос насчет проверки прав администратора в Windows Vista и выше:
плагин указывает, что командер запущен от администратора. но на самом деле, если включен UAC - то права ограничены.
пока сделал такое решение:
(некоторые строки из конфига опущены)

Code:

# Начало конфига:
IniWrite /EV "%SystemRoot%\Admin.ini" "TechAdmin" "Admin" "1"

# Середина конфига:
# Проверка наличия прав Администратора
IniRead COMMANDER_ISADMIN "%SystemRoot%\Admin.ini" "TechAdmin" "Admin" "0"
If (COMMANDER_OSVER = XP) AND (%AUTORUN_ISADMIN% = 1) Then
  SetEnv /EV COMMANDER_ASADMIN "Admin"
ElseIf (COMMANDER_OSVER <> XP) AND (%AUTORUN_ISADMIN% = 1) AND (%COMMANDER_ISADMIN% = 1)  Then
  SetEnv /EV COMMANDER_ASADMIN "Admin"
  IniWrite /EV "%SystemRoot%\Admin.ini" "TechAdmin" "Admin" "0"
Else
  SetEnv /EV COMMANDER_ASADMIN "User"
EndIf

получилось что-то вроде костылей для проверки реальных прав администратора, но вроде работает.
вопрос к Loopback: не хотите улучшить плагин, и ввести что-то вроде такой проверки привилегий прав ТС при включенном UAC?

#851:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Feb 17, 2013 14:16
    —
Вот кстати да, проверка на привилегии была бы полезнее просто проверки на администратора, т.к. с UAC администраторы всё равно обычно запускают программы без привилегий.

#852:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Feb 17, 2013 16:05
    —
Кажется, в Process Hacker этот столбик называется Integrity, там есть Low, Medium, High, и System.
неплохо было просто получить одно из этих значений. а там уже и сами бы разобрались.
например, High - это права Админа. Medium - это админ, но ограниченный.
Low - обычный пользователь, System - система.

#853:  Author: Loopback PostPosted: Mon Feb 18, 2013 12:44
    —
KopBuH wrote:
или все же можно сделать такую утилитку, только для ТС, если это не очень трудно?

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

Насчет привилегий согласен, что-нибудь можно будет сделать.

#854:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Feb 18, 2013 16:40
    —
Если права аналогичные (например, если это дочерний тоталу процесс), то можно менять переменные - банальным внедрением в процесс.

#855:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Feb 18, 2013 18:13
    —
Loopback wrote:

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

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

#856:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Tue Feb 19, 2013 18:37
    —
еще очень бы хотелось чтобы в плагине появилась поддержка записи в реестр (RegWrite).

#857:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 19, 2013 20:20
    —
Прошу специалистов по Autorun подсказать, как при использовании одной и той же папки плагина с одним и тем же конфигом сделать, чтобы в 64-битном TC не делалась попытка загрузить библиотеку, имеющую только 32-битную версию. (В 32-битном TC она, естественно, должна по-прежнему загружаться.) Конкретно речь о ScrollTC.

#858:  Author: FlasherLocation: Москва PostPosted: Tue Feb 19, 2013 20:31
    —
Avada
Элементарно:
Code:
If %AUTORUN_TCARCH% = 32 Then
LoadLibrary Plugins\ScrollTC.dll
Endif

#859:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 19, 2013 20:56
    —
Flasher
Спасибо!

#860:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sun Feb 24, 2013 18:58
    —
Loopback, ну как насчет RegWrite, а?

#861:  Author: Loopback PostPosted: Mon Feb 25, 2013 13:34
    —
KopBuH
Пока никак. Не думаю, что до релиза что-то буду добавлять, а релиз пока даже некогда завершить.

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

#862:  Author: FlasherLocation: Москва PostPosted: Mon Feb 25, 2013 20:19
    —
Loopback wrote:
для портабельной сборки писать что-то в реестр - зло.
Есть варианты, где не совсем зло. Например, когда требуется отработка какого-то плагина или компонента. Но сам считаю, что команды reg вполне достаточно, поскольку требоваться может эта регистрация уже после отработки скрипта, т.е. на скорость это влиять не будет, если такие команды ставить в самый низ.

#863:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Tue Feb 26, 2013 19:55
    —
Loopback wrote:
KopBuH
Пока никак. Не думаю, что до релиза что-то буду добавлять, а релиз пока даже некогда завершить.

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

просто я очень хотел добавить проверку прав Администратора.
поскольку встроенная некорректно работает с UAC, а запись через IniWrite в C:\Windows не всегда означает что ты админ, то для этого мне нужно либо RegWrite, чтобы пытаться создать в HKLM\SOFTWARE\ ключ Test, и потом уже узнавать есть права доступа к этой ветке, и если есть - значит админ, а нет - юзер, или корректная версия функции AUTORUN_ISADMIN (которую не жду в скором времени) .
можно конечно юзать и reg import, но при запуске ТС она не успеет обработать за пару мсек. поэтому прошу RegWrite. Rolling Eyes

или быть может уважаемый MVV может написать отдельно подключаемый плагин?.

#864:  Author: ask-rusLocation: Russian Federation PostPosted: Tue Mar 26, 2013 17:49
    —
Loopback
Можно ли изменить расширение конфига с *.CFG в *.INI?

#865:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Mar 26, 2013 19:41
    —
ask-rus,
Какой в том сакральный смысл? Тем более, с учётом того, что формат файла ни разу не соответствует формату INI-файла.

При особо остром желании, думаю, можешь попробовать отредактировать хекс-редактором юникодовскую строку .cfg в своей копии плагина.

#866:  Author: ask-rusLocation: Russian Federation PostPosted: Wed Mar 27, 2013 17:12
    —
MVV wrote:
При особо остром желании, думаю, можешь попробовать отредактировать хекс-редактором юникодовскую строку .cfg в своей копии плагина.

Не стОит, TC Plugins Manager ругался, пусть дальше ругается.

#867:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Thu Mar 28, 2013 09:26
    —
ну сделайте RegWrite, пожалуйста...

уж месяц прошел, а в теме всё тишина...ни релиза, ни нового чего...

#868:  Author: Loopback PostPosted: Thu Mar 28, 2013 16:21
    —
KopBuH
И еще недели три как минимум пройдет... Нет сейчас возможности заниматься плагинами, вообще нет.

#869:  Author: jentoso PostPosted: Thu Mar 28, 2013 18:47
    —
Flasher
Code:
If %AUTORUN_TCARCH% = 32 Then

может должно так записано
Code:
If %AUTORUN_TCARCH% == 32 Then

#870:  Author: FlasherLocation: Москва PostPosted: Thu Mar 28, 2013 20:50
    —
jentoso
См. справку: Syntax > Условия.

#871:  Author: jentoso PostPosted: Thu Mar 28, 2013 21:14
    —
Flasher что это значит?
Code:
---------------------------
Autorun plugin error
---------------------------
Error in command at line [1]:

Operator not applicable here: =
---------------------------
ОК   
---------------------------

#872:  Author: FlasherLocation: Москва PostPosted: Thu Mar 28, 2013 21:43
    —
Версия плагина 1.9.13? На других системах как?

#873:  Author: jentoso PostPosted: Thu Mar 28, 2013 21:45
    —
Flasher, версия 1.9.6

#874:  Author: FlasherLocation: Москва PostPosted: Thu Mar 28, 2013 21:47
    —
А если обновиться?

#875:  Author: jentoso PostPosted: Thu Mar 28, 2013 21:54
    —
Flasher, откуда? Брал с первого поста это темы

#876:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 28, 2013 22:09
    —
jentoso
Беты ищутся отнюдь не в первом посте, а по ходу темы. Пример.

#877:  Author: jentoso PostPosted: Thu Mar 28, 2013 22:23
    —
Avada, я то про версию ScrollTC подумал Smile

#878:  Author: FlasherLocation: Москва PostPosted: Thu Mar 28, 2013 23:47
    —
jentoso wrote:
я то про версию ScrollTC подумал
ScrollTC никак не мог иметь отношение к данной проблеме. Ну, и он не только в первом посте фигурирует.

Так Autorun какой версии в итоге? И что с обновлением?

#879:  Author: jentoso PostPosted: Fri Mar 29, 2013 06:03
    —
Flasher, обновил Autorun c версии 1.5.0 до 1.9.14 и запуск проходит без ошибки.

#880:  Author: ask-rusLocation: Russian Federation PostPosted: Fri Apr 05, 2013 18:47
    —
Нужно выполнить команду с запуском TC один раз, т.е. с последующими запусками команда не выполнялась. Умеет ли плагин такое сейчас? Если нет, можно ли реализовать? Где-то, скажем в wincmd.ini, должен ставиться флажок (единичка), что первый запуск был выполнен, который в дальнейшем можно было бы обнулить.
Code:
[Autorun]
FirstRun=1/0

#881:  Author: LonerDLocation: Макеевка PostPosted: Fri Apr 05, 2013 20:15
    —
ask-rus
В плагин такая возможность не встроена, но есть все средства, чтобы реализовать это вручную.

Code:
ProcessCount /F TC32Copies "%commander_path%\TOTALCMD.exe"
ProcessCount /F TC64Copies "%commander_path%\TOTALCMD64.exe"
If (%TC32Copies% = 1) and (%TC64Copies% = 0) Then
  команда
ElseIf (%TC32Copies% = 0) and (%TC64Copies% = 1) Then
  команда
EndIf

Можно проверять запуск процессов вообще, а не только по определённому пути, тогда нужно записать в виде
ProcessCount TC32Copies TOTALCMD.exe


Last edited by LonerD on Wed Apr 17, 2013 01:45; edited 1 time in total

#882:  Author: ask-rusLocation: Russian Federation PostPosted: Sat Apr 06, 2013 09:32
    —
Понятно, спасибо.

#883:  Author: ask-rusLocation: Russian Federation PostPosted: Tue May 14, 2013 15:34
    —
Flasher wrote:
Тут есть полезный сорс (в пакете TOMLINSN.ZIP), на его базе написан InstDrv, PnpUtil, RegDrv. Второй год пользуюсь последней тулзой, загружаю/выгружаю драйвер через autorun. Но это пока на безрыбье..

Выгрузка через Pragma AutorunFinalizeSection?

#884:  Author: FlasherLocation: Москва PostPosted: Tue May 14, 2013 15:41
    —
Конечно. До появления 7 беты - через скрипт.

#885:  Author: ask-rusLocation: Russian Federation PostPosted: Fri Jun 14, 2013 18:29
    —
Loopback
На сколько сложно реализовать загрузку/выгрузку драйвера в самом Autorun (отсюда)?
Quote:
LoadFont [/N] <font name>
LoadLibrary [/U] <имя dll> [<функция>]
LoadDriver <имя sys>

#886:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Jun 14, 2013 19:16
    —
Уж лучше вызывать внешнюю утилиту для загрузки драйвера. Но должны совпадать разрядности системы и драйвера, процесс должен иметь права администратора.

#887:  Author: ask-rusLocation: Russian Federation PostPosted: Fri Jun 14, 2013 20:21
    —
MVV wrote:
Но должны совпадать разрядности системы и драйвера, процесс должен иметь права администратора.

У меня только 64-битный TC, а ведь он не может быть запущен в 32-битной среде, поэтому нет смысла проверять систему на разрядность. С правами администратора вопрос...

#888:  Author: LonerDLocation: Макеевка PostPosted: Sat Jun 22, 2013 14:12
    —
Просьба проверить и подтвердить ошибку в подплагине Autorun_MoveButton.dll.
(TC 8.01, WinXPx32, Autorun 1.6 beta14)

В autorun.cfg вносим запись
Code:
LoadLibrary Plugins\Autorun_MoveButton.dll
MoveOptionsButton MOVE_LEGACY

Запускаем Тотал, запускаем копирование, выбираем Option, ставим галочку на "Copy to all selected folders/links in the target panel" (Копировать во все выделенные папки/ссылки целевой панели).
Копирование происходит не в выделенные папки, а напрямую в целевую панель.
Если отключить Autorun_MoveButton.dll - копирование в подпапки работает.


Last edited by LonerD on Sat Jun 22, 2013 15:18; edited 1 time in total

#889:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Jun 22, 2013 15:12
    —
LonerD
Подтверждаю. Под XP SP3 в TC 8.01 последний модуль Autorun_MoveButton.dll, не блокирующий эту функцию, — от версии Autorun 1.6 beta 1. (Его удаётся использовать с Autorun только до версии 1.6 beta 4 включительно. С последующими версиями Autorun старый дочерний плагин перестаёт работать вообще.)
В 32-битном TC временно решил проблему, отключив функциональность дочернего плагина в конфиге Autorun и прицепив как самостоятельный плагин старую версию MoveButton.
...Нет, это оказалось плохим решением — старый плагин периодически самопроизвольно прекращает работать. Значит, восстанавливаю настройки Autorun, а для мультикопирования придётся обращаться пока к скрипту. Или постоянно зафиксировать диалог копирования в развёрнутом виде — тогда всё работает.

#890:  Author: Loopback PostPosted: Mon Jul 01, 2013 17:26
    —
Да, подтверждаю, только на ХР. Со второй беты MoveButton был переписан для снижения нагрузки на процессор. Пока неясно, каким образом это может влиять на функционал, который плагин вообще никак не затрагивает. Надо смотреть.

#891:  Author: Loopback PostPosted: Tue Jul 02, 2013 10:01
    —
Кажется, нашел. Попробуйте эту версию.

#892:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jul 02, 2013 13:06
    —
Loopback
Вроде бы теперь под XP всё OK.

#893:  Author: Loopback PostPosted: Tue Jul 09, 2013 14:48
    —
Не хотел больше бет, но все же вышла еще одна.
Скачать

Изменения:
Code:

1.6 beta 15
+ добавлены переменные %PROCESS_USERISADMIN%, %PROCESS_RUNASADMIN%, %PROCESS_ISELEVATED%, %PROCESS_INTEGRITYLEVEL% в плагин Process
+ добавлены команды RegWrite, RegDelete
* доработки в API (старые плагины Process и Sysinfo работать не будут)
- исправлен баг в плагине MoveButton в WinXP

#894:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jul 09, 2013 16:03
    —
Справка - это сильно. Думаю, касаемо функции SystemParametersInfo стоит перечислить, какие параметры поддерживаются, т.к. мне кажется, что таковых будет меньше, чем неподдерживаемых (там многие параметры возвращают структуры).

Где-то косяки с кодировкой. Открываю вкладку Поиск, ищу: заголовки статей в результатах отображаются в ANSI, хотя по ним видно, что сохранены в UTF-8.
Quote:
Для разработчиков

#895:  Author: FlasherLocation: Москва PostPosted: Tue Jul 09, 2013 18:23
    —
Loopback, хорошие добавки!

MVV wrote:
Справка - это сильно.
В смысле? Я особых изменений не заметил.

#896:  Author: Loopback PostPosted: Wed Jul 10, 2013 09:53
    —
MVV wrote:
Думаю, касаемо функции SystemParametersInfo стоит перечислить, какие параметры поддерживаются.

Можно, но максимум в виде таблицы: имя параметра/его значение. Описания не осилю Smile

MVV wrote:
Где-то косяки с кодировкой.

Да, это похоже недоработка самого формата chm: если страницы закодированы UTF-8, поиск выдает заголовки в неправильной кодировке. Если включить бинарный индекс, то результат выдается правильный, но создается дополнительный файл рядом со справкой. Единственное решение - включить перекодировку страниц в ANSI.

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

#897:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jul 10, 2013 10:43
    —
А чем ты его компилировал?
Я скачал HTML Help Workshop, на скорую руку создал проект (первый раз в жизни), напихал файлов с твоего хелпа (HHC, HHK, HTML), и у меня на вкладке поиска заголовки статей отображаются корректно.

Ага, кажется, понял. Если отключаю опцию "Create a binary TOC (check this for a very large TOC)", то вижу кракозябры. И в файле #STRINGS при этом русские заголовки в UTF-8, а с опцией - в ANSI.

#898:  Author: Loopback PostPosted: Wed Jul 10, 2013 11:14
    —
MVV
Ну да, в том-то и дело. Но мне как-то не хочется, чтобы создавался внешний индекс для справки в два десятка статей. Впрочем, перекодировка страниц решает проблему.

Справка собирается скриптом из wiki, но это не играет роли, компиляция все равно производится средствами HTML Help Workshop.

#899:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jul 10, 2013 11:29
    —
Но ведь с бинарным индексом всё равно достаточно одного CHM-файла, чтобы всё работало.

#900:  Author: Loopback PostPosted: Wed Jul 10, 2013 14:06
    —
MVV
Индекс создается при первом поиске автоматом снаружи, с расширением chw. Хотя может быть это поведение можно изменить, не знаю.

#901:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Jul 10, 2013 14:22
    —
Точно. Но только при открытии вкладки Указатель, где у тебя всё равно ничего нет.

#902:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Jul 13, 2013 17:25
    —
скачал последнюю бету, и теперь при запуске ТС вылазит такое:

код из конфига:

Code:
LoadLibrary Plugins\Autorun_Process.dll

ProcessExecGetOutput /OEM USERSID cscript.exe '//Nologo "%commander_path%\Macroses\get_usersid.vbs"' '%commander_path%'


а раньше так работало, и создавалась переменная без вывода каких либо сообщений.

#903:  Author: FlasherLocation: Москва PostPosted: Sat Jul 13, 2013 20:30
    —
KopBuH, а плагин Process точно обновлён?

#904:  Author: LonerDLocation: Макеевка PostPosted: Sun Jul 14, 2013 03:26
    —
Flasher wrote:
а плагин Process точно обновлён?

Точно.

#905:  Author: Loopback PostPosted: Mon Jul 15, 2013 08:36
    —
Да, забыл убрать. Исправленная версия здесь.

#906:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Mon Jul 15, 2013 08:51
    —
всё, сообщение исчезло. плагин работает.

#907:  Author: dreamdeath86 PostPosted: Thu Aug 22, 2013 17:12
    —
Подскажите пожалуста вот какую штуку: хочу с помощью Autorun запустить плагин VirtualPanel.wfx, но плагин то подгружается но реакции 0 (у меня на клавишу повешана функция автодобавления файла на виртуальную панель) файлы не добавляются, настройки не вызываются. Подскажите как быть?

#908:  Author: FlasherLocation: Москва PostPosted: Thu Aug 22, 2013 17:42
    —
Не понял. Зачем wfx-плагин запускать из autorun? Во-первых, такого функционала нет, а во-вторых, в этом нет необходимости.
Что касается автодобавления файла, то сперва хотелось бы увидеть команду в cfg.
Пару сопутствующих вопросов:
1. Autorun в списке контентных плагинов стоит первым?
2. Секция в wincmd для них идёт раньше, чем для wfx?

#909:  Author: LonerDLocation: Макеевка PostPosted: Thu Aug 22, 2013 19:04
    —
Flasher wrote:
Не понял. Зачем wfx-плагин запускать из autorun?

С VirtualPanel есть такой нюанс, что вначале нужно запустить плагин (зайти на панель), и только потом уже можно будет работать с ним. Например, в шапке темы VirtualPanel есть команда "P>V Добавить объект на временную панель...". Она не работает если предварительно не зайти на виртуальную панель.

dreamdeath86 wrote:
хочу с помощью Autorun запустить плагин VirtualPanel.wfx, но плагин то подгружается но реакции 0

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

У меня, например, такая секция сейчас в Autorun.cfg:
# Activate Virtual Panel Plugin
Code:
CommandExec /CD "\\\Virtual Panel"
Sleep 50
SendCommand 570

#910:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Aug 22, 2013 19:09
    —
dreamdeath86,
Если просто загружать плагин командой LoadLibrary, работать он не будет, т.к. тотал не будет знать, что он загружен. Способ, который указал LonerD, должен работать корректно.

#911:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Aug 22, 2013 20:14
    —
Loopback
Можно ли для выполнения CommandExec предусмотреть вариант синтаксиса, где открытие одного конкретного каталога (или виртуальной папки) происходит не слева, как по умолчанию, а справа? Дело в том, что предложенная выше схема тихой активизации VirtualPanel не дружит с ключом ActiveRight=1.

#912:  Author: FlasherLocation: Москва PostPosted: Thu Aug 22, 2013 20:53
    —
LonerD wrote:
что вначале нужно запустить плагин (зайти на панель), и только потом уже можно будет работать с ним.
Работать же не в общем смысле, а с определённой функцией, о чём ни слова не было написано. И это не загрузка плагина.

#913:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Aug 22, 2013 22:09
    —
Avada,
Можно делать так: CommandExec /CD "" "\\\Virtual Panel".
Ещё можно открывать в текущей, а не в правой или левой: CommandExec /CD:S "\\\Virtual Panel". Но у меня почему-то всё равно открывается в левой в таком случае. Возможно, проблема в том, что тотал активирует правую панель уже после того, как выполняет команду. Exclamation
А так у меня открывается и в правой: ShellExec "%COMMANDER_PATH%\Addons\TCFS2\TCFS2.exe" '/ef "tcd(`\\\Virtual Panel`,,S)"'.
А так после загрузки временной панели тотал моментально возвращается в предыдущий каталог в активной панели: ShellExec "%COMMANDER_PATH%\Addons\TCFS2\TCFS2.exe" '/ef "tcd(`\\\Virtual Panel`,,S) tcm(570, 1)"' (отправка команды "Назад" через PostMessage позволяет отложить её выполнение в аккурат до момента, когда тотал освободится).

#914:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Aug 22, 2013 23:48
    —
MVV
CommandExec /CD "" "\\\Virtual Panel" вроде бы вполне устраивает, спасибо.
А с текущей панелью и у меня не получилось (вариант с /CD:S, естественно, пробовал).
Остальные предложенные варианты попозже посмотрю.

#915:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 23, 2013 10:01
    —
Кстати, в справке заметил неточность.


Loopback,
В описании CommandExec надо исправить CommandExec [/CD[:T|S|TS]] на CommandExec [/CD[:[T|S|TS]]], а то непонятно, нужно ли двоеточие для, скажем, S. Или на CommandExec [/CD[:{T|S|TS}]], т.к. фигурные скобки указывают на необходимость выбрать вариант.

Думаю, также стоит отметить, что такой запутанный синтаксис может быть непонятен не знакомым с ним людям.

#916:  Author: FlasherLocation: Москва PostPosted: Fri Aug 23, 2013 15:17
    —
У меня с этим CD на последней бете почему-то выдаёт:
Quote:
---------------------------
Autorun plugin error
---------------------------
Error in command at line [12]:

Unsupported parameter: /CD
---------------------------
ОК
---------------------------
Confused

#917:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 23, 2013 17:01
    —
С этой? У меня работает.

#918:  Author: dreamdeath86 PostPosted: Sat Aug 24, 2013 05:35
    —
Решил проблему так:

SendCommand cm_OpenNewTab
CommandExec em_VP
SendCommand cm_CloseCurrentTab
SendCommand cm_SrcActivateTab1

где em_VP это cd "///VirtualPanel/"

#919:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Aug 24, 2013 09:00
    —
dreamdeath86
Очень сомневаюсь, что вот именно с этим проблема решена. Для пользовательской команды em_VP приведён неверный синтаксис: прямые слэши вместо обратных. Завершающий слэш и кавычки в данном случае, кстати, не обязательны. Читаем здесь.
Кроме того, выше предлагались явно более экономичные и универсальные варианты. В частности, непонятно, зачем понадобилась команда cm_SrcActivateTab1. Что, по умолчанию при запуске TC в этой панели всегда должна быть активна первая вкладка?

Flasher
И у меня на 15-й бете работает (вариант с CommandExec /CD "" "\\\Virtual Panel").

MVV
Посмотрел варианты с ShellExec. У меня работает неправильно: в обеих файловых панелях открывается Virtual Panel, возврат в предыдущий каталог не выполняется.

All
В теме по Virtual Panel дана ссылка на это обсуждение.

#920:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Aug 24, 2013 15:59
    —
Avada,
Ещё раз проверил. Даже если панель грузится несколько секунд, независимо от состояния ActiveRight, эта команда работает идеально:
MVV wrote:
А так после загрузки временной панели тотал моментально возвращается в предыдущий каталог в активной панели: ShellExec "%COMMANDER_PATH%\Addons\TCFS2\TCFS2.exe" '/ef "tcd(`\\\Virtual Panel`,,S) tcm(570, 1)"'

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

#921:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Aug 24, 2013 19:57
    —
MVV
И я ещё раз проверил. Всё то же самое: две открытых папки плагина. Сразу же. Только курсор с некоторой задержкой появляется. На всякий случай проверил, не влияет ли TWinKey. Нет, и без него то же.

#922:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Aug 24, 2013 23:11
    —
Точно больше нигде никаких команд не включено, открывающих временную панель при запуске?

#923:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Aug 24, 2013 23:30
    —
MVV
Абсолютно точно.

#924:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Aug 25, 2013 12:17
    —
Возможно, уже в теме по TCFS2 нужно обсуждать это, но сработает ли правильно эта команда, если её запустить с панели инструментов?

#925:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 12:45
    —
MVV
Перехожу в тему по TCFS2.

#926:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 13:14
    —
Avada wrote:
И у меня на 15-й бете работает (вариант с CommandExec /CD "" "\\\Virtual Panel").
Всё, разобрался в причине..

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

Avada, так:
Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef tcd(`\\\"Virtual Panel"`,,S) tcm(570,1)'

#927:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 13:58
    —
Flasher
Так у меня опять получаются две открытых папки плагина (см. выше).

#928:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 14:01
    —
Avada
А ты ТС перезапускаешь (например, по скрипту) или закрываешь/открываешь?

#929:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Aug 25, 2013 14:02
    —
Flasher wrote:
Avada, так:

Это абсолютно равносильно заключению в двойные кавычки всей команды tcd, которое я бы назвал более правильным (кстати, для многих программ, обрабатывающих двойные кавычки внутри параметров иначе, это будет единственно правильный вариант).
Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef "tcd(`\\\Virtual Panel`,,S)" tcm(570,1)'

Но по идее работать это всё должно так же, как и в таком варианте.

#930:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 14:27
    —
MVV wrote:
Это абсолютно равносильно заключению в двойные кавычки всей команды tcd
Я понимаю (я взял лишь необходимую часть), но у тебя не так, ты заключаешь в кавычки обе команды.

Avada
У меня с ActiveRight=1 всё чётко отрабатывает.
Какие у тебя открыты папки в момент закрытия ТС, и в каком состоянии активные вкладки?

#931:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Aug 25, 2013 14:53
    —
Flasher wrote:
Я понимаю (я взял лишь необходимую часть), но у тебя не так, ты заключаешь в кавычки обе команды.

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

Flasher wrote:
У меня с ActiveRight=1 всё чётко отрабатывает.

Я даже отключал ActiveRight для теста, тоже работает.

#932:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 15:07
    —
Flasher wrote:
Какие у тебя открыты папки в момент закрытия ТС, и в каком состоянии активные вкладки?

Проверялось в единобразных условиях. Корневые папки дисков C: и D:. Они же, естественно, в активных вкладках.

Flasher wrote:
А ты ТС перезапускаешь (например, по скрипту) или закрываешь/открываешь?

Специально уточню, что при ActiveRight=0 проблем нет, всё обрабатывается нормально. Но у меня в норме значение этого ключа 1. И здесь при скриптовом перезапуске оказывается активна левая панель, там отображается корень диска C:, а справа открывается папка плагина без возврата в предыдущую папку. При любом другом варианте перезапуска или закрытия/открытия — видны две открытых папки плагина, активна правая панель.

MVV wrote:
Я даже отключал ActiveRight для теста, тоже работает.

Отключение ActiveRight — это ActiveRight=0 (активна левая панель). А у меня 1.

#933:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 15:36
    —
Avada
Пробовал и так, как ты описал, всё равно такого глюка с открытием одной и той же виртуальной папки в обеих панелях нет.
Хочу вернуться к этому фактору:
MVV wrote:
Возможно, проблема в том, что тотал активирует правую панель уже после того, как выполняет команду.
А если указать tcm(570,-1) ?

#934:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Aug 25, 2013 15:50
    —
Avada wrote:
И здесь при скриптовом перезапуске оказывается активна левая панель, там отображается корень диска C:, а справа открывается папка плагина без возврата в предыдущую папку. При любом другом варианте перезапуска или закрытия/открытия — видны две открытых папки плагина, активна правая панель.

Я тоже думаю, что в твоем случае и с TCFS2 команда отправляется до того, как тотал активирует правую панель. Попробуй поставить задержку перед вызовом команды:
Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef delay(500) "tcd(`\\\Virtual Panel`,,S)" tcm(570,1)'


Flasher wrote:
А если указать tcm(570,-1) ?

Это не поможет. Если в случае с PostMessage тотал делает текущие дела (загрузку плагина) и потом обрабатывает очередь сообщений, куда попадает команда "Назад" (т.е. в аккурат когда плагин загрузится и вернет управление), то в случае с фоновым SendMessage тотал будет вынужден обработать её непосредственно в момент получения, и с большой степенью вероятности этот момент наступит раньше, чем нам нужно.

#935:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 15:59
    —
MVV wrote:
Попробуй поставить задержку перед вызовом команды:
Ему не резон, первый предложенный вариант тоже может идти с задержкой (предложенной LonerD и меньшей в 10 раз, кстати, 50 против твоих 500). И раз виртуальная папка таки открывается в правой панели, то логично было бы задержку ставить между функциями, а не до.
MVV wrote:
в случае с фоновым SendMessage тотал будет вынужден обработать её непосредственно в момент получения, и с большой степенью вероятности этот момент наступит раньше, чем нам нужно.
Т.е. ожидания результата (как подразумевается в ReadMe) тут никакого не будет?

#936:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 17:28
    —
MVV wrote:
Попробуй поставить задержку перед вызовом команды

Попробовал. И рад сообщить, что в таком виде всё работает нормально. Также выяснил, что при delay(380) глюки ещё есть, а при delay(390) — уже нет.
А в первом варианте (с /CD) задержка действительно гораздо меньше — однако же всё работает.

#937:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 17:46
    —
Avada
А если принудительно переходить в правую панель?:
Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef tcm(4002,0) "tcd(`\\\Virtual Panel`)" tcm(570,1)'

А вообще лучше даже так:
Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef "tcd(,`\\\Virtual Panel`)" "tcm(4002), eval(L_isActive)" tcm(570,1)'

#938:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 18:07
    —
Flasher
У меня это выглядит так, что TC то ли вообще не открывается, то ли всё же пытается открыться, но моментально закрывается. Во всяком случае, работать с ним нельзя совсем, так что глубже я не копался.

#939:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 18:11
    —
Avada
Со второй пробовал?

#940:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 18:25
    —
Flasher
Да, потом попробовал. Со второй всё работает.


Last edited by Avada on Sun Aug 25, 2013 18:27; edited 1 time in total

#941:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 18:27
    —
Avada wrote:
Со второй всё работает.
Ну вот и хорошо. И без задержки, что нам и требовалось получить. Wink

#942:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 18:32
    —
Flasher
Ну, меня эта задержка не сильно напрягала... Но три проверенных работоспособных варианта — это, конечно, хорошо.

#943:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 18:40
    —
Avada
А почему три?

Кстати, можно сюда ещё проверку значения ключа ActiveRight воткнуть для пущей оптимальности.

#944:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 18:56
    —
Flasher
Первый — с /CD. Второй и третий — варианты применения TCFS2 с задержкой и без.

#945:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 19:19
    —
Avada
Понятно. А оптимальная история будет такая:
Code:
Set TCFS2 '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe'
IniRead ACTIVE_RIGHT %COMMANDER_INI% Configuration ActiveRight
If %ACTIVE_RIGHT% = 1 Then
  ShellExec %TCFS2% '/ef "tcd(,`\\\Virtual Panel`)" "tcm(4002), eval(R_isActive == 0)" tcm(570,1)'
Else
  ShellExec %TCFS2% '/ef "tcd(`\\\Virtual Panel`)" tcm(570,1)'
EndIf


Last edited by Flasher on Sun Aug 25, 2013 20:00; edited 1 time in total

#946:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 19:57
    —
Flasher
Не очень-то она оптимальная пока что. Sad С последним вариантом при попытке перезапуска TC стабильно вылезает
 access violation
Тотал вешается намертво, его процесс приходится убивать.

#947:  Author: FlasherLocation: Москва PostPosted: Sun Aug 25, 2013 20:00
    —
Avada
Странно, а сейчас?

#948:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Aug 25, 2013 21:36
    —
Интересно, связано ли исключение с тоталом, или ошибка в плагине. В первом случае бы сообщить Гислеру.

Насколько я понимаю логику, если мы рассматриваем варианты с активной панелью, то:
1. Если ActiveRight==0, мы просто открываем виртпанель и идём назад.
2. Если ActiveRight==1 и активна левая панель, то очень скоро тотал активирует правую, и нам надо открывать виртпанель справа и идти назад после активации правой панели.
3. Если ActiveRight==1 и активна правая панель, то просто открываем виртпанель и идём назад.

Т.о., если (ActiveRight==1)==R_isActive, т.е. панель меняться не будет, мы просто открываем виртпанель и идём назад (объединил варианты 1 и 3), в противном случае надо действовать, как в варианте 2.

#949:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 25, 2013 22:08
    —
Flasher
К cожалению, и сейчас всё то же исключение.

#950:  Author: Loopback PostPosted: Mon Aug 26, 2013 10:12
    —
MVV wrote:
Думаю, также стоит отметить, что такой запутанный синтаксис может быть непонятен не знакомым с ним людям.

Ну тут уж вряд ли упростить получится. Просто надо будет пару примеров в справке дать.
Flasher wrote:
У меня с этим CD на последней бете почему-то выдаёт:

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

#951:  Author: FlasherLocation: Москва PostPosted: Mon Aug 26, 2013 12:51
    —
Avada
Странное дело. На других машинах с XP SP3 проверил - всё пучком..
Но судя по всему это связано с этими строками:
Code:
IniRead ACTIVE_RIGHT %COMMANDER_INI% Configuration ActiveRight
If %ACTIVE_RIGHT% = 1 Then
Может, функция чтения ini кривая, может, с плагином каким-то конфликтует. Проверить бы с отключёнными секциями плагинов (для wdx оставить только autorun, естественно).

#952:  Author: Loopback PostPosted: Mon Aug 26, 2013 13:16
    —
Flasher wrote:
Но судя по всему это связано с этими строками:

Flasher wrote:
Может, функция тения ini кривая


Я бы тут скорее подозревал условие. Хорошо бы узнать, что после чтения из ini оказывается в переменной ACTIVE_RIGHT.

#953:  Author: FlasherLocation: Москва PostPosted: Mon Aug 26, 2013 13:43
    —
Loopback
По логике должна быть единица. Если не она, или ключ отсутствует, то выполняется другая команда.

#954:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Aug 26, 2013 21:10
    —
Flasher wrote:
Проверить бы с отключёнными секциями плагинов (для wdx оставить только autorun, естественно).

Проверял. Та же ошибка.

#955:  Author: FlasherLocation: Москва PostPosted: Tue Aug 27, 2013 00:02
    —
Avada
Ладно, проехали. Попробуй тогда вместо этого так:
Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' "/ef 'tcd(,`\\\Virtual Panel`) run_item(JumpR), tcini(Configuration, ActiveRight, 1) | tcd(`\\\Virtual Panel`)" tcm(570,1)'"
Предварительно добавь в секцию Items конфига TCFS2 строчку:
Code:
JumpR=tcm(4002,0), eval(R_isActive==0)

#956:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Aug 27, 2013 09:21
    —
Flasher
Попробовал. TC открывается с теми же каталогами, что при закрытии, но Virtual Panel не загружается (проверялось и попыткой вызова виртуального браузера, и по статусу плагина в TC Plugins Manager).

#957:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Aug 27, 2013 09:48
    —
Flasher, настоятельно не рекомендую заменять двойные кавычки на апострофы непосредственно в строке параметров TCFS2 - это совершенно не поддерживается. И вообще у тебя микс кавычек. В апострофы нужно заключать всю строку параметров (по правилам плагина), а уже в строке использовать только двойные кавычки (уже по стандарту).

Avada, ещё один способ определить, что панель загружена - посмотреть переменные окружения.

#958:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Aug 27, 2013 09:59
    —
MVV wrote:
ещё один способ определить, что панель загружена - посмотреть переменные окружения.

Ага, вижу.

#959:  Author: FlasherLocation: Москва PostPosted: Tue Aug 27, 2013 12:17
    —
MVV
Напиши тогда рабочий вариант с 'правильными' кавычками.

#960:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Aug 27, 2013 16:03
    —
Flasher,
У тебя были правильные варианты, да и я уже писал, как нужно.

Code:
ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef "tcd(,`\\\Virtual Panel`) run_item(JumpR), tcini(Configuration, ActiveRight, 1) | tcd(`\\\Virtual Panel`)" tcm(570,1)'

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

#961:  Author: FlasherLocation: Москва PostPosted: Tue Aug 27, 2013 18:43
    —
MVV
Вроде работает. Но такое ощущение, что ещё вчера так тоже пробовал (видимо, где-то была ошибка).

#962:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Aug 27, 2013 19:50
    —
ММV
Проверил последний вариант. У меня не работает: по-прежнему вызывается access violation. И по-прежнему возвращаюсь к не совсем универсальному, но зато безукоризненно работающему варианту с /CD. В принципе, он меня вполне устраивает, но если нужно и дальше разбираться в причинах глюков при использовании TCFS2, я готов, разумеется, продолжать.

#963:  Author: FlasherLocation: Москва PostPosted: Tue Aug 27, 2013 20:58
    —
Avada
А в какой кодировке wincmd.ini? Если с "почти" чистым (кроме нужных для теста ключей) в ANSI попробовать?

#964:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Aug 27, 2013 21:04
    —
Flasher
А у меня они все и есть в ANSI...
Прошу прощения, но в связи с некоторыми обстоятельствами (тема на нашем форуме, думаю, вскоре воспоследует) я переключаюсь на другие дела.

#965:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Aug 27, 2013 21:09
    —
Avada wrote:
если нужно и дальше разбираться в причинах глюков при использовании TCFS2, я готов, разумеется, продолжать

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

#966:  Author: LonerDLocation: Макеевка PostPosted: Wed Aug 28, 2013 02:18
    —
Loopback
TC 8.50Я1 x32. WinXP x32. Подплагин MoveButton оптять отвалился.

#967:  Author: Loopback PostPosted: Wed Aug 28, 2013 10:01
    —
LonerD
Да, уже пробовал вчера, переносит кнопку отправки в фон. Гислер форму поменял...

#968:  Author: LonerDLocation: Макеевка PostPosted: Wed Aug 28, 2013 15:21
    —
В связи с появлением команды поиска в отдельном процессе, возникает вопрос - как запустить эту команду, чтобы при её запуске не выполнялось всё то, что прописано в Autorun.cfg ?
Пока что возникла шальная мысль навесить вместо cm_SearchSeparate комбинацию команд: замена autorun.cfg на пустышку - выполнение cm_SearchSeparate - вставка задержки (без неё не работает) - возврат файла autorun.cfg. Неэлегантно, но работает.
Есть ли другие решения?

Наверное, лучшим выходом будет - в сам плагин Autorun вставить возможность игнорировать содержимое Autorun.cfg при запуске команд поиска/сравнения/ит.д. в отдельном процессе.

#969:  Author: FlasherLocation: Москва PostPosted: Wed Aug 28, 2013 15:52
    —
Лучше попросить Гислера, чтобы не затрагивал плагины при задействовании подобных команд.

#970:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 28, 2013 16:40
    —
LonerD wrote:
В связи с появлением команды поиска в отдельном процессе, возникает вопрос - как запустить эту команду, чтобы при её запуске не выполнялось всё то, что прописано в Autorun.cfg ?


LonerD wrote:
Пока что возникла шальная мысль навесить вместо cm_SearchSeparate комбинацию команд

Тогда уже комбинацию из команд: установку некоторой переменной окружения и запуск поиска, а в Autorun.cfg все действия выполнять при условии, что эта переменная не определена.

Flasher wrote:
Лучше попросить Гислера, чтобы не затрагивал плагины при задействовании подобных команд.

Как же можно отказываться от контентных плагинов в диалоге поиска?

Раз у нас особый плагин, он и должен решать проблему: при инициализации вызывать функцию GetCommandLine и смотреть, есть ли в командной строке тотала параметр /S=.

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

#971:  Author: FlasherLocation: Москва PostPosted: Wed Aug 28, 2013 17:16
    —
MVV wrote:
Как же можно отказываться от контентных плагинов в диалоге поиска?
Нельзя, не подумал..

Как вариант можно ещё проверять на запущенность процесса ТС и пихать в условие весь код.

#972:  Author: Loopback PostPosted: Wed Aug 28, 2013 18:08
    —
LonerD wrote:
Наверное, лучшим выходом будет - в сам плагин Autorun вставить возможность игнорировать содержимое Autorun.cfg при запуске команд поиска/сравнения/ит.д. в отдельном процессе.

MVV wrote:
Раз у нас особый плагин, он и должен решать проблему: при инициализации вызывать функцию GetCommandLine и смотреть, есть ли в командной строке тотала параметр /S=.

Да, первая мысль такая и приходит. Он действительно открывает новый экземпляр с этим параметром?
MVV wrote:
А можно сделать универсальную вещь: добавить в плагин возможность чтения командной строки в переменную. Тогда в конфиге можно будет проверять, содержатся ли в командной строке определенные параметры (просмотр/синхронизация/поиск в отдельном процессе) и не выполнять те или иные команды.

Можно и так, но наверно, парсить командную строку средствами плагина будет не слишком удобно.

Наверно, лучше будет сделать команды типа "CmdlineGetParam var param" и "CmdlineHaveParam param", c ними будет проще.

Кстати, исправил MoveButton, новая версия на Wincmd.ru


Last edited by Loopback on Wed Aug 28, 2013 18:09; edited 1 time in total

#973:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 28, 2013 18:08
    —
Quote:
Как вариант можно ещё проверять на запущенность процесса ТС и пихать в условие весь код.

А если я запустил кучу процессов?

Quote:
Он действительно открывает новый экземпляр с этим параметром?

Да, я первым делом проверил, как именно открывается отдельный поиск - просто запускается новый тотал с параметром /S=F (плюс параметры поиска, такие как режим сортировки и путь поиска).

#974:  Author: FlasherLocation: Москва PostPosted: Wed Aug 28, 2013 19:21
    —
MVV wrote:
А если я запустил кучу процессов?
Тогда можно проверять родительский процесс и заголовок окна.

#975:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 28, 2013 19:38
    —
Quote:
Тогда можно проверять родительский процесс и заголовок окна.

Есть и такой вариант: проверить, что у текущего процесса НЕТ главного окна (т.к. его нет у процесса фонового поиска), т.е. перебрать окна с классом TTOTAL_CMD и убедиться, что нет окна с нашим PID. Но мне всё равно кажется, что будет более гибко, если в конфиге можно будет вручную искать текст в комстроке.

#976:  Author: FlasherLocation: Москва PostPosted: Wed Aug 28, 2013 20:19
    —
MVV wrote:
Но мне всё равно кажется, что будет более гибко, если в конфиге можно будет вручную искать текст в комстроке.
"Вручную" - это как?

#977:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Aug 28, 2013 20:32
    —
Что-то вроде:
Code:

# Общие команды
...

StrPos nPosS %PROCESS_COMMANDLINE% '/S='
If nPosS < 0 Then
# Команды только для полноценного TC
...
EndIf


Вполне логично будет добавить в подплагин Autorun_Process.dll псевдопеременную PROCESS_COMMANDLINE, возвращающую командную строку тотала.


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

#978:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Aug 28, 2013 21:20
    —
Loopback
Я тоже собирался про это сообщить, но руки не доходили. Самый яркий пример проблем с высотой и прокруткой элементов — это, видимо, верхняя часть страницы про ShellExec.

#979:  Author: Loopback PostPosted: Thu Aug 29, 2013 13:29
    —
MVV
Avada
Покопался немного с этим, похоже, совсем хорошо не сделать (chm, насколько я понимаю, использует ядро IE6, а у него с поддержкой css не очень), но вертикальную прокрутку убрал. В следующей версии будет.

#980:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 30, 2013 16:40
    —
Предлагаю размещать новую кнопку '+' справа от кнопки 'Опции', которую слегка сдвинуть левее. А комбобокс фильтра растягивать до прежней длины, а то уродливо смотрится укороченный.

Кстати, как ты ищешь кнопки? Думаю, кнопку '+' можно искать по тексту, кнопку 'Опции' - тоже (искать кнопку с текстом '>>' - я проверил, этот текст не подлежит локализации). Так мы не будем зависеть от идентификаторов, порядка размещения и позиции/размера кнопок.

Набросал себе временное решение для отключения загрузки Autorun_MoveButton.dll на бете:
Code:
If %ProductVersionMS_H% = 8 AND %ProductVersionMS_L%+0 >= 5 OR %ProductVersionMS_H% = 0 Then
Else
   # Включает функционал MoveButton
   LoadLibrary Plugins\Autorun_MoveButton.dll
   MoveOptionsButton MOVE_LEGACY
EndIf

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

N3q8ryccAANxyftfJgcAAAAAAAAiAAAAAAAAAA84+O0AJpaOcAAX9+wFu+r0/5QBL0TuTr0JNTj9
wXIs+2C8FA6O7vPnB3UmwHoI1yz34WmVTTWglcU2hJnQdzChVQ5ISHLBgmBQy3zuSK8o4CGAm7w+
2Off2v5s3rfHF6vkFg9jm+eNHXNfAISl1rVl32nrgGvlEgy7naPpnEhoayv5UgNuGxj6668TqIPt
28oiQ+7a4uzociPiL6WMYcBlnhkjyYUmwWs5lFehgEnZ2ZcPN4MvwyFJBXNDy533gMRL/5rFnNdz
+sYsRnOooY42LafCxoQqJs1Mskm0AQtTRr9ouNoWUUFm1i8i1qb/qze+MPx5v03r12FGlRtcPzLg
BoR67OZbD5kDb/sQhmofLfEBbtzwaFqnVRQZPg4JTkFoS0CkGZcbF/HqcEVTyY9k+ovzW4jZbhzQ
BRKBNCA40o7/JE9bNfIGmXd0+swAxJa8vb9EHmlcps/bEKwHpxGCixiljulG9jX9N+gG9HZAvhR1
Mgnt6XCxSy/TOZ14krEVS5RdZ4+9oIwCrYbF5GVTVT8N0TqZ9kUipp3w9tCra67PvwP2Q+7daN7F
wqEag2juOVkgAujAfVfaDps5VGm93L7xL4sbSOunwQNBF7ITMRrG0PLygmrpAXzLkr6rtr+amtS4
r/p1D75vs9zGWFTcVWYe3S8tXefTPOPMWvaGMcGfoFPjV6FK156mMyxjN/GbaOQv8rDLHegF6/z1
f/gIVejJMV8BGnx73ybK/91GmudnwM+2157oRCKU6B4oO8PnP8f50lU/CQh5DpPCH9qYSMqlEEz4
2LK3zwfLBwQDnn/FwJlQqvaqDRGs83kXCfRzC+/AD5z4PkKBpK46gr5XvSViRWUiZF1eSrw1Sezi
qEruqD6n54La5uQfta7b2qNIrAbj7K1ilChBPrK+QH73o63RhmOjyZQ6rkoDBzFYA9lKCoSqFsxE
T/1pVz7BVO07oKDKyVmGKc9B6pT1hXoeKv2cu7iyiIe76LCaiwwE1JRKPmqeFlb23ro48DUJvBIi
hu3kQcrJRDGBuWmerI7se+9VJekaE0mFEfTgWna+gYDfqRcNSlvtva5iKVkzZHqvQMBBermjECve
hnZ4wpDcmcq33vkZJcxPIfzAhQKMz81oLzZmpBEATgY4OWUd4swnPn9gcfeozOErsPWq7HboEinI
KljcFYswAAAmlo5wABf37AW76vT/lAEvRO5OvQlUFSGQUNBBPyCx4Jf3cXTTAMtckMy9ER04Go1o
bmxY1lAR+U9ZdJs0NQBZafBKo+mVo+ecoR6e4HABPznYhJuV7s1bEFDKMyQeZMlr90wZwuAaWdWA
CwQiamAeS4roImA+XIlDlkQ0ecXxzUcAytD5X9RGTITI6vXIloMc1CScmzoo3KBFXM8t2ubPTDXN
TpeUv0x6ci5RqaUGSBP6b7U1vl5XKBJ6LtKnvm9u6+0wJjnqlKUyjA3u1kZAHwXAjyj8OA8V4fTr
vcF7QO3cJPNsX0fYqLJYcFV2Jxth9uQ5j0U81HDCFZE1hG4G60wzIFjfgafGfjsyXduLmw27oJZr
O4eLYXpvWSvP8wR45QI9eCeqPHZkEFdb5qPDw/VuVwY+jy7DYo/7Efd3eIr4oOqXgJHl0lgoB4AX
RwnqZ+PnEhSyNQgjh2NxwS4oIK02pv4hp7humKeXylFfBjbUL10R2s2OND7sAJMvlMjQJZEkKvNW
gng8qDZB54lam/NX1VHP7DYtDX8htvevDPNNFOaWXM/PaVeqwUPWwPINwBu9cpqkbVJW9Q4jZx1L
IkwllA9oTMFEF97x5LyyRf90y8ORybDW/KalFb9Qq8NkRj1W+dZbw7hf+ksdoNX4dyItfgcMPGiI
rkkB/ZLpseqBJvzmwlgB7nuRqrFqbITraiL++KwD/v4DbVjTYjKjjpM7ab+uV3e2lErQR3mo38pE
ZUpv5OZ4kjTa6vxtZhblP/zGKBvBmxJwHBw56FtKoSZFzeu508pQjeHRnddyqjeipZpsju2Eg13b
bqY01UqhIAakYVUZyNqt4471VlIAQiiXM6uyGQbzCOInofD2pTBLf1uHruANVVZjGpLmdSYUCl7Q
nO/7FL2czJH67W07ZCumUnr5Xv/cE8UxUEjij5rdgAZwCsRYjjVGW4T2ibrJIOgkpr+CibTsIcul
OOYxUhQRk0P8renM+lS+PQDiU5YyAYy4Ni/8TWPTtGQf6bKGhPWudW5E4J6F5zUwBSZHVbxdOkd+
CyahN7L/TxT/+jYCGKrNoTfxYzIRzHSxaRAAAACBMweuMZ74dOMZA+HD5SrD2xKhTe0dXRDBd/2h
V8+pT+S8tt+sqGo5lg7OkT/8r6GP5QWhdhjX2kI4OgI44exbcYksCLN+ypRjHiAHHsXDkieqVodV
m2OyQsoSRlt+n5DUzyrKAY98a+YNV83lac/kRByhm8J2pzes0AAXBoapAQl9AAcLAQABIwMBAQVd
ABAAAAyAuAoBw/OOTgAA


#981:  Author: Loopback PostPosted: Fri Aug 30, 2013 19:37
    —
MVV wrote:
редлагаю размещать новую кнопку '+' справа от кнопки 'Опции', которую слегка сдвинуть левее. А комбобокс фильтра растягивать до прежней длины, а то уродливо смотрится укороченный.

Ну если только третьим вариантом, меня текущее расположение в принципе устраивает Smile

MVV wrote:
Кстати, как ты ищешь кнопки? Думаю, кнопку '+' можно искать по тексту, кнопку 'Опции' - тоже (искать кнопку с текстом '>>' - я проверил, этот текст не подлежит локализации). Так мы не будем зависеть от идентификаторов, порядка размещения и позиции/размера кнопок.

По идентификаторам. В принципе можно и по тексту, если только быть уверенным, что Гислер не добавит еще кнопок с таким же текстом Smile

MVV wrote:
Набросал себе временное решение для отключения загрузки Autorun_MoveButton.dll на бете:

А зачем отключать? Вчера выложил исправленную версию, работающую на 8.50.

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

Code:

DWORD dwHandle = 0, dwLen;
dwLen = GetFileVersionInfoSize((LPCWSTR)szFileName, &dwHandle);


Всегда возвращает 0. Для любых других файлов все ок. В чем может быть косяк?

#982:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 30, 2013 20:32
    —
Quote:
Ну если только третьим вариантом, меня текущее расположение в принципе устраивает

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

Quote:
По идентификаторам.

Как так? Они же у контролов в дельфе каждый раз меняются...

Quote:
А зачем отключать? Вчера выложил исправленную версию, работающую на 8.50.

Ты ж в теме сообщай, а то не видно. Smile Заюзаем.

Quote:
Всегда возвращает 0. Для любых других файлов все ок. В чем может быть косяк?

Если ты о TC 8.50b1, то неудивительно: там нет ресурса VersionInfo. Smile

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

А в справке ещё не исправил скроллбары?

#983:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Aug 30, 2013 20:42
    —
MVV wrote:
Ты ж в теме сообщай, а то не видно.

Он вообще-то сообщил.

#984:  Author: Loopback PostPosted: Fri Aug 30, 2013 20:42
    —
MVV wrote:
Как так? Они же у контролов в дельфе каждый раз меняются...

Дезинформировал... По имени класса, конечно.
MVV wrote:
Если ты о TC 8.50b1, то неудивительно: там нет ресурса VersionInfo.

Вот ведь Shocked И ведь даже в голову не пришло проверить!

Раньше же всегда была, почему он ее убрал?

MVV wrote:
А в справке ещё не исправил скроллбары?

В следующей версии, скоро. Если хочется побыстрее, в chm-е есть файл offline.css, можно его CHMDir-ом распаковать и поправить. Там нужно селектор pre.code поменять на такой:

Code:

pre.code
{
    font-family: Consolas, "Andale Mono WT", "Andale Mono", "Bitstream Vera Sans Mono", "Nimbus Mono L", Monaco, "Courier New", monospace;
    font-size: 1em;
    text-align: left;
    color: black;
    border-radius: 2px;
    border: 3px dashed silver;
    background-color: #fffff0;
    padding: 15px;
    overflow-y: hidden;


#985:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 30, 2013 20:48
    —
Точно, я как-то пропустил этот пост... Или он позже отредактировался. Smile

Quote:
Наверно, лучше будет сделать команды типа "CmdlineGetParam var param" и "CmdlineHaveParam param", c ними будет проще.

Думаешь, оно стоит добавления двух процедур? По-моему, переменной бы хватило. Но в любом случае, CmdlineGetParam будет возвращать всю комстроку или конкретный параметр? Если всю, название нелогичное, если параметр - то который из? А CmdlineHaveParam - правильнее будет CmdlineHasParam. Но сможет ли она искать часть параметра, или только целиком? Поиск подстроки был бы более общим вариантом.

Quote:
Дезинформировал... По имени класса, конечно.

Ты отличаешь TButton от TButton? Shocked

Quote:
Раньше же всегда была, почему он ее убрал?

На оффоруме уже сообщали, что нету. Считай это багом первой беты. Wink

Quote:
В следующей версии, скоро.

Не, подожду, я просто думал, что ты выложил новую версию уже после исправления.

#986:  Author: Loopback PostPosted: Fri Aug 30, 2013 21:01
    —
MVV wrote:
Думаешь, оно стоит добавления двух процедур? По-моему, переменной бы хватило.

Да, уже передумал, согласен Smile

MVV wrote:
Ты отличаешь TButton от TButton?

Так есть же еще номер экземпляра. Совместно с классом вполне надежно идентифицирует. До добавления новой кнопки в начало формы Smile

MVV wrote:
На оффоруме уже сообщали, что нету. Считай это багом первой беты.

Мда, этот баг стоил мне минут пятнадцати колупания, после чего бросил до лучших времен.

#987:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 30, 2013 23:03
    —
Quote:
Так есть же еще номер экземпляра.

Что за номер экземпляра? Идентификатор элемента управления? С ними-то как раз и проблема у дельфей, что они не фиксированы (тупо запустил 2 копии тотала, в одной кнопка ОК имеет идентификатор 00020632, в другой - 00020552, закрыл-открыл диалог заново - 00030632 и 00030552, и т.д.) в отличие от стандартных диалогов на API, где каждый элемент окна имеет неизменный идентификатор (часть вообще стандартны: кнопка OK - 1, Отмена - 2 и т.п.).

Поиск по тексту '>>' и '+' хотя и неуклюж, зато найдет кнопку в любой версии тотала.

#988:  Author: Loopback PostPosted: Tue Sep 03, 2013 12:45
    —
MVV
Нет, не идентификатор. Ну вот создается экземпляр контрола определенного класса, потом второй. Их порядок от запуска к запуску постоянен, в том числе и в дельфи. К сожалению, если добавить еще один контрол в форму до тех двух, номера будут другие.

Такое определение контролов "ClassnameNN" широко используется в Autoit и AHK для работы с чужими формами.

#989:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 03, 2013 13:35
    —
А, ты имеешь в виду tab order?

#990:  Author: Loopback PostPosted: Tue Sep 03, 2013 15:14
    —
В WinAPI получается да, но в формах дельфи tab order не привязан к порядку создания. Так что это именно порядок создания контролов.

#991:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 03, 2013 15:44
    —
Ну как именно ты получаешь эту информацию? Что вызываешь? Просто порядок выдачи результатов в FindWindowEx или что-то ещё?

#992:  Author: Loopback PostPosted: Tue Sep 03, 2013 17:37
    —
EnumChildWindows, в процедуре проверяю класс контрола. Если TButton, прибавляю счетчик. Если счетчик равен, скажем, 2 - это кнопка опций. И т.д.

#993:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 03, 2013 17:56
    —
Понятно, Z-порядок, который и есть tab order. По идее, FindWindowEx будет перечислять окна в том же порядке, но без callback-процедуры.

Code:
HWND hchild=0;
while (hchild=FindWindowEx(hwnd, hchild, "TButton", 0)) {
   // Добавить кнопку hchild в массив кнопок
}

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

#994:  Author: Loopback PostPosted: Tue Sep 03, 2013 22:04
    —
Возможно, но если нужно получать контролы разных классов (а с твоим третьим режимом по-любому надо получать комбобокс) - EnumChildWindows выглядит эффективнее, поскольку делает всё за один проход. Ну и вообще, я ничего не имею против каллбэков, скорее наоборот Smile

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

#995:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Sep 25, 2013 22:04
    —
Loopback
В 8.50 beta 4 опять изменилось окно копирования. В связи с добавлением опции проверки двухрядное расположение кнопок устранено, кнопка "Опции" теперь идёт по умолчанию последней в основном ряду. Но кому-то может по-прежнему нравиться старое расположение кнопки, обеспечиваемое Autorun_MoveButton.dll, так что плагин неплохо бы привести в соответствие.

#996:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Sep 25, 2013 22:56
    —
Добавлю, что предыдущие беты 8.50 более поддерживать не нужно, просто текущую 4-ю и предыдущие финальные версии.

#997:  Author: FlasherLocation: Москва PostPosted: Sat Oct 12, 2013 21:03
    —
У кого-нибудь ScriollTC сломался в последних бетах TC?

#998:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Oct 12, 2013 21:45
    —
Flasher
У меня работает.

#999:  Author: FlasherLocation: Москва PostPosted: Sat Oct 12, 2013 23:48
    —
Avada
Ничего тогда не понимаю. На чистом ТС 8.5 b5 проверял. А версия ScrollTC у тебя какая?

#1000:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Oct 13, 2013 00:11
    —
Flasher
Версия 1.30. Как и на TC 8.01. Включение в конфиге Autorun:
Quote:
# Включает функционал ScrollTC
If %AUTORUN_TCARCH% = 32 Then
LoadLibrary Plugins\ScrollTC.dll
Endif
Конфиг ScrollTC — по умолчанию. XP SP3.

#1001:  Author: FlasherLocation: Москва PostPosted: Sun Oct 13, 2013 12:20
    —
Avada
Извиняюсь. Оказался конфликт с какой-то программой. Перезагрузка помогла.

Loopback wrote:
По cpuid посмотрю, но может быть не сейчас.
Смотрел (с февраля-то)? Хотелось бы добавки.

#1002:  Author: Loopback PostPosted: Thu Oct 31, 2013 10:27
    —
Quote:
Добавлю, что предыдущие беты 8.50 более поддерживать не нужно

Разумеется, зачем нужны промежуточные беты?

Flasher wrote:
Смотрел (с февраля-то)? Хотелось бы добавки.

Нет, пока нет желания этим заниматься.

#1003:  Author: FlasherLocation: Москва PostPosted: Sat Nov 02, 2013 21:48
    —
Loopback wrote:
Нет, пока нет желания этим заниматься.
Так всё сложно? Может, хотя бы с этого начнём?

А как отключить для ProcessExecGetOutput вывод окна cp с комстрокой? Зачем оно вообще? В мануале об этом вообще ни слова.

Просьба ещё добавить переменную, возвращающую путь папки плагина.
А ещё лучше, если бы новые переменные наследовали пути нужных подпапок: ..wdx\Autorun\Scripts = %Scripts%; ..\wdx\Autorun\Utils = %Utils%.
Относительные пути могут фигурировать только в непосредственной склейке с командами, но их ещё нужно задействовать в параметрах.

#1004:  Author: Loopback PostPosted: Tue Nov 05, 2013 12:06
    —
Flasher wrote:
Так всё сложно?

Угу. Видишь ли, это хобби. Не ощущаю я желания вникать сейчас в это. Просто неинтересно.

Flasher wrote:
А как отключить для ProcessExecGetOutput вывод окна cp с комстрокой? Зачем оно вообще? В мануале об этом вообще ни слова.

Надо мне было обновить плагин в архиве... Вот тут исправленная версия лежит: http://forum.wincmd.ru/viewpost.php?p=102149

Flasher wrote:
Просьба ещё добавить переменную, возвращающую путь папки плагина.

Это можно.

Flasher wrote:

А ещё лучше, если бы новые переменные наследовали пути нужных подпапок: ..wdx\Autorun\Scripts = %Scripts%; ..\wdx\Autorun\Utils = %Utils%.

Относительные пути могут фигурировать только в непосредственной склейке с командами, но их ещё нужно задействовать в параметрах.

Вот в этом не вижу смысла. "Нужные" - это кому и какие? Мне, например, приведенные выше папки не нужны. Но если будет переменная с путем Autorun, никто не мешает создать нужные переменные к подкаталогам прямо в скрипте.

#1005:  Author: FlasherLocation: Москва PostPosted: Tue Nov 05, 2013 12:45
    —
Loopback wrote:
Просто неинтересно.
Отсутствие интереса с чем связано? С изучением кода или добавлением переменных?

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

#1006:  Author: Loopback PostPosted: Tue Nov 05, 2013 16:43
    —
Flasher wrote:
Отсутствие интереса с чем связано? С изучением кода или добавлением переменных?

С отсутствием лишнего времени.

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

Тестировал? Smile

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

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

Еще негативный момент - возникает неоднозначность с именами переменных. Вот допустим, есть каталог UTILS. Я получаю значение переменной %UTILS%, при этом в ней находится путь к подкаталогу UTILS в папке плагина (уже нелогично, но да ладно). Что произойдет, если я определю в начале скрипта переменную %UTILS%? А это зависит от того, где будет производиться проверка, до или после поиска переменной в списке. До - нельзя, иначе проверка существования каталогов будет производиться для всех переменных. Если после - в этом случае каталог никогда не будет возвращен, поскольку будет найдена переменная. И что делать? Запрещать создавать переменные с именем подкаталога?

В общем я вижу больше проблем, чем пользы. Вернее, пользы я вообще не нахожу.

Если уж заботиться о скорости, то самым быстрым способом будет непосредственное использование %AUTORUN_DIR%\Utils в тексте, либо предварительное создание переменной:

Set UTILS %AUTORUN_DIR%\Utils

#1007:  Author: FlasherLocation: Москва PostPosted: Tue Nov 05, 2013 17:54
    —
Loopback wrote:
С отсутствием лишнего времени.
Отсутствие интереса связано с отсутствием лишнего времени? Какая-то неувязочка.
Loopback wrote:
Впрочем, если вот этой информации хватит, можно будет добавить в sysinfo.
Сейчас меня по сути интересуют пока пару значений. Если оно получится с пом. данной функции, то ОК.
Loopback wrote:
Количество строк в скрипте, тем более с простыми операциями вроде присваивания, оказывает настолько малое влияние на скорость, что даже не знаю, о чем тут говорить.
Визуально по ощущениям с распуханием конфига скорость таки замедляется, особенно при подключении сторонних утилит.
Программно нет, не тестировал.
Loopback wrote:
Не будет, поскольку дисковые операции медленны.
Смотря какие диски. К тому же операции (уже внешние) в любом случае будут дисковые.
Loopback wrote:
Не говоря уже о том, что ты предлагаешь эти операции проделывать каждый раз при вызове макропеременной.
Нет, конечно, только вначале запуска, единожды, как и в случае с другими переменными. Поэтому негативный момент отпадает.

И ниже я предложил вариант получше. По нему что?

#1008:  Author: Loopback PostPosted: Tue Nov 05, 2013 23:02
    —
Flasher wrote:
Отсутствие интереса связано с отсутствием лишнего времени? Какая-то неувязочка.

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

Не, не получится.
Flasher wrote:
Визуально по ощущениям с распуханием конфига скорость таки замедляется, особенно при подключении сторонних утилит.

Запуск утилит - самая медленная операция. Затем идут прочие, которые работают с внешними файлами и ресурсами - Ini*, Load*, Reg*. Собственно, эти функции выполняются системой и практически не поддаются оптимизации на уровне кода плагина. Все остальное, в том числе строчные функции, выполняется примерно одинаково, но существенно быстрее перечисленных выше.
Flasher wrote:
Нет, конечно, только вначале запуска, единожды, как и в случае с другими переменными. Поэтому негативный момент отпадает.

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

Я не понял, что там подразумевалось.

#1009:  Author: FlasherLocation: Москва PostPosted: Wed Nov 06, 2013 00:14
    —
Loopback wrote:
Чего тут увязывать? Времени слишком мало, чтобы заниматься неинтересными вещами.
Игра слов какая-то. Мой вопрос о другом. Он про интерес и причины его отсутствия, а не про время, которое сегодня есть, завтра нет, оно не вяжется с интересом, оно вяжется с возможностями, не более.
Loopback wrote:
все равно остается неявное создание переменных, что я считаю идеологически некорректным.
По мне так нормально. Хитро и гибко.
Loopback wrote:
кроме чуть более короткой записи нескольких путей
А это уже не мало. Я вот всё пытаюсь тебя сподвигнуть на оптимизацию записей в конфиге. Ранее ещё функции обсуждали, если не забыл.
Loopback wrote:
Я не понял, что там подразумевалось.
|Plugins\Autorun_Sysinfo.dll = F:\Total Commander\Plugins\wdx\Autorun\Plugins\Autorun_Sysinfo.dll

#1010:  Author: Loopback PostPosted: Wed Nov 06, 2013 13:45
    —
Flasher wrote:
По мне так нормально. Хитро и гибко.

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

Странное у тебя понимание оптимизации.
Flasher wrote:
|Plugins\Autorun_Sysinfo.dll = F:\Total Commander\Plugins\wdx\Autorun\Plugins\Autorun_Sysinfo.dll

Нет, это что-то вообще за гранью.

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

#1011:  Author: FlasherLocation: Москва PostPosted: Wed Nov 06, 2013 15:10
    —
Loopback wrote:
Ну да, любую идею можно довести до абсурда.
Почему абсурда? В системе же можно менять имена виртуальных папок с автосогласованием с реестром.
Loopback wrote:
Странное у тебя понимание оптимизации.
Да нормальное. Есть разные макроязыки, где такие вещи предусмотрены. Взять хотя бы пресеты от kIT Universal Presets.

Что делать с реализацией? Как это работает? Везде или только в параметрах? Какой символ взял?
И как убедиться в несостоятельности?

#1012:  Author: Loopback PostPosted: Wed Nov 06, 2013 18:32
    —
Flasher wrote:
Что делать с реализацией? Как это работает? Везде или только в параметрах?

Загружаешь плагин в начале скрипта, получаешь кучу переменных с именами дочерних подпапок в папке Autorun. Работает везде, ибо обычные переменные.
Да, еще - работает только с текущей версией autorun (в которой добавлен AUTORUN_PATH), приложена в архиве.

Flasher wrote:
И как убедиться в несостоятельности?

Каждый решает для себя. Я уже убедился Smile

@All
Тестирую функцию получения значений из WMI. Тестовая версия плагина sysinfo, документация по функции тут.

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

#1013:  Author: FlasherLocation: Москва PostPosted: Wed Nov 06, 2013 19:37
    —
Loopback wrote:
Загружаешь плагин в начале скрипта, получаешь кучу переменных с именами дочерних подпапок в папке Autorun.
Что-то не хочет пока работать. Там косой черты нет на конце?
Loopback wrote:
работает только с текущей версией autorun
А для любой нельзя сделать (пусть не в базовом дистрибутиве)?

С WMI какая команда? Если всё как в примере, то не работает.

#1014:  Author: Loopback PostPosted: Wed Nov 06, 2013 23:15
    —
Flasher wrote:
Что-то не хочет пока работать. Там косой черты нет на конце?

Просто подключается через LoadLibrary, больше никаких действий не требуется. Но только с приложенной версией основного плагина.
Flasher wrote:
А для любой нельзя сделать (пусть не в базовом дистрибутиве)?

Я вложил в архив обновленную версию основного плагина. Она будет следующей версией. С более старыми работать не сможет.

Flasher wrote:
С WMI какая команда? Если всё как в примере, то не работает.

У меня нормально отрабатывает. Например:

Code:
GetWMIValue VAR "Manufacturer" "SELECT * FROM Win32_Processor"


выдает "GenuineIntel", а

Code:
GetWMIValue VAR "Caption" "SELECT * FROM Win32_VideoController"


выдает "VirtualBox Graphics Adapter".

#1015:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 00:43
    —
Loopback wrote:
больше никаких действий не требуется
Я про возвращаемое значение. Там в пути на конце обратный слеш есть. Уже убедился. Можно убрать?
Loopback wrote:
С более старыми работать не сможет.
А с новыми?
Loopback wrote:
Например
А, ну в примере-то сперва идёт переменная в знаках процента, и имя параметра не берётся в кавычки. Поэтому не сообразил сходу.
Тогда почему такой код не отрабатывает?:
Code:
GetWMIValue Manufacturer "Manufacturer" "SELECT Manufacturer FROM Win32_Processor"
SetEnv Manufacturer %Manufacturer%
В переменной среды пусто.

Last edited by Flasher on Thu Nov 07, 2013 09:51; edited 1 time in total

#1016:  Author: sa PostPosted: Thu Nov 07, 2013 08:00
    —
Flasher wrote:
почему такой код не отрабатывает?
Должно быть:
Quote:
"SELECT * FROM Win32_Processor"

#1017:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 09:00
    —
sa
Нет, не должно. Советую почитать, как составляются WQL-запросы.

#1018:  Author: sa PostPosted: Thu Nov 07, 2013 09:46
    —
Flasher
Хорошо! Скажу по-другому: такой код отрабатывает.

#1019:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 09:50
    —
Тьфу ты, не в ту переменную смотрел. Работает, но плохо. То есть значение, то нет (после перезапуска).
Вот эти строки всегда пустую переменную дают:
Code:
GetWMIValue DataWidth "DataWidth" "SELECT DataWidth FROM Win32_Processor"
SetEnv DataWidth %DataWidth%
А если их поставить перед теми, то и те ничего не дадут.

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

#1020:  Author: Loopback PostPosted: Thu Nov 07, 2013 12:03
    —
Flasher wrote:
Я про возвращаемое значение. Там в пути на конце обратный слеш есть. Уже убедился. Можно убрать?

Можно.
Flasher wrote:
А с новыми?

Будет, конечно.
Flasher wrote:
А, ну в примере-то сперва идёт переменная в знаках процента, и имя параметра не берётся в кавычки. Поэтому не сообразил сходу.

Да, это мой косяк. Исправил.
sa wrote:
Хорошо! Скажу по-другому: такой код отрабатывает.

При использовании * выбираются все параметры, но в запросе можно перечислять только нужные, как у Flasher. Хотя сомневаюсь, что это дает ускорение выборки.
Flasher wrote:
Вот эти строки всегда пустую переменную дают:

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

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

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

#1021:  Author: sa PostPosted: Thu Nov 07, 2013 12:04
    —
Flasher wrote:
Вот эти строки всегда пустую переменную дают

Может, из-за данных не строкового типа?

#1022:  Author: Loopback PostPosted: Thu Nov 07, 2013 12:14
    —
sa wrote:
Может, из-за данных не строкового типа?

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

#1023:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 13:15
    —
Loopback wrote:
Можно.
Ок. Жду.
Loopback wrote:
Будет, конечно.
Гуд!
Loopback wrote:
Хотя сомневаюсь, что это дает ускорение выборки.
Даёт, я раньше тестировал.
Loopback wrote:
Может эти значения просто не выдаются системой?
Выдаются без проблем. Иначе бы не ставил.
Loopback wrote:
Вообще, не совсем корректно использовать одно и то же имя для внутренней переменной и переменной окружения. Может поэтому и неоднозначности возникают.
Я сразу пробовал менять на другую переменную, всё равно то же самое. В любом случае первый пример отрабатывает отдельно.
Loopback wrote:
Но я пока не вижу удобного способа работать с коллекциями в Autorun.
Я боюсь за повторные вызовы сервиса WMI, они и резину тянут и, возможно, из-за этого проблемы с повторным запросом возникают.

#1024:  Author: Loopback PostPosted: Thu Nov 07, 2013 13:50
    —
Flasher wrote:
Ок. Жду.

Стоп. Не вижу я слеша на конце.
Flasher wrote:
Выдаются без проблем. Иначе бы не ставил.

Эту проблему решил. Как-то варианты СOM отличаются от дельфийских, и не преобразовываются автоматом.
Вот исправленный вариант.
Flasher wrote:
Я боюсь за повторные вызовы сервиса WMI, они и резину тянут и, возможно, из-за этого проблемы с повторным запросом возникают.

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

Пока что есть мысль получать в одном запросе все данные и возвращать их в переменную, а потом их оттуда извлекать по мере необходимости.

#1025:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 14:44
    —
Loopback wrote:
Стоп. Не вижу я слеша на конце.
А может на 7-ке с обр. слешем, а на XP без?
Loopback wrote:
Вот исправленный вариант.
Спасибо. Работает.
Loopback wrote:
Да я понимаю, что если будет несколько запросов - это не лучший вариант.
Похоже это не просто плохо для ресурсов, но и реально не даёт пользоваться повторным запросом. Можешь проверить.
Loopback wrote:
Пока что есть мысль получать в одном запросе все данные и возвращать их в переменную, а потом их оттуда извлекать по мере необходимости.
Ну, да. Только переменная должна быть массивом, чтобы вытаскивать нужное по индексу.

#1026:  Author: Loopback PostPosted: Thu Nov 07, 2013 16:03
    —
Flasher wrote:
А может на 7-ке с обр. слешем, а на XP без?

Проверил, везде без...
Flasher wrote:
Похоже это не просто плохо для ресурсов, но и реально не даёт пользоваться повторным запросом. Можешь проверить.

Проверил, действительно. Но ресурсы тут ни при чем, просто баг. Исправленную версию положил по сегодняшней ссылке.
Flasher wrote:
Только переменная должна быть массивом, чтобы вытаскивать нужное по индексу.

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

#1027:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 17:20
    —
Loopback wrote:
Проверил, везде без...
Ладно, проверю дома ещё раз, почему так было.
Loopback wrote:
Исправленную версию положил по сегодняшней ссылке.
Не помогла. Исправление в порядке. Спасибо за WMI!
Loopback wrote:
все равно для получения значения придется делать функцию
Я тоже так подумал.

Last edited by Flasher on Thu Nov 07, 2013 18:44; edited 1 time in total

#1028:  Author: sa PostPosted: Thu Nov 07, 2013 17:57
    —
Loopback wrote:
Исправленную версию положил по сегодняшней ссылке.

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

#1029:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 18:07
    —
sa
А Win32_Processor дважды был задействован?

#1030:  Author: sa PostPosted: Thu Nov 07, 2013 18:12
    —
Flasher
Да! Manufacturer и Family. Вторую переменную пишет с некоторой паузой.

#1031:  Author: FlasherLocation: Москва PostPosted: Thu Nov 07, 2013 18:43
    —
Пардон. Всё в порядке. Файл брал из прежнего архива (переименовал новый, а обычно старый переименовываю, сбился).

#1032:  Author: LonerDLocation: Макеевка PostPosted: Fri Nov 08, 2013 16:18
    —
Loopback
А что насчёт отключения выполнения autorun.cfg при поиске в отдельном процессе?

#1033:  Author: Loopback PostPosted: Fri Nov 08, 2013 17:16
    —
LonerD wrote:
А что насчёт отключения выполнения autorun.cfg при поиске в отдельном процессе?

В текущей версии плагина process (еще не выложенной) сделана переменная PROCESS_COMMANDLINE, содержащая путь запуска TC. Можно будет проверить наличие /S= и выходить при наличии.

#1034:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 05, 2015 12:21
    —
Задумался сейчас: а оператора отрицания нет? Как выполнить действие, если процесса не существует? Только через ветку Else с пустой веткой Then?

#1035:  Author: FlasherLocation: Москва PostPosted: Thu Mar 05, 2015 18:24
    —
Есть: <>. В справке же всё написано.

А у меня старый вопрос.
%AUTORUN_OSARCH% поменяли на %SYSINFO_OSARCH%? Забыл...

#1036:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 05, 2015 19:05
    —
Flasher
В документации эта замена впервые обнаруживается в 1.6 beta 14.

#1037:  Author: FlasherLocation: Москва PostPosted: Thu Mar 05, 2015 19:08
    —
Avada
В beta 12.
history_ru.txt wrote:
1.6 beta 12
+ добавлен API для С++
* системная информация перенесена в плагин Sysinfo

Хотя я, помнится, был против переноса.

#1038:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 05, 2015 19:31
    —
Flasher
Искомая переменная в ридми для beta 12 и beta 13 фигурирует ещё как %AUTORUN_OSARCH%. Второй вопрос, правильно это было описано или нет.

#1039:  Author: FlasherLocation: Москва PostPosted: Thu Mar 05, 2015 19:45
    —
Avada
Где она там фигурирует? У тебя какой-то свой ридми, похоже. Smile

MVV wrote:
Как выполнить действие, если процесса не существует?
А тут и не нужен оператор отрицания. Тут всё по старинке:
Code:
ProcessExist NOTE 'notepad.exe'
If %NOTE% = 0 Then
  ShellExec /W:1 /T "notepad.exe"
EndIf

#1040:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 05, 2015 19:58
    —
Flasher wrote:
Есть: <>. В справке же всё написано.

Это не отрицание, это оператор неравенства.

А как сделать отрицание, не пойму. Есть блок:
Code:
If ProcessExist /F "%COMMANDER_PATH%\Addons\AskParam\AskParam.exe" Then
   'сообщение об ошибке'
Endif

Надо инвертировать условие, чтобы блок выполнялся, когда процесс не запущен. Заводить переменную для результата ProcessExist не хочу, хочу прямо в условии. Пробовал, не работают:
Code:
If ProcessExist /F "%COMMANDER_PATH%\Addons\AskParam\AskParam.exe" = 0 Then
Code:
If ProcessExist /F "%COMMANDER_PATH%\Addons\AskParam\AskParam.exe" <> True Then
Code:
If ProcessExist /F "%COMMANDER_PATH%\Addons\AskParam\AskParam.exe" = False Then
Code:
If (ProcessExist /F "%COMMANDER_PATH%\Addons\AskParam\AskParam.exe") = False Then


Last edited by MVV on Thu Mar 05, 2015 20:02; edited 2 times in total

#1041:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 05, 2015 20:01
    —
Flasher
Своих ридми мне тут не надо, авторских достаточно. У меня сохранены беты Autorun 1.6 в полной комплектации. Все архивы включают ридми. В бетах 1-13 — в текстовом виде, далее — как CHM. Искомая информация фигурирует в разделе про Sysinfo. "Плагин экспортирует константы" и так далее. Замена с AUTORUN на SYSINFO была сделана в CHM во всех прежних константах дочернего плагина, плюс кое-что нового добавилось.

#1042:  Author: FlasherLocation: Москва PostPosted: Thu Mar 05, 2015 20:07
    —
MVV wrote:
Заводить переменную для результата ProcessExist не хочу, хочу прямо в условии.
Я тоже много чего хотел (например, писать выражение на одной строке без EndIf), но автору всё это невдомёк.

Avada wrote:
Все архивы включают ридми. В бетах 1-13 — в текстовом виде, далее — как CHM. Искомая информация фигурирует в разделе про Sysinfo.
К чему тут SysInfo, если мы про "фигурирует ещё как %AUTORUN_OSARCH%"?

#1043:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 05, 2015 20:23
    —
Flasher
SysInfo тут к тому, что переменная %AUTORUN_OSARCH% в ридми для беты 12 и 13 фигурирует именно в разделе про SysInfo и больше нигде. А начиная с беты 14 она заменена на %SYSINFO_OSARCH%. Что, собственно, может легко увидеть любой, у кого есть эти архивы.

#1044:  Author: FlasherLocation: Москва PostPosted: Thu Mar 05, 2015 20:36
    —
Avada
Теперь ясно. А то я именно в истории искал. Т.е. автор зачем-то поменял уже используемые пользователями во всю переменные, но даже предупредить об этом забыл. Confused

#1045:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 05, 2015 21:33
    —
Flasher
Это отсутствие предупреждения меня тоже крайне удивило, и я даже предположил, что фактически изменения могли быть внесены не в бету 14, а в предыдущую, где осталась неисправленной документация. Впрочем, проверять это не стал. Wink

#1046:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Mar 05, 2015 22:10
    —
А я спрашивал автора, почему имя поменялось, ещё когда был Readme. Very Happy

Flasher wrote:
Я тоже много чего хотел (например, писать выражение на одной строке без EndIf), но автору всё это невдомёк.

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

#1047:  Author: FlasherLocation: Москва PostPosted: Thu Mar 05, 2015 22:25
    —
Про старый усикатный синтаксис умолчим... Но твой нужник писать на одной строке с Nоt по важности ничем не превосходит мою хотелку (да и не одна она была в таком ключе).

#1048:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Mar 06, 2015 09:28
    —
Насчёт замены имён переменных — необходимое уточнение. После нашего обмена мнениями вспомнил, что у меня в конфиге Autorun по-прежнему прописана и нормально работает переменная %AUTORUN_TCARCH%, а вызов Autorun_Sysinfo.dll закомментирован. После чего в CHM-справке (Общая информация — Syntax — Переменные) обнаружилась %AUTORUN_TCARCH% в целости и сохранности. Так что тут не замена, а дополнение, исходная переменная сейчас цела и работает.

#1049:  Author: FlasherLocation: Москва PostPosted: Fri Mar 06, 2015 15:29
    —
Avada
%AUTORUN_TCARCH% в отличии от %AUTORUN_OSARCH%, о которой шла речь, является внутренней, а не системной переменной, поэтому тут как раз таки всё понятно.

#1050:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Mar 06, 2015 16:32
    —
Flasher
Спасибо, ясно.

#1051:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Mar 15, 2015 21:00
    —
Как бы понять, в чем проблема: первое значение считывается правильно, а второе не считывается.
Quote:
IniRead ButtonbarIni %COMMANDER_INI% Buttonbar RedirectSection
IniRead Buttonbar %ButtonbarIni% Buttonbar Buttonbar ERROR_READING_VALUE_BLAH_BLAH_BLAH

Значение первой переменной равно %COMMANDER_PATH%\wcx_user.ini. Плагин не умеет раскрывать вложенные переменные?

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

Также бросилось в глаза название заголовка в справке Строчные. Правильнее Строковые.

#1052:  Author: LonerDLocation: Макеевка PostPosted: Mon Jun 29, 2015 22:23
    —
Что за зверь Autorun_Weird.dll и как им пользоваться?

#1053:  Author: FlasherLocation: Москва PostPosted: Mon Jun 29, 2015 23:44
    —
Не входит в дистрибутив, я запрашивал. Путь с подпапкой плагина с неким именем NAME будет возвращаться из переменной %NAME%.

Скачать - скачал, а поинтересоваться для чего оно забыл Question

All: Кстати, раз уж подняли, кто ещё не в курсе, EndIf для одиночных строк в конфиге вообще не нужен.

#1054:  Author: LonerDLocation: Макеевка PostPosted: Tue Jun 30, 2015 02:11
    —
Flasher wrote:
Путь с подпапкой плагина с неким именем NAME будет возвращаться из переменной %NAME%.

А некое имя плагина откуда берётся - из имени файла?
%Autorun.wdx% , %Multiarc.wcx% будут возвращать пути к каталогу с этим плагином?

Flasher wrote:
Скачать - скачал, а поинтересоваться для чего оно забыл Question

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

Loopback wrote:
LonerD wrote:
А что насчёт отключения выполнения autorun.cfg при поиске в отдельном процессе?

В текущей версии плагина process (еще не выложенной) сделана переменная PROCESS_COMMANDLINE, содержащая путь запуска TC. Можно будет проверить наличие /S= и выходить при наличии.

Это так и не было реализовано?
Кто каким образом отключает повторную отработку содержимого autorun.cfg при запуске к примеру поиска или сравнения в отдельном процессе?

#1055:  Author: FlasherLocation: Москва PostPosted: Tue Jun 30, 2015 02:20
    —
LonerD wrote:
А некое имя плагина
Не плагина, а подпапки.
LonerD wrote:
Так я его только неделю обнаружил на сервере и скачал
Ну, так и нашёл бы обсуждение по имени архива.

LonerD wrote:
Это так и не было реализовано?
Если написано "в текущей", значит, было. А в том, что не выложено, можно убедиться самостоятельно.

#1056:  Author: LonerDLocation: Макеевка PostPosted: Tue Jun 30, 2015 02:39
    —
Flasher wrote:
Ну, так и нашёл бы обсуждение по имени архива.

Увы, найти по имени - под силу лишь гуру поиска. Гугл по имени архива даёт только ссылку на сервер, на форуме вообще ничего не находится.
Имя архива - Autorun_weird_paths.zip. Гугл выдаёт только ссылку на сервер, где и выложен этот архив. А поиск по форуму не даёт вообще ничего. По имени файла Autorun_Weird.dll тоже поиски были бессильны.

#1057:  Author: FlasherLocation: Москва PostPosted: Tue Jun 30, 2015 13:57
    —
Ладно, это всё мелочи.
Касаемо того, что можно было бы сделать. Я раньше проверял такую вещь. Писал в начале
Code:
LoadLibrary Plugins\Autorun_Sysinfo.dll
GetWMIValue CL 'CommandLine' 'SELECT CommandLine FROM Win32_Process WHERE Handle=%AUTORUN_TCPID%'
StrPos InStr '%CL%' /S=
If %InStr% > 0 Then
  LoadLibrary /U Plugins\Autorun_Sysinfo.dll
Else
 <остальное содержимое>
EndIf
, но подстановка переменной с PID не срабатывает в отличии от прямого указания. Т.е. и тут без автора не обойтись.
Поэтому пришлось вместо первых двух строк по старинке использовать:
Code:
LoadLibrary Plugins\Autorun_Process.dll
ProcessExecGetOutput CL 'wmic process WHERE Handle=%AUTORUN_TCPID% Get CommandLine /value'
+ плагин в 5-й строке. Но толку от этого не прибавилось, т.к. обработчик ифов какой-то кривенький, только с одиночными строками работает. А выхода из всего кода автор не предусмотрел (только обещал). Понятно, что можно перед каждой строкой условие прописать, но то уже будет какой-то ахтунг.

#1058:  Author: LonerDLocation: Макеевка PostPosted: Wed Jul 01, 2015 22:35
    —
Жаль... Автор появился полгода назад и снова пропал...

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

#1059:  Author: FlasherLocation: Москва PostPosted: Thu Jul 02, 2015 04:48
    —
Не использую. Напомни, что это?
Да, это через ProcessCount легко решается.

#1060:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Jul 02, 2015 16:47
    —
LonerD,
Что-то не пойму, как AskExit может загрузиться в один процесс дважды - если, конечно, это не две DLL из разных мест. Сама винда не дает одной физической библиотеке загрузиться в процесс дважды.

#1061:  Author: FlasherLocation: Москва PostPosted: Thu Jul 02, 2015 17:23
    —
MVV wrote:
в один процесс
Почему в один, если написано "двух копий"?

#1062:  Author: LonerDLocation: Макеевка PostPosted: Thu Jul 02, 2015 17:34
    —
MVV wrote:
LonerD,
Что-то не пойму, как AskExit может загрузиться в один процесс дважды - если, конечно, это не две DLL из разных мест. Сама винда не дает одной физической библиотеке загрузиться в процесс дважды.

Нюансов работы не знаю.
Просто наблюдаю следующую ситуацию, которая на мой взгляд не является удобной и логичной:
Если запустить две и более копии Тотала из одного и того же каталога (или же запустить в явном виде одну копию Тотала и из неё поиск и/или сравнение в фоновом процессе) - то при закрытии Тотала зачастую дважды выскакивает диалог "Вы действительно хотите закрыть программу? Yes-No-Cansel" (кнопка Cansel, кстати, излишняя, хотя она и не мешает).
Уже писал про это. Если можешь исправить поведение самого плагина AskExit - то так будет даже удобней.


Last edited by LonerD on Thu Jul 02, 2015 19:15; edited 1 time in total

#1063:  Author: FlasherLocation: Москва PostPosted: Thu Jul 02, 2015 17:55
    —
Ага, теперь вспомнил, что это. Не, мне такое даром не надо. Я наоборот от промежуточных окон в большинстве случаев стараюсь избавиться.

#1064:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Jul 02, 2015 18:58
    —
LonerD,
Ответил в теме.

Блин, где вы берете wincmd.ru/forum, когда основной адрес форума forum.wincmd.ru. Требует авторизации. Very Happy

#1065:  Author: KopBuHLocation: Tashkent, Uzbekistan PostPosted: Sat Aug 01, 2015 09:32
    —
Пожалуйста, добавьте определение версии ОС для Windows 10
а то сейчас определяется как WIN_8
а хотелось бы чтобы корректно - WIN_10

#1066:  Author: FlasherLocation: Москва PostPosted: Thu Jan 07, 2016 17:24
    —
7 августа 2015 г. автор втихаря обновил плагин:
Quote:
2.0.2
+ добавлена переменная AUTORUN_TCCMDLINE, содержащая путь командной строки Total Commander
+ добавлена поддержка определения Windows 8.1 и Windows 10 в плагин Sysinfo
* документирована команда Exit
Видимо, ему совсем не до разговоров.

LonerD
С учётом добавок теперь всё по логике должно было бы ограничиться начальной записью:
Code:
StrPos InStr '%AUTORUN_TCCMDLINE%' /S=
If %InStr% > 0 Then
Exit
но Exit никак на If и на замыкающий EndIf не реагирует, а просто выгружает плагин и всё.
И вопрос с многострочниками внутри If-ов также остаётся открытым.

Кстати говоря, и обновление Sysinfo очень странное. Команда GetWMIValue почему-то не включена. Confused

#1067:  Author: Skif_off PostPosted: Sat Jan 09, 2016 22:23
    —
Quote:
+ добавлена переменная AUTORUN_TCCMDLINE, содержащая путь командной строки Total Commander

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

Кто-нибудь проверял, что используется - напрямую WinAPI или WMI?

#1068:  Author: BeTePLocation: Санкт-Петербург PostPosted: Fri Jun 17, 2016 20:58
    —
Здравствуйте.

Из плагина Autorun меня пока интересует только функционал MoveButton.
Установил плагин Autorun 2.0.2, настроил как описано в справке к плагину. В результате получил вот такой вид диалога копирования/перемещения.

Кнопка "Опции" переместилась, но остальные кнопки пропали.

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

P.S. Плагин устанавливаю на чистый Total Commander 8.52а (32 bit); Windows 7 (64 bit).

#1069:  Author: FlasherLocation: Москва PostPosted: Fri Jun 17, 2016 21:55
    —
BeTeP
FixWindows надо бы отключить или обновить.

#1070:  Author: BeTePLocation: Санкт-Петербург PostPosted: Fri Jun 17, 2016 22:05
    —
Flasher
FixWindows я не устанавливал.

#1071:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Jun 17, 2016 22:14
    —
MoveButton тоже иногда требует обновления, если содержимое диалога меняется, а в 9-ке это случилось.

#1072:  Author: BeTePLocation: Санкт-Петербург PostPosted: Fri Jun 17, 2016 22:18
    —
MVV
9-ку я пока не тестировал. Пробую установить на 8.52а.

#1073:  Author: FlasherLocation: Москва PostPosted: Fri Jun 17, 2016 22:24
    —
BeTeP
У меня кнопки слетели после подключения старого FixWindows. MoveButton тот же (т.е. из последнего Autorun 2.0.2).

#1074:  Author: BeTePLocation: Санкт-Петербург PostPosted: Fri Jun 17, 2016 23:37
    —
Flasher
Как я уже писал выше, FixWindows я не устанавливал.
Перепробовал несколько версий Autorun, начиная с 1.4.1 и заканчивая 2.0.2 - результат везде практически одинаковый.
Видимо с Тоталом 8.52а MoveButton не дружит. Или я чего-то не так делаю.

#1075:  Author: FlasherLocation: Москва PostPosted: Sat Jun 18, 2016 00:57
    —
BeTeP
MoveButton на TCx32 8.52а прекрасно работал и работает. По крайней мере на Win7x32. Что там за конфликт ещё может быть, не подскажу.

#1076:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jun 18, 2016 17:51
    —
Flasher wrote:
Что там за конфликт ещё может быть, не подскажу.

Вот и я уже всю голову сломал.

В общем я поэкспериментировал немного.
1. ТСх32 8.01 + Autorun 2.0.2 - функционал MoveButton нормально работает.
2. ТСх32 8.01 + MoveButton v1.4 - MoveButton нормально работает.
3. Версии ТСх32 8.50-8.51a-8.52a + Autorun 2.0.2 - получаю вот такой вид диалога копирования/перемещения


4. Версии ТСх32 8.50-8.51a-8.52a + MoveButton v1.4 - получаю вот такой вид диалога копирования/перемещения


Эксперименты проводил на трех компах (Win7 64 bit), результат везде одинаковый. Мистика какая-то.

#1077:  Author: FlasherLocation: Москва PostPosted: Sat Jun 18, 2016 18:06
    —
BeTeP
Если все компы имеют одну систему, то где ж тут мистика, если это закономерность?
Есть ещё мысль о второй установке MoveButton в качестве отдельного плагина. С этом всё нормально?

А вообще для проверки нужно запустить ТС с таким
 wincmd_test.ini
и
autorun.cfg wrote:
LoadLibrary Plugins\Autorun_MoveButton.dll
MoveOptionsButton MOVE_LEGACY


Last edited by Flasher on Sat Jun 18, 2016 20:07; edited 2 times in total

#1078:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jun 18, 2016 19:34
    —
Запустил ТС с вашими конфигами, получил вот такой результат:

#1079:  Author: StaniclawLocation: Ташкент PostPosted: Sat Jun 18, 2016 19:39
    —
Flasher
BeTeP
Надо ещё в секцию [Searches] добавить вызов самого плагина:
Code:
 Autorun_plugin=autorun.Autorun = 1

#1080:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jun 18, 2016 19:45
    —
Staniclaw
Добавил строчку вызова плагина. Результат тот же, что и на скрине выше.

#1081:  Author: FlasherLocation: Москва PostPosted: Sat Jun 18, 2016 20:11
    —
BeTeP
Я там выше дополнил оба файла. В общем, труба дело. Я сам с FixWindows cпутал. В 9-ке кнопки остаются на месте кроме "Опции", вместо которой пустое место. Автор давно и надолго пропал, поэтому остаётся только FixWindows.

#1082:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jun 18, 2016 20:18
    —
Flasher
Я запустил ТС с тем конфигом, который вы подправили. В результате получил тоже, что и здесь на верхнем скрине.
Кнопка "Опции" переместилась, а остальные кнопки пропали. Видимо придется ждать автора плагина.

#1083:  Author: FlasherLocation: Москва PostPosted: Sat Jun 18, 2016 20:20
    —
BeTeP
И сколько лет ждать, когда есть нормальная замена?

#1084:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jun 18, 2016 20:25
    —
Flasher
Спасибо. Попробую FixWindows.

#1085:  Author: StaniclawLocation: Ташкент PostPosted: Sat Jun 18, 2016 20:34
    —
Flasher wrote:
поэтому остаётся только FixWindows.
FixWindows в девятке тоже не очень работает...

Last edited by Staniclaw on Sat Jun 18, 2016 21:25; edited 1 time in total

#1086:  Author: FlasherLocation: Москва PostPosted: Sat Jun 18, 2016 20:37
    —
Staniclaw
Это сообщение 10-го июня, а обновления было 17-го.

#1087:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jun 18, 2016 20:46
    —
Flasher
Поставил FixWindows, все отлично работает. Спасибо.

#1088:  Author: Zaytsev ArtemLocation: Saint-Petersburg PostPosted: Sun Oct 16, 2016 19:51
    —
Всем привет!
То ли я туплю, то ли лыжи не по сезону.
Команды cm_LoadSelectionFromClip, cm_SelectAll, cm_PackFiles вообще можно вызвать при запуске хоть как-нибудь?
Прописываю в cfg
Code:
SendCommand cm_SelectAll
SendCommand cm_PackFiles
В результате ни файлы не выделяются, ни диалог не появляется.

Вообще цель — запускать 32-хбитные плагины-паковщики из-под 64-хбитной версии TC. С 32-хбитными lister плагинами, например, можно использовать запуск TC с параметром /S=L %Z %P%N, а под паковщики такой фишки нету. ಥ_ಥ

Пробовал также TWinKey, там такая же петрушка.
Может пауза / дополнительная команда перед строками нужна? Заметил забавную особенность в TWinKey: вызов всё-таки срабатывает после запуска и закрытия отдельной программы TwinkUtil.exe, причём только при выходе по "Ok".

Кстати, нигде не нашёл информации, правильно ли я понимаю, что cm_SaveSelection / cm_RestoreSelection работает только в памяти одного процесса TC (т. е. таким макаром нельзя передать выделение от одного экземпляра TC к другому)? Везде написано, что эта команда сохраняет выделение временно, но куда сохраняет, не написано.

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

Да, с паузой sleep 500 заработало, но можно ли что-то запилить кроме паузы? Я так понимаю, что нет гарантий, что такой паузы будет достаточно.

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

А как вызвать cm_Exit по окончании упаковки?

#1089:  Author: FlasherLocation: Москва PostPosted: Sun Oct 16, 2016 20:35
    —
Zaytsev Artem
Вызывать ТС только для того, чтобы один раз упаковать файлы? ShockedShockedShocked По-моему, тут одной 7zG вполне достаточно.

#1090:  Author: Zaytsev ArtemLocation: Saint-Petersburg PostPosted: Sun Oct 16, 2016 20:47
    —
Мой вопрос был не в том, нужно ли мне вызывать. Есть старенький плагин (только x32) который реализовывает функционал, который нигде больше не реализован. Скорее всего это никому не нужно, кроме меня, но не в этом суть.

#1091:  Author: MVVLocation: Ростов-Дон PostPosted: Sun Oct 16, 2016 20:57
    —
Взаимодействие с интерфейсом в момент загрузки плагина, особенно не зная, в какой момент он загружается, и готов ли тотал в тот момент обрабатывать действия пользователя... ненадёжная затея. Не проще ли использовать прокси-плагин (например, мой Wcx6432)? А если уж совсем хочется костылить, можно взять TCFS2, откуда можно посылать команды более гибко, в том числе асинхронно, чтобы не надо было дожидаться окончания выполнения каждой команды (команда cm_PackFiles не возвращает управление, пока не закроешь диалог, если посылать её через SendMessage).

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

#1092:  Author: Zaytsev ArtemLocation: Saint-Petersburg PostPosted: Sun Oct 16, 2016 21:01
    —
MVV wrote:
Wcx6432 позволяет использовать 32-битные WCX-плагины в 64-битном ТК.
О, так я это и искал (плохо искал). Спасибо!

#1093:  Author: HA3APET PostPosted: Wed Nov 30, 2016 14:17
    —
Можно ли создать переменную IP адреса, в зависимости от того пингуется он или нет?
Те если адрес доступен, добавляем его в переменную, если нет, то добавляем другой (запасной).

#1094:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Nov 30, 2016 16:11
    —
HA3APET,
Поэкспериментируй с ProcessExecGetOutput: запускаешь ping.exe, обрабатываешь вывод, ставишь ту или иную переменную.

#1095:  Author: HA3APET PostPosted: Thu Dec 01, 2016 12:44
    —
MVV
Не могу осилить, не хватает понимания, как сделать обработку вывода

Code:
ProcessExecGetOutput PING ping.exe '-n 1 адрес1'
If %PING% ....


Батник такой:
Code:
@echo off
ping -n 1 адрес1 | find /i "TTL=">nul
if %errorlevel%==0 (
Set IP=адрес1
) else (
Set IP=адрес2
)

#1096:  Author: FlasherLocation: Москва PostPosted: Thu Dec 01, 2016 15:52
    —
HA3APET wrote:
Не могу осилить

Code:
ProcessExecGetOutput PING 'cmd /c ping ya.ru -n 1|find /c "TTL"'
If %PING% = 1 Then

#1097:  Author: HA3APET PostPosted: Sat Dec 03, 2016 22:40
    —
Спасибо, работает. А можно вариант без CMD?
А то с UNC путями проблемы.

#1098:  Author: FlasherLocation: Москва PostPosted: Sun Dec 04, 2016 00:58
    —
Code:
ProcessExecGetOutput CMD 'ping ya.ru -n 1'
StrPos CMD '%CMD%' TTL
If %CMD% > 0 Then
  SetEnv IP 213.180.204.3
Else
  SetEnv IP 217.69.139.200

#1099:  Author: Kiril__777 PostPosted: Thu Dec 14, 2017 18:24
    —
Подскажите пожалуйста. Есть Win 10 х64 и ТС 8.52а
Как задать переменную равную разрядности ОС?
раскомментировал это
Code:
# LoadLibrary Plugins\Autorun_Process.dll
# ProcessExecGetOutput OSVER %COMSPEC% '/c ver'
# SetEnv /EV COMMANDER_OSVER "%OSVER%"

но переменная %OSVER% не задалась.
Тогда прописал это
Code:
LoadLibrary Plugins\Autorun_Sysinfo.dll
SetEnv /EV OSVER %SYSINFO_OSARCH%

Но опять переменная %SYSINFO_OSARCH% не стала равняться разрядности ОС. НУ по крайней мере в help_ru.chm не понятно написано как это сделать.

Как все таки мне это сделать?
Спасибо Smile


Получилось так Very Happy Very Happy Very Happy

Quote:
LoadLibrary Plugins\Autorun_Sysinfo.dll
SetEnv /EV SYSINFO_OSARCH %SYSINFO_OSARCH%

#1100:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Dec 14, 2017 19:27
    —
Kiril__777
Версия системы и её битность — это вообще-то не одно и то же, правда? Впрочем, кажется, всё уже ясно.

#1101:  Author: MVVLocation: Ростов-Дон PostPosted: Thu Dec 14, 2017 23:02
    —
Я у себя такое использую, тут можно любое число переменных объявлять в зависимости от разрядности ОС:
Code:
If %SYSINFO_OSARCH% = 64 Then
   SetEnv IS64 64.
   SetEnv X64 X64.
Else
   SetEnv IS64 .
   SetEnv X64 .
EndIf

#1102:  Author: Iori PostPosted: Sun Jan 14, 2018 01:50
    —
У меня в autorun.cfg прописано такое.
Code:

SetEnv 3264dir %SYSINFO_OSARCH%

If %SYSINFO_OSARCH% = 64 Then
  SetEnv 3264file %SYSINFO_OSARCH%
Else
  SetEnv 3264file

If %SYSINFO_OSARCH% = 64 Then
  SetEnv 64dir %SYSINFO_OSARCH%\
Else
  SetEnv 64dir

Но всё ровно, это как то не универсально. Слишком много переменных.
Притом, есть случаи когда встречаются папки х32 и х64. Или х86 и х64.
Нельзя ли это привести более к универсальному методу, используя одну или две переменных.

#1103:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 02:08
    —
Iori
Что понимается под универсальностью?
Если у тебя в части наличия папок и окончаний имён в разных случаях разные условия, то логично, что в каждом случае нужно использовать подходящие переменные. А если во всех случаях указана битность, то достаточно и первой строки.

#1104:  Author: Iori PostPosted: Sun Jan 14, 2018 02:27
    —
Flasher wrote:
Что понимается под универсальностью?

Имеется ввиду, одна или две переменные на все случаи. Чем меньше переменных, тем лучше.

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

Так в том то и дело, что не везде указана битность.
Например в одной папке workshop.ехе и workshopХ64.ехе.
В другой папке, Tracer\x86\tracer.exe и Tracer\x64\tracer.exe
Менять название папок и файлов дело не всегда хорошее.

#1105:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 03:59
    —
Iori
Переменная среды не в состоянии предугадать разные условия. Тут не может быть автоматизации по определению. Подставляется ровно то, что задано. Это же не скрипт, который я приводил. Тут либо несколько переменных либо переименование. А что касается x32/x64, то заведомо написать 'x' в базовое имя — не проблема.

#1106:  Author: Iori PostPosted: Sun Jan 14, 2018 04:28
    —
Flasher
Я тебя понимаю.
Существует ли решение с переменой, если у файла не указан 32 или 64 в имени файла? С папками это ладно. Но некоторые программы не будут работать, если изменять имя файла.
Скажем file.exe и file64.exe
Если нет, то далее самый подходящий вариант.
Code:

If %SYSINFO_OSARCH% = 32 Then
  SetEnv /EV 7zip %COMMANDER_PATH%\Packers\file.exe
Else
  SetEnv /EV 7zip %COMMANDER_PATH%\Packers\64\file64.exe
EndIf

#1107:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 04:35
    —
Iori
Так а чем тебе %3264file% не решение?
P.S.: Название для переменной, конечно, своеобразное.

#1108:  Author: Iori PostPosted: Sun Jan 14, 2018 05:12
    —
Flasher wrote:
Так а чем тебе %3264file% не решение?

А как мне это в путь приписать? Уму не приложу.
Так что-ли?
%COMMANDER_PATH%\Packers\%64dir%\file%3264file%.exe
Что делать когда папка одна, и в ней file.exe и file64.exe или file86.exe и file64.exe

Quote:
P.S.: Название для переменной, конечно, своеобразное.

От OSARCH, OSARCH2, OSARCH3 и так далее, мне не станет легче.
Надо, чтобы переменная несла смысл.

#1109:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 05:19
    —
Iori wrote:
Так что-ли?
Ну, ты с логикой дружишь? Если папка одна, зачем тебе %64dir%\ в пути? Я вроде под спойлером понятно написал.
Iori wrote:
или file86.exe и file64.exe
Для этого случая потребуется ещё одна переменная.
Code:
If %SYSINFO_OSARCH% = 64 Then
  SetEnv ArchOS 64
Else
  SetEnv ArchOS 86

Iori wrote:
Надо, чтобы переменная несла смысл.
OSARCH и несёт целевой смысл. А вот 3264 нет, т. к. в одном случае этого нет. И file подразумевает разрядность файла, а не оси.
Не нравится нумерация, есть другие варианты: ARCH, ArchOS.

#1110:  Author: Iori PostPosted: Sun Jan 14, 2018 05:44
    —
Flasher wrote:
Ну, ты с логикой дружишь?

Зависит от задачи. Smile

Flasher wrote:
Если папка одна, зачем тебе %64dir%\ в пути?

Пример был для:
\Packers\file.exe
\Packers\64\file64.exe
Как ты видишь, папка не общая.

Iori wrote:
Что делать когда папка одна, и в ней file.exe и file64.exe или file86.exe и file64.exe

А это, уже другой вопрос был.

#1111:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 05:49
    —
Iori wrote:
\Packers\64\file64.exe
Не встречал подобного извращения (уж точно не у 7zip — в его имени нет 64). Тогда в твоём случае бэкслеш после %64dir% лишний.
Iori wrote:
А это, уже другой вопрос был.
На который я ответил.

#1112:  Author: Iori PostPosted: Sun Jan 14, 2018 06:06
    —
Flasher wrote:
Не встречал подобного извращения (уж точно не у 7zip).

Конечно не у 7зипа. Но бывает встречаешь такое дело.
Я так понимаю что
Code:
SetEnv 3264dir %SYSINFO_OSARCH%
лишнее, раз есть
Code:
If %SYSINFO_OSARCH% = 64 Then
  SetEnv 3264file %SYSINFO_OSARCH%
Else
  SetEnv 3264file

#1113:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 06:08
    —
Iori
Ошибаешься. В первом случае подставляется 32, во втором нет. Сам же различаешь их по dir и file.

#1114:  Author: Iori PostPosted: Sun Jan 14, 2018 06:24
    —
Flasher
Не совсем понимаю.
В первом случаи, переменная %3264dir% даст нам либо 32 либо 64, в зависимости от разряда ОС.
Разве нельзя использовать %3264dir% в имени файла?
file_x%3264dir%.exe
Во втором примере, вроде тоже самое.

#1115:  Author: FlasherLocation: Москва PostPosted: Sun Jan 14, 2018 06:31
    —
Iori wrote:
Разве нельзя использовать %3264dir% в имени файла?
Да пользуйся. Кто ж тебе мешает?
Iori wrote:
Во втором примере, вроде тоже самое.
Совсем не то же самое. Я же только что написал, что не возвращается 32. Мы же разбирали вариант с program.exe и program64.exe. И всё никак не въедешь? Smile

Last edited by Flasher on Sun Jan 14, 2018 23:33; edited 1 time in total

#1116:  Author: Iori PostPosted: Sun Jan 14, 2018 06:43
    —
Flasher wrote:
Мы же разбирали вариант с program.exe и program64.exe. И всё никак не въедешь?

Аааа. Embarassed Всё. Понял. Very Happy
Спасибо.

#1117:  Author: Iori PostPosted: Sun May 13, 2018 20:53
    —
Есть программа PrKiller которую я хочу поставить в autorun.
Так что-бы загружалась вместе с ТС, и завершалась при выходе из ТС.

В папке два файла: PrKiller.exe и PrKiller64.exe
В кнопке путь:
Code:
*"%COMMANDER_PATH%\Utilities\PrKiller\PrKiller%64bit%.exe"


В autorun.cfg прописал:
Code:
ShellExec '%COMMANDER_PATH%\Utilities\PrKiller\PrKiller%64bit%.exe'


В секции Pragma AutorunFinalizeSection прописал:
Code:
ShellExec /SW_HIDE 'Taskkill /IM PrKiller*.exe /F'


Не знаю почему, но PrKiller не запускается с ТС. И не завершается с выходом из ТС, если раньше был запущен.

#1118:  Author: FlasherLocation: Москва PostPosted: Sun May 13, 2018 21:23
    —
Iori wrote:
В autorun.cfg прописал:
А переменная 64bit выше создана?
Iori wrote:
В секции Pragma AutorunFinalizeSection прописал:
Для этого есть команда ProcessTerminate:
Code:
LoadLibrary Plugins\Autorun_Process.dll
#....
ProcessTerminate /W:3000 /TT /A PrKiller.exe PrKiller64.exe

#1119:  Author: Iori PostPosted: Sun May 13, 2018 21:37
    —
Flasher
Привет Smile

Flasher wrote:
А переменная 64bit выше создана

Да. Прописана так:
Code:
If %SYSINFO_OSARCH% = 64 Then
  SetEnv 64bit %SYSINFO_OSARCH%
Else
  SetEnv 64bit


Flasher wrote:
Для этого есть команда ProcessTerminate:

Не выходит. PrKiller процесс не завершается.

Если интересно, то PrKiller можно скачать здесь

#1120:  Author: FlasherLocation: Москва PostPosted: Sun May 13, 2018 22:29
    —
Iori
Привет. С закрытием проблем не вижу. Всё работает. См. наличие плагина Autorun_Process.dll в 2-х экземплярах. А с запуском что-то непонятное. Как будто переменная, стоящая не спереди пути, игнорируется. Придётся так:
Code:
If %SYSINFO_OSARCH% = 32 Then
  ShellExec /T '%COMMANDER_PATH%\Utilities\PrKiller\PrKiller.exe'
Else
  ShellExec /T '%COMMANDER_PATH%\Utilities\PrKiller\PrKiller64.exe'

#1121:  Author: Iori PostPosted: Mon May 14, 2018 00:16
    —
Flasher
Плагин Autorun_Process.dll в 2-х экземплярах на месте.

Flasher wrote:
А с запуском что-то непонятное. Как будто переменная, стоящая не спереди пути, игнорируется.

Это баг плагина или уникальность программы?

Сейчас проверил на работе. Здесь Win 7 x64. Всё работает с твоей наводкой. Надо будет дома проверить опять. Там десятка. Может дело в правах. Когда вернусь, проверю.
Спасибо.

#1122:  Author: FlasherLocation: Москва PostPosted: Mon May 14, 2018 01:53
    —
Iori wrote:
Это баг плагина или уникальность программы?
Первое.

Пож-та.

#1123:  Author: Iori PostPosted: Tue May 15, 2018 05:57
    —
Flasher
Спасибо за помощь. Дома то-же теперь работает на десятке.

#1124:  Author: LonerDLocation: Макеевка PostPosted: Mon Jul 23, 2018 20:21
    —
Плагин инициализирует добавление переменных уже после того, как загрузятся системные плагины? Трюк с добавлением %MyEnvVar% в Autorun и последующем запуске FileSystemPlugins никак не провернуть? (хотел сделать запуск в зависимости от версии ОС - у Гислера есть две версии плагина, новая под ХР не работает), наподобие такого:
Code:
[FileSystemPlugins]
SecureFTP XP=%commander_path%\Plugins\wfx\SFTPPlug%MyEnvVar%\Sftpplug.wfx

---------------

Не появилось ли чего-нибудь нового в плане того, чтобы плагин не отрабатывать повторно (не запускал команды и программы, прописанные в autorun.cfg), если уже был инициализирован? (например, в случае когда вызывается поиск в отдельном процессе)

#1125:  Author: FlasherLocation: Москва PostPosted: Mon Jul 23, 2018 21:28
    —
LonerD
В wincmd.ini [ContentPlugins] стоит выше [FileSystemPlugins]? В Autorun строка создания переменной в самом верху?

С остальным вроде понятно. Автор пропал и с тех пор не появлялся. За обновлениями можно было следить здесь. О перспективах их ожидания история умалчивает.

#1126:  Author: LonerDLocation: Макеевка PostPosted: Mon Jul 23, 2018 22:19
    —
Flasher wrote:
LonerD
В wincmd.ini [ContentPlugins] стоят выше [FileSystemPlugins]? В Autorun строка создания переменной в самом верху?

Нашёл причину. Указанное выше не обязательно.
На самом деле у меня переменная задавалась как пустая для ОС старше ХР
Code:
SetEnv /EV OSIS64 ""

и для ХР:
Code:
SetEnv /EV OSIS64 "XP"

Соответственно каталоги с плагином назывались SFTPPlug и SFTPPlugXP.
Переименовал переменную и каталог для не-ХР - и заработало.

Похоже, в TC 9.20 Гислер запретил использование пустых переменных Confused (Не найду такого в истории изменений... Баг? Или у меня локальная проблема?)
Раньше работала такая конструкция, теперь нет:
Code:
If %autorun_tcarch% = 64 Then
  SetEnv /EV TCIS64 "64"
Else
  SetEnv /EV TCIS64 ""
EndIf

#1127:  Author: FlasherLocation: Москва PostPosted: Mon Jul 23, 2018 22:24
    —
LonerD wrote:
у меня переменная задавалась как пустая
Вообще-то кавычки там лишние.

И нет, не баг, а ленивое молчание Гислера. Угадай, по чьей просьбе пост...

#1128:  Author: LonerDLocation: Макеевка PostPosted: Mon Jul 23, 2018 22:36
    —
Flasher wrote:
LonerD wrote:
у меня переменная задавалась как пустая
Вообще-то кавычки там лишние.

Да я вот сейчас смотрю зачем их добавлял... наверное так изначально начал писать, да и осталось. И /EV тоже лишнее, и кавычки.

Flasher wrote:
И нет, не баг, а ленивое молчание Гислера. Угадай, по чьей просьбе пост...

Жаль Sad Многое теперь придётся переделывать.
А как быть с процитированной "админской переменной" пока непонятно.

#1129:  Author: FlasherLocation: Москва PostPosted: Mon Jul 23, 2018 22:45
    —
LonerD wrote:
Жаль Sad Многое теперь придётся переделывать.
На Гислера число просьб влияет. Ты напиши, что очень надо.
LonerD wrote:
А как быть с процитированной "админской переменной" пока непонятно.
Поясни.

#1130:  Author: LonerDLocation: Макеевка PostPosted: Tue Jul 24, 2018 01:44
    —
Flasher wrote:
LonerD wrote:
А как быть с процитированной "админской переменной" пока непонятно.
Поясни.

Ты процитировал свой пост с кодом
Code:
StrMid OSVer %SYSINFO_OSVERSION% 5
If %OSVer% = 2000 Or %OSVer% = XP Or %OSVer% = 2003 Or %OSVer% = 2003R2 Then
  SetEnv ADM
Else
  SetEnv ADM *

Можно задать непустые имена переменных для битности (32 - 64) или версии ОС, и соответственно переименовать файлы и каталоги с программами. А вот переменную ADM теперь не получается универсально назначить, чтобы в ТС 9.20 работало без лишних диалогов под ХР и более новыми ОС.

Flasher wrote:
На Гислера число просьб влияет. Ты напиши, что очень надо.

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

#1131:  Author: FlasherLocation: Москва PostPosted: Tue Jul 24, 2018 15:21
    —
LonerD wrote:
Ты процитировал свой пост с кодом
А, вот о чём речь. А какое сейчас поведение на XP и т. д.?

LonerD wrote:
Написал. Но за два месяца не особо густо желающих.
Если что-то изменилось с прошлой версии, то имеет смысл писать в багрепорты со ссылкой на прежний топик. Там-то Гислер точно ответит. Хотя мы вроде бы проверяли на других версиях, результаты были аналогичные, ЕМНИП.

#1132:  Author: LonerDLocation: Макеевка PostPosted: Tue Jul 24, 2018 15:36
    —
Flasher wrote:
А, вот о чём речь. А какое сейчас поведение на XP и т. д.?

Я ею давно не пользовался (но хочется, чтоб и под ней работало). Надо виртуалку ставить, проверять... Скорее всего раз пустая переменная Тоталом не обрабатывается, то будет такая же ошибка, как и под более новыми Windowsами. А если без переменной просто со звёздочкой - раньше вызывался диалог выбора пользователя, от имени которого будет запускаться программа.
Пока в качестве решения придумалась "заглушка" для ХР, наподобие такой
Code:
SetEnv ADM "%commander_path%\hidcon.exe "

#1133:  Author: FlasherLocation: Москва PostPosted: Tue Jul 24, 2018 16:26
    —
А скрывать-то зачем? GUI никто не отменял. hidcon, кстати, проблемная. Лучше hide использовать.
Тут скорее вот это:
Code:
SetEnv ADM "rundll32.exe url.dll, FileProtocolHandler "
Кстати сказать, она у меня и в Sudo.lnk с админской птицей вместо *, чтобы неисполняемые файлы тоже запускать.

#1134:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Jul 24, 2018 17:44
    —
В качестве временного решения могу предложить использовать Exec.exe и Exec64.exe из комплекта Virtual Panel в качестве "пустого" значения переменной ADM - будет просто выполняться программа с переданными ей аргументами.

#1135:  Author: FlasherLocation: Москва PostPosted: Thu Jul 26, 2018 04:29
    —
LonerD wrote:
Вроде как втихую пофикшены пустые переменные окружения.

С чего ты взял?: msg "%username%" Тест:%Empty%

#1136:  Author: LonerDLocation: Макеевка PostPosted: Thu Jul 26, 2018 04:30
    —
Вроде как в 9.21 RC 1 пофикшены пустые переменные.

Обнаружил ещё, что в секции [FileSystemPlugins], равно как и в самом autorun.cfg (при запуске программ через ShellExec, к примеру) пустые переменные не работают (проверил - оказывается, и в 9.12 тоже не работали).

Вот такая конструкция не работает в autorun.cfg
Code:
ShellExec /W "%commander_path%\Program%EmptyEnv%.exe" "" ""

Хотя в дальнейшем в пользовательских командах EmptyEnv уже отратабывает как пустая.

То есть на этих стадиях запуска Тотал уже понимает непустые переменные, а пустые "учится" понимать уже позднее. Странная механика... хотя это уже мелкое неудобство, с которым можно жить.

#1137:  Author: FlasherLocation: Москва PostPosted: Thu Jul 26, 2018 04:43
    —
LonerD wrote:
Вроде как ...
Code:
SetEnv Empty
Результат.

LonerD wrote:
Вот такая конструкция не работает в autorun.cfg
Это обсуждалось на предыдущей странице.

Last edited by Flasher on Thu Jul 26, 2018 18:15; edited 1 time in total

#1138:  Author: Skif_off PostPosted: Thu Jul 26, 2018 17:50
    —
LonerD wrote:
Соответственно каталоги с плагином назывались SFTPPlug и SFTPPlugXP.

А зачем так делать? Там вроде вся разница - откуда вызывать ряд функций: из системы или libssh2.dll. Разве не достаточно SFTPPlugXP сразу для всех?

#1139:  Author: LonerDLocation: Макеевка PostPosted: Fri Jul 27, 2018 16:06
    —
В теме на форуме багов Гислер ответил быстро и много в стиле "это не работает потому что не работает потому что так не должно и вообще не может работать". Похоже, возвращать как було он не хочет.
Подключайтесь, может удастся переубедить.
Как вариант - предложил ему сделать экранирование символов для знака процента.
PS. Про ключ в wincmd.ini добавил.
PPS. Намекнул про совместимость (описка в языковом файле до сих пор остаётся потому как когда-то кто-то её мог случайно использовать, а тут внезапно выпиляна существенная фича, которая работала годами)

Skif_off wrote:
Разве не достаточно SFTPPlugXP сразу для всех?

Наверное, достаточно... но мало ли... задел на будущее. Возможно, в новой версии (которая требует ОС новее, чем ХР) будут появляться новые возможности. Или будут появляться другие плагины с раздельным функционалом.


Last edited by LonerD on Sun Jul 29, 2018 02:20; edited 2 times in total

#1140:  Author: FlasherLocation: Москва PostPosted: Fri Jul 27, 2018 16:18
    —
LonerD wrote:
Похоже, возвращать как було он не хочет.
Пока ещё не ответил в части "было".
LonerD wrote:
Как вариант - предложил ему сделать экранирование символов для знака процента.
Может, лучше ключ в wincmd.ini запросить?

#1141:  Author: FlasherLocation: Москва PostPosted: Mon Jul 30, 2018 17:57
    —
LonerD
Труды не были напрасными. С подсказки MVV Гислер научил следующий ТС различать пустые и несуществующие переменные. Smile

Кстати, ты с этой проблемой разобрался?
Code:
StrPos InStr '%AUTORUN_TCCMDLINE%' /S=
If %InStr% = 0 Then
# тут весь конфиг вместо Exit
EndIf
Главное, чтобы все EndIf присутствовали в каждом условии.
И тогда cm_SearchStandalone и т. п. команды будут отрабатывать почти как по умолчанию.


Last edited by Flasher on Wed Aug 01, 2018 02:00; edited 3 times in total

#1142:  Author: Iori PostPosted: Mon Jul 30, 2018 21:00
    —
Flasher
Продолжаем тут.
notepad запускается после выхода из ТС, а вот WinCDEmu.exe' /unmountall не хочет. Не могу понять в чём дело.
Code:

Pragma AutorunFinalizeSection
ShellExec /WAIT 'notepad.exe'


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


Last edited by Iori on Mon Jul 30, 2018 21:23; edited 1 time in total

#1143:  Author: FlasherLocation: Москва PostPosted: Mon Jul 30, 2018 21:15
    —
Iori
На 10-ке есть проблемы с правами. Попробуй создать em-команду со * спереди, а потом прописать её после CommandExec снизу конфига.
Iori wrote:
Но это не очень удобно.
А ты хочешь, что система доверяла установку/снос драйвера и деинсталляцию программы обычному юзеру? Confused

#1144:  Author: Iori PostPosted: Mon Jul 30, 2018 21:49
    —
Flasher wrote:
А ты хочешь, что система доверяла установку/снос драйвера и деинсталляцию программы обычному юзеру?

Не в этом дело. Конечно установку/снос драйвера должен делать админ, но права должны быть свойственные.
Дома где я админ, я же могу инсталлировать драйвер и монтировать образы, не запуская командер от админа. Хочется обратный результат.
Если права есть, то снос драйвера должен происходить, если прав нет на снос, то ни чего не должно происходить.

#1145:  Author: FlasherLocation: Москва PostPosted: Mon Jul 30, 2018 21:56
    —
Iori
Это "прелести" 10-ки. Что тут скажешь? А предложение выше испробовал?

#1146:  Author: Iori PostPosted: Mon Jul 30, 2018 22:18
    —
Flasher wrote:
Это прелести 10ки. Что тут скажешь?

По моему это прелести командера и плагинов.
Плагины включают свойственные привилегии командера. Если командер запущен от админа, то плагины работают от админа.

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

Flasher wrote:
Попробуй создать em-команду со * спереди, а потом прописать её после CommandExec снизу конфига.

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

#1147:  Author: FlasherLocation: Москва PostPosted: Mon Jul 30, 2018 22:36
    —
Iori wrote:
По моему это прелести командера и плагинов.
Это не прелести, а стандартный механизм наследования прав от родительского процесса. Прелестей же нет на 7-ке без UAC.
Iori wrote:
Другая идея
А опция ярлыка с кнопки Дополнительно и AlwaysAsAdmin=1 на что?

 Hidden text

#1148:  Author: Iori PostPosted: Mon Jul 30, 2018 23:18
    —
Flasher wrote:
Прелестей же нет на 7-ке без UAC.

Я сейчас не помню, но если ты запустишь ТС на 7-ке без админ прав, то в disk internals сможешь видеть все диски?

 Hidden text


Posted after 14 minutes:

Flasher wrote:
А опция ярлыка с кнопки Дополнительно и AlwaysAsAdmin=1 на что?


Это не выход для меня. Я использую портативную сборку командера, на работе у меня нет админ прав.

#1149:  Author: FlasherLocation: Москва PostPosted: Tue Jul 31, 2018 00:02
    —
Iori wrote:
Я сейчас не помню, но если ты запустишь ТС на 7-ке без админ прав, то в disk internals сможешь видеть все диски?
Речь не о правах юзера, а о проблемах с повышением под админом.

Iori wrote:
Я использую портативную сборку командера, на работе у меня нет админ прав.
Портативность = компактность. Тут роли не играет. А ярлык ты можешь хоть в таскбаре, хоть в папке ТС сделать. Про ключ так вообще молчу. А вот с отсутствием админских прав как ты ранее запускал программы, требующие повышения?

 Hidden text

#1150:  Author: Iori PostPosted: Tue Jul 31, 2018 01:26
    —
Flasher wrote:
Речь не о правах юзера, а о проблемах с повышением под админом.

Речь и про то и про это. Я попробовал "AlwaysAsAdmin=1", драйвер wincdemu не выгрузился. Это не совсем то (После первого нажатия кнопки "Все с админ. правами" все последующие операции, требующие администраторских привилегий, будут эти привилегии получать автоматически (пока программа tcmadmin.exe остаётся активнойWink

В манифесте TOTALCMD64.EXE, requestedExecutionLevel "asInvoker".
Разве это не значит что если я админ, то командер должен стартовать с правами админа, а на практике это не так. Может дело в десятке как ты и говорил.

Flasher wrote:
Портативность = компактность.

Это только одно из критерий, и далеко не самое важное. Портативность это универсальность и чистота. Раз сборка переносная, значит она должна работать на разных системах с разными настройками. Ну а чистота, вроде понятно.

Flasher wrote:
А ярлык ты можешь хоть в таскбаре, хоть в папке ТС сделать

Можно, но честно говоря до этого момента с autorun и wincdemu, мне это никогда требовалось в домашних условиях.

Flasher wrote:
А вот с отсутствием админских прав как ты ранее запускал программы, требующие повышения?

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

#1151:  Author: FlasherLocation: Москва PostPosted: Tue Jul 31, 2018 02:04
    —
Iori wrote:
Речь и про то и про это.
А в конце пишешь обратное.
Iori wrote:
Я попробовал "AlwaysAsAdmin=1", драйвер wincdemu не выгрузился.
А ярлык?
Я бы ещё попробовал через nircmd.exe elevatecmd runassystem запускать.
Iori wrote:
мне это никогда требовалось в домашних условиях.
Так ты и не о домашних пишешь.
Iori wrote:
Если ты про работу где у меня нет админ прав, то естественно я не запускал программы которые требуют админ права.
Тогда почему ты только сейчас стал запускать, обратившись с этой проблемой?

 Hidden text

#1152:  Author: Iori PostPosted: Wed Aug 01, 2018 01:40
    —
Flasher wrote:
А ярлык?

Через ярлык работает. Проблем нет.

Спасибо.

#1153:  Author: FlasherLocation: Москва PostPosted: Wed Aug 01, 2018 01:57
    —
Iori
ОК. Пож-та. Где ярлык разместил?

#1154:  Author: Iori PostPosted: Wed Aug 01, 2018 04:44
    —
Flasher wrote:
ОК. Пож-та. Где ярлык разместил?

На рабочем столе. Можно и в самой папке программы.

#1155:  Author: FlasherLocation: Москва PostPosted: Wed Aug 01, 2018 05:09
    —
Iori
Таскбаром (в один клик) не пользуешься? В корне ТС можно сделать и без привязки к букве диска, но не надоест время тратить на переходы в Проводнике?
Для стола/таскбара можно, конечно, и скрипт поиска использовать, чтобы не зависеть от буквы.

#1156:  Author: Iori PostPosted: Wed Aug 01, 2018 23:58
    —
Flasher wrote:
Таскбаром (в один клик) не пользуешься?

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

Это лишнее. Ярлык на столе в самый раз будет.

А вообще не понятно, почему не происходит повышение прав. Я помню на семёрке было тоже самое. Может винда так устроенна.

#1157:  Author: FlasherLocation: Москва PostPosted: Thu Aug 02, 2018 04:04
    —
LonerD wrote:
Вроде как в 9.21 RC 1 пофикшены пустые переменные.
В RC2 теперь точно пофиксены. Проверено. Cool

Iori wrote:
Ярлык на столе в самый раз будет.
Тогда ОК. Только надо учитывать, что флешки могут в разном порядке подключаться.
Iori wrote:
Может винда так устроенна.
Так UAC устроен. Погугли.

#1158:  Author: Iori PostPosted: Thu Aug 02, 2018 20:10
    —
Flasher wrote:
Так UAC устроен

UAC отключён. Shocked

#1159:  Author: FlasherLocation: Москва PostPosted: Thu Aug 02, 2018 21:43
    —
Iori
Тогда ты ошибаешься насчёт семёрки.

#1160:  Author: Iori PostPosted: Fri Aug 03, 2018 01:23
    —
Ты хочешь сказать что на семёрке, можно запустить командер как есть, (от
текущего пользователя, который в группе админов), и плагин autorun выполнит команды сноса системных драйверов wincdemu после закрытия ТС?


Last edited by Iori on Fri Aug 03, 2018 04:43; edited 1 time in total

#1161:  Author: FlasherLocation: Москва PostPosted: Fri Aug 03, 2018 01:28
    —
Iori
Конечно. У себя я в основном только ей и пользуюсь.
Предыдущее сообщение нет смысла цитировать. У тебя e перед ] русская.

#1162:  Author: Iori PostPosted: Fri Aug 03, 2018 04:46
    —
Flasher
Ну не знаю что и сказать. Mad Значит не надо было переходить на десятку. Одни проблемы.

#1163:  Author: FlasherLocation: Москва PostPosted: Tue Dec 25, 2018 14:01
    —
Народ, наконец-то связался с Loopback!
Он с дельфями давно дел не имеет, поэтому и пропал.
Но проблемы плагина постарается исправить после праздников. Так что ждём. Smile
TCMediaInfo с его слов сыроват, там на месяц работы. Поэтому с ним движения маловероятны.

#1164:  Author: Loopback PostPosted: Thu Jan 10, 2019 13:48
    —
Всех приветствую! Думаю, должен извиниться за то, что совсем забросил тему и бесследно пропал. На самом деле в то время было действительно не до плагинов, а потом уже просто по инерции.

Так или иначе, с подачи Flasher исправил кое-какие косяки плагина, упомянутые в теме, ну и кое-что добавил.

Список изменений:

- возвращена потерянная команда получения данных WMI в плагине Sysinfo
+ команда Exit теперь учитывает расположение в блоках условий
+ добавлена поддержка ключевого слова Not в условиях (только в виде "If Not"/"ElseIf Not")
+ по-умолчанию Autorun НЕ будет запускаться в процессах поиска/просмотра/итд.
+ добавлена Pragma AutorunLoadInSubrocess в случае если вам нужно загружать Autorun в процессах поиска/просмотра
* документирована команда MsgBox
- исправлена генерация файлов справки (теперь работает полнотекстовый поиск)

Пишите, если что-то забыл.

#1165:  Author: BeTePLocation: Санкт-Петербург PostPosted: Thu Jan 10, 2019 14:59
    —
Loopback wrote:
Пишите, если что-то забыл.

Возможно ли восстановить функционал MoveButton?

#1166:  Author: FlasherLocation: Москва PostPosted: Thu Jan 10, 2019 20:06
    —
Loopback
Приветствую! С возвращением! Smile

Обновил плагин и сразу полетели ошибки:
Unknown command: ProcessExist (про Autorun_Process.dll не сообщал, но с ним тоже была проблема, забыл про это.)
Unknown command: GetWMIValue
Не подхватываются переменные SysInfo: %SYSINFO_OSARCH%, %SYSINFO_OSVERSION% и т. д.

Win 7 x32, TC 9.21a.

Loopback wrote:
+ команда Exit теперь учитывает расположение в блоках условий
Всё по-старому. Вышибает. В начале кода запись:
Code:
StrPos InStr '%AUTORUN_TCCMDLINE%' /S=
StrPos CPath '%AUTORUN_TCCMDLINE%' :\
If %InStr% > 0 Or %CPath% > 0 Then
  Exit
EndIf
%AUTORUN_TCCMDLINE% при этом стала возвращать нужное.

Loopback wrote:
+ по-умолчанию Autorun НЕ будет запускаться в процессах поиска/просмотра/итд.
Не сказал бы, что cm_SearchStandalone (а также запуски с комстроки с /S=F, /S=C, /S=S) выполняется так же быстро, как на голом ТС. Но стало лучше. На командах перехода с ключом /O отразилось в лучшую сторону.

#1167:  Author: Loopback PostPosted: Thu Jan 10, 2019 23:25
    —
BeTeP wrote:
Возможно ли восстановить функционал MoveButton?

Думаю да, я так понимаю, интересен режим MOVE_LEGACY? Поскольку MOVE_RIGHT делал то, что сейчас в тотале по-умолчанию.

Flasher wrote:

Обновил плагин и сразу полетели ошибки:

Не могу подтвердить, у меня работает. Характер ошибки показывает, что не загружен плагин sysinfo. Может что-то с путями при его загрузке, проверь.

Flasher wrote:

Всё по-старому. Вышибает.

Проверил код, Exit срабатывает, потому что выполняется второе условие %CPath% > 0 на путь к тоталу: c:\total...

Flasher wrote:

Не сказал бы, что cm_SearchStandalone ... выполняется так же быстро, как на голом ТС.

Сейчас проверка на наличие /S сделана в самом начале после загрузки плагина, но скрипт все равно загружается, чтобы проверить наличие директивы AutorunLoadInSubrocess. Этот процесс проходит быстро, поскольку фактически ничего еще не выполняется, и не должен как-то заметно влиять на скорость. Можно сделать дебажку с безусловным выходом после проверки командной строки и посмотреть, будет ли заметно быстрее.

#1168:  Author: FlasherLocation: Москва PostPosted: Thu Jan 10, 2019 23:44
    —
Loopback wrote:
Может что-то с путями при его загрузке, проверь.
Никаких проблем с путями после автоустановки. Я же пользовался старыми версиями, которые работают, ничего при этом не меняя в конфиге:
Code:
LoadLibrary Plugins\Autorun_Process.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
Ага, после правки условия заработало, но стало выдавать окна, касаемые WMI:
Code:
---------------------------
sds
---------------------------
DataWidth
---------------------------
ОК   
---------------------------
при наличии в коде соотв. команд:
Code:
GetWMIValue DataWidth "DataWidth" "SELECT DataWidth FROM Win32_Processor"
SetEnv DataWidth %DataWidth%
В окружение записывается как 'DataWidth'.
То же самое, если убрать кавычки у имени параметра.

Loopback wrote:
потому что выполняется второе условие %CPath% > 0 на путь к тоталу: c:\total...
Точно. Поменял 0 на 4, сработало как надо. Спасибо за фикс. Правда теперь неясно, где этот Exit применять, коли теперь плагин сам выходит при /S= и /O из запущенного ТС.

Loopback wrote:
Можно сделать дебажку с безусловным выходом после проверки командной строки и посмотреть, будет ли заметно быстрее.
Дебажку мне? Или сам сверишь?
Pragma AutorunFinalizeSection никак не влияет?

#1169:  Author: Loopback PostPosted: Fri Jan 11, 2019 00:54
    —
Flasher wrote:
Ага, после правки условия заработало, но стало выдавать окна, касаемые WMI:

Мда. В старой версии sysinfo эта строчка работала нормально, как я понимаю? Что-то я не уверен, что остались исходники той версии, а в этой я, похоже, уже успел что-то поломать Smile Ладно, буду смотреть.

Flasher wrote:
Дебажку мне? Или сам сверишь?

Это как хочешь, сам в любом случае посмотрю.

#1170:  Author: FlasherLocation: Москва PostPosted: Fri Jan 11, 2019 01:03
    —
Loopback wrote:
В старой версии sysinfo эта строчка работала нормально, как я понимаю?
От 07.11.2013 — да.
Loopback wrote:
Это как хочешь
Если это поможет, я не против. Т.е., получается, 2 варианта (с проверкой AutorunLoadInSubrocess и без).
Что по последнему вопросу?

#1171:  Author: Loopback PostPosted: Fri Jan 11, 2019 14:23
    —
Выложил версию с поправленным плагином sysinfo, должна работать как та версия от 7 ноября.

По-поводу скорости, если интересно, выложил версию, в которой препроцессинг выполняется после проверки наличия /S= в комстроке, т.е. при запуске процесса поиска препроцессинг не производится. Также при запуске основного процесса показывается время выполнения препроцессинга.

При тестировании я никакой разницы не заметил. После этого поставил счетчик, на моей системе и скрипте чуть больше 100 строк время препроцессинга занимает в среднем 0,09 мс. Такую задержку визуально заметить невозможно. На медленных системах и более длинных скриптах время может быть больше, но вряд ли выйдет за десяток миллисекунд.

AutorunFinalizeSection никак не влияет, все директивы обрабатываются на этапе препроцессинга.

#1172:  Author: BeTePLocation: Санкт-Петербург PostPosted: Fri Jan 11, 2019 17:04
    —
Loopback wrote:
Думаю да, я так понимаю, интересен режим MOVE_LEGACY? Поскольку MOVE_RIGHT делал то, что сейчас в тотале по-умолчанию.

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

#1173:  Author: Loopback PostPosted: Fri Jan 11, 2019 17:37
    —
BeTeP
Да, это MOVE_LEGACY. Хорошо, поправлю, но наверно не сразу сейчас, там надо кое-что переделать.

#1174:  Author: FlasherLocation: Москва PostPosted: Fri Jan 11, 2019 21:08
    —
Loopback
Докладываю. SysInfo работает. GetWMIValue работает без кавычек для имени параметра.

Тестовую версию опробовал и визуально разницу уловить с предыдущей версией не смог. А время при запуске ТС по сути ничего не даёт (у меня 0,4 мс), т. к. не с чем сравнивать. По идее время нужно сверять у 2-х версий при вызове из запущенного ТС. Впрочем, я установил Autorun на чистый ТС и особой разницы со скоростью до установки не заметил, а значит, на скорость в моей сборке влияют другие плагины.

Ещё пару моментов.
1)
Code:
ShellExec /SW_HIDE /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe"
Почему-то окно Everything не скрывается. Как будто сама программа блокирует скрытие. Нельзя её как-то принудить? С минимизацией, например, проблем нет.
Причём такое поведение было не всегда. Закономерности по версиям и т. п. не выявил.

2) Ранее поднимался вопрос раскрытия пустых переменных среды в рамках одного пути в командах (прежде всего ShellExec и Process...). Пример:
Code:
SetEnv EMPTY
ShellExec %SYSTEMROOT%\SYSTEM32\notepad%EMPTY%.exe
Такая команда не выполнится. А хотелось бы. В рамках ТС этот момент Гислер по нашей инициативе исправил.

#1175:  Author: Loopback PostPosted: Sat Jan 12, 2019 13:38
    —
Ну и хорошо.

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

Flasher wrote:
Нельзя её как-то принудить?

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

Flasher wrote:
А хотелось бы.

Мне тоже Smile Это действительно было неудобно.

#1176:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 13:50
    —
Loopback wrote:
но не думаю, что при таких значениях есть смысл.
Видимо, нет.
Loopback wrote:
Наверно, в этом случае только пытаться скрыть после запуска, если она вообще это позволит.
Флаг снимается из разных программ управления окнами.

Loopback wrote:
Мне тоже Smile Это действительно было неудобно.
Эмм. В смысле "было"? Я прошу это исправить. Rolling Eyes

#1177:  Author: Loopback PostPosted: Sat Jan 12, 2019 15:19
    —
Flasher wrote:
Флаг снимается из разных программ управления окнами.

Значит только прятать после запуска. Но эта задача уже явно за пределами ShellExecute. Это надо искать окно запущенной программы и посылать ему сообщение. В принципе на Autoit должно решаться просто.

Flasher wrote:
Эмм. В смысле "было"? Я прошу это исправить.

Я это и имел в виду. Раз это теперь работает в тотале, нужно чтобы работало и здесь. Буду смотреть.

#1178:  Author: FlasherLocation: Москва PostPosted: Sat Jan 12, 2019 15:39
    —
Loopback wrote:
В принципе на Autoit должно решаться просто.
Ага. Или на AHK.

Loopback wrote:
Раз это теперь работает в тотале, нужно чтобы работало и здесь.
Отлично. Ждём'с.

#1179:  Author: enginigger PostPosted: Mon Jan 14, 2019 17:25
    —
Loopback
Code:
ShellExec /SW_HIDE /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe"


у Everything есть параметр комстроки -startup, при котором он запускается в фоне.
У меня запускается так:
Code:
ShellExec %commander_path%\prg\everything\everything.exe -startup

А выгружается так:
Code:
Pragma AutorunFinalizeSection
ShellExec %commander_path%\prg\everything\everything.exe -exit

#1180:  Author: FlasherLocation: Москва PostPosted: Tue Jan 15, 2019 00:31
    —
А при чём тут Loopback, если запрос мой?

Даже мысли не было искать по слову "фоновый" и уж тем более "startup". Беру на вооружение.
А вот выгружать лучше так:
Code:
If ProcessExist /F ...
ProcessTerminate /F /TT /A ...
EndIf

#1181:  Author: enginigger PostPosted: Tue Jan 15, 2019 10:01
    —
Flasher wrote:
А при чём тут Loopback, если запрос мой?

Пардон, промазал Smile

Flasher wrote:
А вот выгружать лучше так:
Code:
If ProcessExist /F ...
ProcessTerminate /F /TT /A ...
EndIf

У меня с моим вариантом проблем не было, ошибок не выскакивало, но Ваш тоже стоит рассмотреть.

#1182:  Author: FlasherLocation: Москва PostPosted: Tue Jan 15, 2019 10:17
    —
enginigger
Мой вариант по факту выгружает все процессы по заданному пути при наличии. Ваш лично у меня запускает новый экземпляр, торчит в процессах 25 сек. и выходит без закрытия остальных.
И если хотите полной портабельности, путь в кавычки брать таки стоит.

#1183:  Author: enginigger PostPosted: Tue Jan 15, 2019 10:50
    —
Flasher wrote:

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

Ваш вариант у меня вызывает ошибку "runtime error 207 at 02eb8e32" при закрытии ТС. Sad
Flasher wrote:

И если хотите полной портабельности, путь в кавычки брать таки стоит.

Согласен

#1184:  Author: FlasherLocation: Москва PostPosted: Tue Jan 15, 2019 11:01
    —
enginigger wrote:
Ваш вариант у меня вызывает ошибку "runtime error 207 at 02eb8e32" при закрытии ТС.
А вы прописали свой путь вместо ...?
Code:
If ProcessExist /F '%commander_path%\prg\everything\everything.exe' Then
ProcessTerminate /F /TT /A '%commander_path%\prg\everything\everything.exe'
EndIf

#1185:  Author: enginigger PostPosted: Tue Jan 15, 2019 12:59
    —
Flasher wrote:
А вы прописали свой путь вместо ...?

Конечно Smile.
Запускается нормально, закрывается с ошибкой. Autorun последний, 2.03а, Win7x64, TC 9.21a, Everything 1.4.1.924 x64

#1186:  Author: FlasherLocation: Москва PostPosted: Tue Jan 15, 2019 13:33
    —
enginigger wrote:
закрывается с ошибкой
И при этом в начале конфига присутствует строка?
Code:
LoadLibrary Plugins\Autorun_Process.dll

А если /W в придачу к /F /TT /A добавить?

#1187:  Author: enginigger PostPosted: Tue Jan 15, 2019 16:16
    —
Flasher wrote:
И при этом в начале конфига присутствует строка?
Code:
LoadLibrary Plugins\Autorun_Process.dll

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

#1188:  Author: FlasherLocation: Москва PostPosted: Tue Jan 15, 2019 18:39
    —
enginigger wrote:
Но если Everything был запущен из другого места (для тестов, например), то так и останется висеть в процессах при закрытии ТС.
Ну, так это крайний пример. Мне важно соблюсти преемственность в рамках ТС. Если так уж сильно надо, то ничего не мешает закрывать по имени, а не по пути, убрав при этом дважды ключ /F.
enginigger wrote:
Предпочту остаться при своем, за все время проблем не обнаружил.
Т.е. описанное мной не подтверждаете, и все процессы без проблем моментально закрываются?

#1189:  Author: enginigger PostPosted: Thu Jan 17, 2019 09:55
    —
Flasher wrote:
Т.е. описанное мной не подтверждаете, и все процессы без проблем моментально закрываются?

У меня при закрытии ТС Everything в течение 2-3 секунд грузит процессор (записывает данные в базу, наверное) и закрывается.
Никаких доп. процессов не появляется и в памяти не остается.
Если что, Everything у меня запускается не от админа (ключ run_as_admin=0 в ini).

#1190:  Author: FlasherLocation: Москва PostPosted: Thu Jan 17, 2019 10:06
    —
enginigger wrote:
в течение 2-3 секунд грузит процессор (записывает данные в базу, наверное) и закрывается.
Видимо, у вас мало данных на дисках.
enginigger wrote:
Никаких доп. процессов не появляется и в памяти не остается.
Т.е. на момент выполнения c -exit у вас ещё на 3 секунды остаётся прежний процесс с именем Everything.exe на второй вкладке диспетчера (при сортировке по первой колонке)? Этого чисто гипотетически не может быть, т.к. запуск процесса с любым ключом — это никак не выполнение внутренней команды (функции). Можете подтвердить на скринкасте с открытым диспетчером?

Также что будет после закрытия ТС, если у вас было запущено, например, 3 процесса Everything.exe ?

#1191:  Author: Loopback PostPosted: Sat Jan 19, 2019 00:31
    —
Выложил версию 2.0.4, добавлена поддержка пустых переменных окружения.

#1192:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jan 19, 2019 01:19
    —
Loopback
А что по поводу моего вопроса?

#1193:  Author: FlasherLocation: Москва PostPosted: Sat Jan 19, 2019 04:18
    —
Loopback
Просто замечательно! Проверил и с Process и с ShellExec, работает как часики. Спасибо, что не сильно затянул с просьбой! Smile

#1194:  Author: Loopback PostPosted: Sat Jan 19, 2019 13:45
    —
BeTeP
Я же писал, всё будет, но немного не сразу.

#1195:  Author: FlasherLocation: Москва PostPosted: Sat Jan 19, 2019 14:27
    —
BeTeP
FixWindow разонравился?

#1196:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Jan 19, 2019 15:20
    —
Flasher
Да. Это не совсем то.
Дело в том, что MoveButton, в отличии от FixWindow, не только переносит кнопку, но и уменьшает ширину диалога копирования/перемещения.

 Скрины

Лично мне вариант с MoveButton нравится больше.

#1197:  Author: FlasherLocation: Москва PostPosted: Sat Jan 19, 2019 15:45
    —
BeTeP
Ясно. У меня ширина не меняется, и меня это устраивает. Больше в полях отобразится.

#1198:  Author: enginigger PostPosted: Mon Jan 21, 2019 14:20
    —
Flasher wrote:
Видимо, у вас мало данных на дисках.

2,5 ТБ, всего ~400 тыс. файлов. Мне хватает.

Flasher wrote:
Этого чисто гипотетически не может быть, т.к. запуск процесса с любым ключом — это никак не выполнение внутренней команды (функции).

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

Flasher wrote:
Также что будет после закрытия ТС, если у вас было запущено, например, 3 процесса Everything.exe ?

У меня и второй одновременно с первым не запускается ни вручную, ни если несколько копий ТС запустить.

#1199:  Author: FlasherLocation: Москва PostPosted: Mon Jan 21, 2019 14:40
    —
enginigger wrote:
2,5 ТБ, всего ~400 тыс. файлов. Мне хватает.
И программа индексирует все диски? Верно? В любом случае у меня на пол порядка больше. Советую таки приобщить к переносному варианту, где есть риск столкнуться с другими условиями.
enginigger wrote:
Потом через пару секунд закрывается основной.
А можете проверить на x32 версии?
enginigger wrote:
ни если несколько копий ТС запустить.
Запустить или пытаться запустить?
У меня при
Code:
allow_multiple_windows=0
allow_multiple_instances=0
всё равно запускаются новые экземпляры. Поэтому я запускаю так:
Code:
ProcessExist /F Everything '%COMMANDER_PATH%\Utils\Everything\Everything.exe'
If %Everything% = 0 Then
  ShellExec /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe" -startup
EndIf

#1200:  Author: FlasherLocation: Москва PostPosted: Sat Jan 26, 2019 19:02
    —
Loopback
Я как-то просил тебя cpuid привинтить. Вдруг время найдётся. А пока прошу сравнить скорости выполнения этого:
Code:
GetWMIValue Manufacturer Manufacturer "SELECT Manufacturer FROM Win32_Processor"
GetWMIValue DataWidth DataWidth "SELECT DataWidth FROM Win32_Processor"
с этим:
Code:
ProcessExecGetOutput Manufacturer %ComSpec% '/q/c for /f "skip=2 tokens=2 delims=:" %i in (''"%COMMANDER_PATH%\Utils\CPUIdC.exe"'') do echo%i &exit'
ProcessExecGetOutput DataWidth %ComSpec% '/q/c for /f "skip=3 tokens=2 delims=:" %i in (''"%COMMANDER_PATH%\Utils\CPUIdC.exe"'') do echo%i &exit'
StrReplace /S DataWidth '%DataWidth%' ' Bits'
CPUIdC в архиве.

#1201:  Author: Loopback PostPosted: Sat Jan 26, 2019 23:13
    —
Flasher wrote:
Я как-то просил тебя cpuid привинтить.

Ок, посмотрю, благо там даже пример есть. Параметров там много, выглядеть это, наверно, может как-нибудь так:
Code:

GetCpuInfo var "SSE3"     -> True
GetCpuInfo var "Vendor"   -> GenuineIntel

Flasher wrote:
А пока прошу сравнить

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

#1202:  Author: FlasherLocation: Москва PostPosted: Sun Jan 27, 2019 00:01
    —
Loopback wrote:
выглядеть это, наверно, может как-нибудь так:
Может, стоит ещё параметр, возвращающий описание добавить? Есть старые таблички.
Loopback wrote:
Но это только на глаз
На глаз мне бы твоя помощь не потребовалась. Конечно, через таймеры. Smile

#1203:  Author: Loopback PostPosted: Sun Jan 27, 2019 22:55
    —
Flasher wrote:
Может, стоит ещё параметр, возвращающий описание добавить?

Описание параметров, думаю, лучше в справку.

Flasher wrote:
На глаз мне бы твоя помощь не потребовалась

В принципе я так и думал Smile Попробуй эту версию, добавил функцию получения таймера из скрипта. Значение возвращает в мс. Если окажется полезной, можно будет и оставить. Использовать так:

Code:

GetTimer T1

ProcessExecGetOutput Manufacturer %ComSpec% '/q/c for /f "skip=2 tokens=2 delims=:" %i in (''"%COMMANDER_PATH%\Utils\CPUIdC.exe"'') do echo%i &exit'
ProcessExecGetOutput DataWidth %ComSpec% '/q/c for /f "skip=3 tokens=2 delims=:" %i in (''"%COMMANDER_PATH%\Utils\CPUIdC.exe"'') do echo%i &exit'
StrReplace /S DataWidth '%DataWidth%' ' Bits'

GetTimer T2

GetWMIValue Manufacturer Manufacturer "SELECT Manufacturer FROM Win32_Processor"
GetWMIValue DataWidth DataWidth "SELECT DataWidth FROM Win32_Processor"

GetTimer T3

Set /C Diff1 %T2%-%T1%
Set /C Diff2 %T3%-%T2%


У меня примерно 140 и 30 мс соответственно.

#1204:  Author: FlasherLocation: Москва PostPosted: Sun Jan 27, 2019 23:25
    —
Loopback wrote:
Описание параметров, думаю, лучше в справку.
Вообще да. В конфиге они ни к чему по сути, если знаешь, что за что отвечает.

Спасибо за GetTimer. Да, подтверждаю, разница существенная.
У меня первая даже за 500 уходит. А вторая в диапазоне 26-35. С отключённым WmiPrvSE.exe около 110-130.
Оставляй. Для тестов весьма полезна.

#1205:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 28, 2019 11:18
    —
А почему GetTimer? Гуглил-гуглил, так и не нашёл, откуда такое название. У меня лично таймер ассоциируется с чем-то, что надо заводить на какое-то время, и что потом срабатывает. А это, насколько я понял, либо текущий таймштамп (время), либо время со включения компа (тики)...

#1206:  Author: Loopback PostPosted: Mon Jan 28, 2019 11:39
    —
MVV
Да, название некорректное, по-сути это просто обертка над QueryPerformanceCounter. Наверно GetTimestamp будет правильнее.

#1207:  Author: FlasherLocation: Москва PostPosted: Mon Jan 28, 2019 11:49
    —
Loopback
В VBS/VB.NET есть Timer (время от полуночи в single-секундах). Тут пример тоже с gettimer из libc.a.
А GetTimestamp — это отметка даты и времени. У нас же дата отсутствует.

#1208:  Author: Loopback PostPosted: Mon Jan 28, 2019 12:41
    —
GetTimestamp - таки только время Smile

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

Хотя если не углубляться в тонкости реализации, название в принципе ничего не меняет.

#1209:  Author: FlasherLocation: Москва PostPosted: Mon Jan 28, 2019 13:25
    —
Timestamp — это по сути число секунд, преобразованное из заданной даты и времени.
Есть брать Unix Time Stamp, то видим 10-тизначное число секунд от 1 января 1070 года. У тебя в текущий момент мне выдаёт 9-тизначное от времени включения в мс.
В vbs в мс 8-мизначное от полуночи можно получить так:
Code:
MsgBox CDbl(Timer)*1000

Loopback wrote:
таймер - это все-таки некий интервал.
Вот он и есть. Между датой и временем запуска машины/полуночи и текущей датой и временем.

#1210:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Jan 28, 2019 16:06
    —
Таймштамп - да, нечто более глобальное.

Таймер - это скорее не интервал, а механизм реагирования на истечение некоего интервала.

А число тиков с момента включения... В дотнете это значение возвращается свойством Environment.TickCount (мс, знаковое 32-битное, где-то в 25 дней меняет знак), в Windows API - функцией GetTickCount (мс, беззнаковое 32-битное, где-то раз в 50 дней обнуляется). В WMI вроде время с момента включения считается счётчиком SystemUpTime (секунды). В общем, думаю, надо придерживаться какого-то из существующих названий этой сущности, а не выдумывать своё. GetTicks или GetUptime (может, GetUptimeMs) - вроде неплохие кандидаты.

#1211:  Author: FlasherLocation: Москва PostPosted: Mon Jan 28, 2019 16:17
    —
GetUptimeMs — больше похоже на правду.

#1212:  Author: Loopback PostPosted: Thu Jan 31, 2019 13:37
    —
Тогда уж лучше пусть будет GetUptime, т.к. точость функции можно при необходимости сделать и выше, например до микросекунд, добавив управляющий параметр.

#1213:  Author: FlasherLocation: Москва PostPosted: Thu Jan 31, 2019 14:08
    —
Loopback wrote:
например до микросекунд
А чего сразу не нано? Я уж не говорю про совсем сумашедшие иокто. Very Happy
По чел. восприятию нам и сантисекунд было бы достаточно.

#1214:  Author: Loopback PostPosted: Mon Feb 25, 2019 02:16
    —
BeTeP wrote:
Дело в том, что MoveButton, в отличии от FixWindow, не только переносит кнопку, но и уменьшает ширину диалога копирования/перемещения.

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

Выложил новые версии тут. MoveOptionsButton теперь запускается без параметров. Если интересно, можно попробовать запустить с параметром "/NARROW" и посмотреть как безобразно выглядит суженный диалог Smile

#1215:  Author: BeTePLocation: Санкт-Петербург PostPosted: Mon Feb 25, 2019 04:17
    —
Loopback wrote:
Если интересно, можно попробовать запустить с параметром "/NARROW" и посмотреть как безобразно выглядит суженный диалог Smile

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

#1216:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Feb 25, 2019 08:56
    —
Loopback
Что плагин делает с параметром MoveOptionsButton /Narrow, ясно. И в старом формате MoveOptionsButton MOVE_LEGACY ясно — это то же, что MoveOptionsButton без параметра. Но везде при изменении масштабирования на странице настроек TC "Шрифты" кнопка "Опции" неправильно позиционируется по горизонтали, сползая вниз и частично перекрываясь кнопкой с плюсом — проверял со своим рабочим значением DPI 110. Это исправимо?


Last edited by Avada on Mon Feb 25, 2019 09:48; edited 1 time in total

#1217:  Author: FlasherLocation: Москва PostPosted: Mon Feb 25, 2019 09:48
    —
Насчёт глюков с DPI (у меня 120 в системе, в ТС без крыжика) подтверждаю.

#1218:  Author: Loopback PostPosted: Mon Feb 25, 2019 21:23
    —
Да, забыл про другие DPI. Исправил.

Новая версия.

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

Реализовано двумя дополнительными функциями плагина AddDialog и AddControl. В них задаются дельты перемещения/изменения размера (относительно исходных координат/размеров), для диалога и контрола соответственно. Цифры задаются для стандартных 96dpi. Сам контрол задается именем класса и экземпляра. Также можно поменять текст контрола. После установки значений вызывается MoveOptionsButton без параметров.

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

Code:

AddControl /QUEUEBTN /X:113 "TButton" 2
AddControl /Y:-74 "TButton" 3 "Опции"
AddControl /X:113 "TButton" 4
AddControl /X:113 "TButton" 5
AddControl /X:113 "TButton" 6
MoveOptionsButton

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

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

Подробная документация будет в следующей версии Autorun.

#1219:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 26, 2019 08:45
    —
Loopback
Спасибо! На мой вкус, вариант с /Narrow сейчас в масштабированном и не развёрнутом по высоте виде прекрасно работает. В немасшабированном виде, да, тут есть небольшое наложение второй опции с флажком на первую. Кроме того (и тут надо бы что-то придумать!) в любом случае при /Narrow в развёрнутом "узком" диалоге (с показом дополнительных опций) режется правая часть с кнопкой прикрепления.
Вопросов у меня на данный момент три:
1. Можно ли в обычном (широком) режиме подвинуть (по умолчанию или опционально) все кнопки налево, чтобы пустое место отображалось не слева, а справа? (С остальным буду, видимо, разбираться уже после появления подробной документации.)
2. Можно ли при Narrow как-то побороть это самое наложение опций без масштабирования, чтобы влезали последняя буква и скобка? В две строки опции дать, чуть ширину окна увеличить? Сокращение строк в LNG прошу не предлагать, это и так желающие сделают. Smile
3. Про развёрнутый диалог сказано выше. Это сейчас самый серьёзный глюк, его надо как-то преодолеть.

#1220:  Author: Loopback PostPosted: Tue Feb 26, 2019 13:00
    —
Avada wrote:
1. Можно ли в обычном (широком) режиме подвинуть (по умолчанию или опционально) все кнопки налево, чтобы пустое место отображалось не слева, а справа?

Их тогда просто наоборот не надо двигать. Прямо сейчас такую схему можно сделать кодом:
Code:

AddControl /QUEUEBTN "TButton" 2
AddControl /Y:-74 "TButton" 3
MoveOptionsButton

Avada wrote:
2. Можно ли при Narrow как-то побороть это самое наложение опций без масштабирования, чтобы влезали последняя буква и скобка?

Да, там просто строки очень длинные. Но на пару пикселей можно раздвинуть.

Сокращать перевод даже и мысли не было. Более того, мне вообще непонятно неприятие широкого вида диалога - мониторы сейчас всё больше, разрешение выше, а диалоги остаются тесными, новые опции уже добавить некуда. Я сам большой консерватор, но по-моему сейчас диалог выглядит отлично, я MoveButton уже давно не пользуюсь. Поэтому так лень было вообще за него браться Smile

Avada wrote:

3. Про развёрнутый диалог сказано выше. Это сейчас самый серьёзный глюк, его надо как-то преодолеть.

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

#1221:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 26, 2019 13:09
    —
Loopback
Пункты 1 и 2 — второстепенные, серьёзен только, ИМХО, пункт 3 (потому что это уже не косметика, а потеря функционала, раз до запирающей кнопки добраться невозможно). Не будь этого, я бы вариант с Narrow без разговоров поставил сейчас как основной. Хотя к широким диалогам у меня отношение совершенно спокойное.
То есть шансов на корректную подгонку развёрнутой нижней части диалога пока нет? Потому как без этого только подгонка пикселей для влезания опций в основной части окна первоочередного смысла не имеет.

#1222:  Author: Loopback PostPosted: Tue Feb 26, 2019 13:55
    —
Avada wrote:
То есть шансов на корректную подгонку развёрнутой нижней части диалога пока нет?

Красивого решения я не вижу. Есть не очень хороший вариант, можно, конечно, попробовать.

Но даже если это и удастся решить, то остается проблема с несужаемыми комбобоксами в x64-версии. Вот с этим даже идей нет. Какой смысл тратить время на решение первой проблемы, пока нет даже мыслей, как победить вторую?

#1223:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 26, 2019 14:04
    —
Loopback
Немалая часть публики, как и я, по-прежнему предпочитает в 64-битных системах 32-битный TC, так что будет востребован и такой вариант. Естественно, со всеми положенными предупреждениями в документации. В TWinKey вон тоже ограничений предостаточно, но если они упомянуты в справке, то это именно ограничения а не ошибки.

#1224:  Author: Loopback PostPosted: Tue Feb 26, 2019 21:59
    —
Avada
Ну хорошо, посмотрю. Разумеется, положительный результат пока не обещаю Smile

#1225:  Author: Loopback PostPosted: Wed Feb 27, 2019 23:09
    —
Avada
В общем ничего хорошего из этой затеи не выходит. Хоть и удалось добраться до элементов, появляющихся после раскрытия диалога, при сужении группы дополнительных настроек кнопка фиксации окна оказывается недоступной. Это вообще не кнопка, а фактически картинка, нарисованная на контроле. Ее положение задается один раз при создании контрола и впоследствии уже не меняется, ни при сужении, ни при расширении.

Так что тем кому нужен функционал этой кнопки - придется остаться с обычным видом диалога. Если не нужен - в 32-битной версии выглядит всё достаточно прилично. В 64-битной всё так же печально.

#1226:  Author: FlasherLocation: Москва PostPosted: Thu Feb 28, 2019 01:41
    —
Loopback
Поменял местами Опции и Отмена. То, что надо. Спасибо!
Code:
AddControl /QUEUEBTN "TButton" 2
AddControl /X:-92 "TButton" 3
AddControl /X:112 "TButton" 4
MoveOptionsButton
А можно добавить изменение ширины кнопок?
А также чтобы при перестановке кнопок переход к ним по [Shift+]Tab соответствовал текущей последовательности?


Last edited by Flasher on Thu Feb 28, 2019 09:39; edited 1 time in total

#1227:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Feb 28, 2019 09:27
    —
Loopback
Ясно, будем исходить из этого.

#1228:  Author: Loopback PostPosted: Thu Feb 28, 2019 12:23
    —
Flasher wrote:
А можно добавить изменение ширины кнопок?

Уже есть, параметр /W: (и /H).
По поводу "странностей" с координатами - это не абсолютные значения, а дельты относительно предыдущего значения. Положительное - сдвигает вправо/вниз или увеличивает размер, отрицательное наоборот. Вообще, конечно, параметры правильнее было бы назвать /DX, /DW и т.д., но хотелось покороче, да и без документации все равно неочевидно будет.

Flasher wrote:
А также чтобы при перестановке кнопок переход к ним по [Shift+]Tab соответствовал текущей последовательности?

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

#1229:  Author: BeTePLocation: Санкт-Петербург PostPosted: Thu Feb 28, 2019 14:05
    —
Loopback wrote:
Уже есть, параметр /W: (и /H).

А вот за это огромное спасибо.
Увеличил ширину кнопок не уменьшая ширину диалогового окна. Получилось очень даже симпатично.

 Hidden text

#1230:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Feb 28, 2019 16:24
    —
BeTeP
А код как выглядит?

#1231:  Author: BeTePLocation: Санкт-Петербург PostPosted: Thu Feb 28, 2019 16:55
    —
Avada wrote:
А код как выглядит?

Для стандартных 96dpi.
Code:
AddControl /QUEUEBTN /X:20 /W:20 "TButton" 2
AddControl /Y:-74 "TButton" 3
AddControl /X:76 /W:40 "TButton" 4
AddControl /X:39 /W:38 "TButton" 5
AddControl /W:21 "TButton" 6
MoveOptionsButton

#1232:  Author: FlasherLocation: Москва PostPosted: Thu Feb 28, 2019 19:23
    —
Loopback wrote:
Уже есть, параметр /W: (и /H).
Хм. Было бы хорошо, чтобы с уменьшением и соотв. сдвигом ключ /Narrow приводил бы к сужению диалога и комбобоксов до совокупной ширины кнопок с зазорами или хотя бы до фиксированной ширины, а то смысл теряется. И мне, например, не нравится, как торчит кнопка [+], уходя границей от верхнего комбобокса.
Высоту по /Н уменьшать вряд ли пришлось бы, разве что увеличить, но пока полезным ключ не кажется.
Заранее спрошу — список скрытых плюшек на этом не заканчивается? Smile

Loopback wrote:
Но тут опять же дельфи, неизвестно как оно будет.
Ну, я думаю, ты постараешься. Wink

#1233:  Author: Loopback PostPosted: Thu Feb 28, 2019 22:01
    —
Flasher wrote:
Хм. Было бы хорошо, чтобы с уменьшением и соотв. сдвигом ключ /Narrow приводил бы к сужению диалога и комбобоксов до совокупной ширины кнопок с зазорами или хотя бы до фиксированной ширины, а то смысл теряется.

Честно говоря, не понял. Ключ этот только для режима по умолчанию и вообще никак не работает в режиме кастомизации. А для диалогов можно менять те же параметры положения и размеров, что и для контролов.
Flasher wrote:
И мне, например, не нравится, как торчит кнопка [+], уходя границей от верхнего комбобокса.

Ну так для этого и сделана возможность самостоятельной настройки контролов. Потому что, например, эта кнопка в 10-ке торчит, а в семерке нет. Более того, при масштабировании ее размеры тоже изменяются непропорционально другим элементам. Так реализовано масштабирование в винде, и поэтому я очень не люблю плотности больше 96. Однако на всяких 4К мониторах от этого никуда не денешься.

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

Flasher wrote:
список скрытых плюшек на этом не заканчивается?

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

Flasher wrote:
Ну, я думаю, ты постараешься

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



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

Документация в архиве, раздел справки по плагину.

#1234:  Author: FlasherLocation: Москва PostPosted: Thu Feb 28, 2019 22:46
    —
Loopback wrote:
А для диалогов можно менять те же параметры положения и размеров
Добавил AddDialog /W:-50 DIALOG_COPYMOVE — ничего не изменилось. Или вдобавок нужно все контролы менять/двигать?
Loopback wrote:
Потому что, например, эта кнопка в 10-ке торчит, а в семерке нет.
У меня 7-ка. И она торчит на классической теме.
Loopback wrote:
Однако на всяких 4К мониторах от этого никуда не денешься.
Увы, но и на Full HD тоже.
Loopback wrote:
Вообще есть идея дать возможность отключить автомасштабирование
Разве после смены DPI не будет несоответствия с потерей портабельной совместимости?
Loopback wrote:
чтобы в дальнейшем больше к этому плагину не возвращаться.
Ты имеешь в виду MoveButton?
Loopback wrote:
А жаль, тема была бы полезная.
Это точно.

Loopback wrote:
С диалогом поиска, например, не работает, может потом посмотрю, похоже там тотал что-то ограничивает.
Взгляни, пожалуйста, на эти диалоги. Есть проблемные?

#1235:  Author: Loopback PostPosted: Fri Mar 01, 2019 00:02
    —
Flasher wrote:
Добавил AddDialog /W:-50 DIALOG_COPYMOVE — ничего не изменилось.

Да, где-то успел поломать. Должно так работать. Завтра посмотрю.

Flasher wrote:
Разве после смены DPI не будет несоответствия с потерей портабельной совместимости?

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

Flasher wrote:
Ты имеешь в виду MoveButton?

Ага. Autorun пока ничего не грозит Smile

Flasher wrote:
Это точно.

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

Flasher wrote:
Взгляни, пожалуйста, на эти диалоги. Есть проблемные?

Завтра пмосмотрю.

#1236:  Author: FlasherLocation: Москва PostPosted: Fri Mar 01, 2019 00:30
    —
Loopback wrote:
В любом случае это будет опция.
если что-нибудь придумается - сделаю.
Завтра посмотрю.
ОК.
Loopback wrote:
Autorun пока ничего не грозит Smile
Выдохнул. Smile

#1237: Autorun Author: rk2019Location: Moskov PostPosted: Fri Mar 01, 2019 00:57
    —
Здравствуйте.

Зарегистрировался чтобы попросить реализовать только 1 опцию - вернуть узкие диалоги, как были в старых версиях до 8.01 (включительно).

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

#1238:  Author: FlasherLocation: Москва PostPosted: Fri Mar 01, 2019 01:07
    —
rk2019
Вот с помощью AddControl и будете настраивать.

#1239:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Mar 01, 2019 06:55
    —
rk2019
Про возврат узкого диалога (с параметром MoveOptionsButton /Narrow) абсолютно всё сказано на предыдущей странице. Уяснить, что при этом получается, можно было бы и без регистрации. Задача решается только со значительными издержками, преодолеть которые не удалось. Больше никаких решений конкретно по нормальному переводу диалога в узкий вид нет и не предвидится. От любого числа последующих запросов с любой мотивацией картина не изменится.

#1240:  Author: Loopback PostPosted: Fri Mar 01, 2019 19:44
    —
Новая версия MoveButton.

Исправил:
- не работали некоторые параметры диалога
- неправильное перемещение контролов, дочерних к другим контролам диалога, а не к самому диалогу
- для параметров игнорировались значения < 10
- небольшие правки схем по умолчанию

Добавил параметр /NOSCALE для диалогов.

Документация обновлена.

rk2019
Мне нечего добавить к сказанному Avada.

Flasher
Посмотрел последние четыре диалога.

Настройка внутренней программы просмотра, Настройка панели инструментов - вроде ок
Добавить выделение / Фильтр ... - работает, но в тотале много диалогов с классом TCOMBOINPUT, и даже по тексту не везде можно их различить
Выбор шаблона - нет, это по-сути тот же диалог поиска.

#1241:  Author: FlasherLocation: Москва PostPosted: Fri Mar 01, 2019 23:13
    —
Loopback
Теперь заработало. И моя догадка насчёт необходимости смещения контролов оказалась верна.
Loopback wrote:
Добавить выделение / Фильтр ... - работает, но в тотале много диалогов с классом TCOMBOINPUT
А какие ещё? Может стоит ещё спецназваний добавить помимо трёх имеющихся?
И ты можешь фиксатор сделать для верхних диалогов? А то MVV уже 5 с лишним лет никак не снизайдёт до обновки.

Loopback wrote:
Мне нечего добавить к сказанному Avada.
Вообще-то rk2019 пишет не про этот диалог, а про диалоги в целом. Т.е. если что-то и добавлять, то к написанному мной. Wink

#1242:  Author: Loopback PostPosted: Sat Mar 02, 2019 00:12
    —
Flasher wrote:
Может стоит ещё спецназваний добавить помимо трёх имеющихся?

Хм, может не очень много, но например, еще создание каталога. В принципе от "фильтра" его сейчас можно отличить по тексту "Шаблоны", а три диалога для работы с выделением (добавить выделение/снять выделение и вариант без заголовка) в принципе делают одно и то же.

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

Flasher wrote:
И ты можешь фиксатор сделать для верхних диалогов?

Не знаю, я и так уже мечтаю закончить с этими окнами поскорее. О чем речь-то вообще?

Flasher wrote:
Вообще-то rk2019 пишет не про этот диалог, а про диалоги в целом. Т.е. если что-то и добавлять, то к написанному мной.

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

#1243:  Author: FlasherLocation: Москва PostPosted: Sat Mar 02, 2019 00:33
    —
Loopback wrote:
Спецназвания, думаю, нужно добавлять только там, где совсем никаких вариантов различить без дополнительных ухищрений
Тогда это Файловые ассоциации (системные, wcx, по типам файлов).

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

#1244:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 02, 2019 07:57
    —
Flasher
Предшествующая этому запросу избыточно длинная дискуссия в основной теме TC на ру-борде с неоднократными ссылками на нашу тему шла исключительно о диалоге копирования, и я склонен считать запрос прямым её продолжением. Что касается "диалогов" вместо "диалога", советую обратить внимание на упоминание версии 8.01. Что у нас заметно увеличивалось по сравнению с ней по ширине в 8.50, кроме диалога копирования и производных от него? (Включая диалог создания ярлыков, и по сей день, кстати, в результате уже упоминавшейся гислеровской экономии наследующий практически бесполезную в его контексте кнопку "Опции", а по компоновке до 8.50 имевший вид еще более чудовищный, чем основной диалог.)

Кстати, при использовании аналога /Narrow с точным позиционированием ширины и контролов (см. справку) в 32-битном TC до запирающей кнопки добраться при сильном желании всё-таки можно: выполнить команду cm_UnloadPlugins, в принявшем обычный вид диалоге копирования обычного вида изменить состояние кнопки, закрыть диалог и перезагрузить TC. Но далее в зафиксированном развёрнутом состоянии диалог отображается обычным, а не модифицированным. То же самое получается при изменении статуса прикреплённости не через диалог, а посредством ShowCopyOptions=1 (я это делал через Ultra TC Configuration Editor). Интересно, а этот вариант отображения в принципе сузить можно?


Last edited by Avada on Sat Mar 02, 2019 09:00; edited 1 time in total

#1245:  Author: FlasherLocation: Москва PostPosted: Sat Mar 02, 2019 08:45
    —
Avada
Ты так пишешь, как будто я за этим рубордом следить обязан.
А насчёт 8.01 я тоже не особо понял, ведь некоторые диалоги расширили в 9-ке. Пусть прояснит.

#1246:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 02, 2019 09:07
    —
Flasher
Не обязан, но иногда, насколько мне известно, следишь. Не следил в этот раз — прими к сведению. (Отсюда и — с некоторыми перерывами — ещё несколько страниц про одно и то же.) А насчёт 8.01 я как раз вполне всё понял. Диалог копирования расширился именно после этой версии, об этом несколько раз говорилось и на ру-борде, и такое упоминание — достаточно ясный показатель того, о чём реально идёт речь.

И посмотри, если не заметил, дописку в моём предыдущем посте. Просто для сведения, вопрос в основном к разработчику.

Loopback
Справка плагина wrote:
Поскольку в 32-битной и 64-битной версиях Total Commander используются разные классы элементов управления, для поддержки обеих версий необходимо в конфигурации Autorun сделать два набора и загружать нужный в зависимости от версии программы.

Я полагаю, это нужно прописать несколько подробнее, с рекомендациями по практическому обеспечению этой самой нужной загрузки. И хоть один примерчик изменения диалога для TC x64 хорошо бы в справку.

#1247:  Author: FlasherLocation: Москва PostPosted: Sat Mar 02, 2019 09:37
    —
Avada
От раз в 2 недели до раз в 3 месяца "следишь" это трудно назвать. Иногда заглядываю — скорее. Тем более, что мне приходится для этого использовать прокси.
Откуда растут тапки теперь понятно.

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

#1248:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 02, 2019 09:48
    —
Flasher
Начальная часть дописки — про то, что до этой дорисованной кнопки всё-таки окольными путями добраться можно (в конце концов, не каждые пять минут она переключается). Не будь последующих проблем при этой фиксации, я бы на том и остановился, но они есть, так что прочее добавлялось по мере оценки последствий. Вот это (как и твои уточнения) — уже для разработчика.

#1249:  Author: FlasherLocation: Москва PostPosted: Sat Mar 02, 2019 10:31
    —
Avada
А я нисколько не осуждаю указание на проблему. К слову, с тем же FixWindow при предварительной фиксации кнопка ОК смещается на первоначальное место и восстанавливает исходную ширину, при том что всё остальное остаётся на месте.

А в части "добраться" могу предложить такую переключалку:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef
if(tcini(Configuration,ShowCopyOptions,#),set_tcini(Configuration,ShowCopyOptions,0),set_tcini(Configuration,ShowCopyOptions,1))
ieframe.dll,115
Вкл/выкл: закрепить блок дополнительных параметров|в диалоге копирования в раскрытом состоянии

#1250:  Author: Loopback PostPosted: Sat Mar 02, 2019 12:53
    —
Flasher wrote:
Тогда это Файловые ассоциации (системные, wcx, по типам файлов).

Да, вот это как раз тот случай. Первые два различаются наличием одной кнопки. В связи с этим думаю переименовать параметр /queuebtn в некий нейтральный, например /marker. Или /veryimportantcontrol Very Happy

А вот "по типам файлов" - это какой? Если внутренние ассоциации - это другой класс (кстати, такой же, как для выбора цветов, ну блин Гислер...)

Flasher wrote:
В FixWindow есть функция запоминания размера и позиции диалога.

А, понятно. Подумаю, но наверно не сейчас.
Avada wrote:
Но далее в зафиксированном развёрнутом состоянии диалог отображается обычным, а не модифицированным.

Я был уверен, что кто-нибудь этот косяк заметит Smile Да, для этого придется сделать еще один виртуальный набор. Что-нибудь типа DIALOG_COPYMOVE_PINNED.
Avada wrote:
Я полагаю, это нужно прописать несколько подробнее, с рекомендациями по практическому обеспечению этой самой нужной загрузки. И хоть один примерчик изменения диалога для TC x64 хорошо бы в справку.

Про пример для x64 уже думал, пример по загрузке согласен, будет полезен. Добавлю.

#1251:  Author: FlasherLocation: Москва PostPosted: Sat Mar 02, 2019 13:04
    —
Loopback wrote:
В связи с этим думаю переименовать параметр /queuebtn в некий нейтральный, например /marker.
А как с этим связана кнопка очереди?
Loopback wrote:
А вот "по типам файлов" - это какой?
Он в настройках на странице "Правка/Просмотр".

#1252:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 02, 2019 15:54
    —
Flasher wrote:
А как с этим связана кнопка очереди?

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

#1253:  Author: rk2019Location: Moskov PostPosted: Sat Mar 02, 2019 19:55
    —
Loopback

На ру-боарде я оставлял запрос под ником radeonuser. Очень большая просьба вернуть узкие диалоги, какими они были до версии 8.01. Для меня главное чтобы этот возврат заработал в ТС 8.52а, так как версии 9.ХХ использовать не планирую ввиду их ещё большего ухода от классического вида и появлению ненужных опций, которые только загромождают ТС.

Слово "диалоги", я применил во множественном числе, но по факту речь идет о 2-х диалогах:
- диалог копирования
- диалог перемещения

P.S.:
Зададите вопрос - а нафига тебе 8.52а, сиди на своей 8.01 раз тебя всё устраивает?? Че мозги нам полощешь?
Отвечаю сразу:
8.01 и 7.57а меня вполне устраивают, но есть 2 бага, которые не дают жизни, которые в 8.52а не проявляются:
1) некоторые новые rar-архивы не открываются в 8.01 и 7.57а, а открывается только в 8.52а (подмена dll на новые ничего не дает, видимо фиксы в самом ехе-шнике)
2) в 8.52а более стабильный поиск. Эта версия реже крашится при поиске по тексту в файле в архивах большого размера

#1254:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 02, 2019 21:30
    —
rk2019 wrote:
На ру-боарде я оставлял запрос под ником radeonuser.

Это здесь уже поняли сразу без пояснений. Поэтому еще раз и больше ни разу: про "вернуть узкие диалоги" (а точнее — диалог копирования) в этой теме всё уже было сказано несколько раз, в том числе и разработчиком. Полный возврат узкого диалога невозможен. То, что реально можно сделать, в вашем распоряжении: изучайте информацию в теме и справку (один пример там дан), а затем приступайте к экспериментам с шириной окна и его составляющих.
Что вас не устраивает в новых версиях, здесь вряд ли кого-то заинтересует: это ваши проблемы. Но на специальное решение каких-то задач применительно к устаревшим версиям не надейтесь. И примите к сведению, что к глупостям про "опции, которые только загромождают TC" здесь отношение значительно менее лояльное, чем на ру-борде, так что как модератор этого форума продолжать изъясняться в таком стиле категорически не советую. Повторно надоедать одними и теми же запросами после получения ответа по существу — тоже.


Last edited by Avada on Sun Mar 03, 2019 07:50; edited 1 time in total

#1255:  Author: Loopback PostPosted: Sat Mar 02, 2019 23:49
    —
Flasher
Avada
Кстати да, различить, например, диалоги настройки WCX-плагинов и ассоциаций для внешнего просмотра я вообще не вижу как. Текст в формах дельфи, к большому сожалению, реализуется не элементом "static", как в Winapi, а графическим элементом (так же, как и кнопка прикрепления), соответственно, я не могу получить с него текст для фильтрации по тексту. Заголовок у них одинаковый и тоже не поможет. Как ни печально, с точки зрения плагина такие диалоги сейчас ничем не отличаются. Так что спасибо хоть где-то кнопки есть, к которым можно привязаться.

rk2019
Выше уже всё верно посоветовали. Берете последнюю версию плагина, в ней сейчас актуальная справка. Оттуда копируете пример для "/NARROW", вставляете в конфиг Autorun и пробуете. Если что-то не работает (а так наверняка и будет, т.к. в разных версиях тотала разные кнопки имеют разные номера экземпляров) - в своей версии 8.52а находите нужные имена классов и номера контролов (в справке указаны инструменты, которыми это удобно делать) и меняете по своему вкусу. Ограничений сейчас в принципе только два - это невозможность доступа к кнопке прикрепления после сужения диалога, и невозможность сужения комбобоксов в версии x64.

#1256:  Author: FlasherLocation: Москва PostPosted: Sun Mar 03, 2019 01:44
    —
Avada wrote:
Кнопка "Изменить" имеется в диалоге настройки внешних ассоциаций, но отсутствует в диалогах настройки WCX-плагинов и ассоциаций для внешнего просмотра.
Можно ещё по родительскому классу сравнивать.

Loopback wrote:
соответственно, я не могу получить с него текст для фильтрации по тексту.
А первую строку листбокса на предмет (нет) ты тоже не можешь считать?

#1257:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Mar 03, 2019 08:12
    —
Loopback
По поводу справки.
1. Свежая английская версия будет, полагаю, уже в новой полной версии Autorun?
2. В разделе "Стандартные плагины" описание MoveButton надо обновить.
3. В разделе "MoveOptionsButton" написано: "Если до запуска команды были добавлены элементы управления с помощью команд AddDialog и AddControl, то данная команда запускает процедуру ожидания диалогов с заданными параметрами. При этом все параметры игнорируются". Процедура запускается с параметрами, при этом параметры игнорируются... Как-то бы тут попонятнее изложить надо.
4. И мелочь в разделе про AddControl для этого плагина — опечатка в начале в слове "диалог".

#1258:  Author: Loopback PostPosted: Sun Mar 03, 2019 14:47
    —
Flasher wrote:
Можно ещё по родительскому классу сравнивать.

Кстати вот да, забыл еще про такую возможность. Позволит надежно отличить то, что открывается не из основного окна. Надо будет параметр добавить.
Flasher wrote:
А первую строку листбокса на предмет (нет) ты тоже не можешь считать?

Могу, а зачем? Эта строка во всех диалогах этого типа.

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

3 - да, тут еще есть простор для улучшения
2,4 - исправил

#1259:  Author: rk2019Location: Moskov PostPosted: Sun Mar 03, 2019 16:38
    —
Loopback wrote:
Flasher
rk2019
Оттуда копируете пример для "/NARROW", вставляете в конфиг Autorun и пробуете. Если что-то не работает (а так наверняка и будет, т.к. в разных версиях тотала разные кнопки имеют разные номера экземпляров) - в своей версии 8.52а находите нужные имена классов и номера контролов (в справке указаны инструменты, которыми это удобно делать) и меняете по своему вкусу. Ограничений сейчас в принципе только два - это невозможность доступа к кнопке прикрепления после сужения диалога, и невозможность сужения комбобоксов в версии x64.


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

Указываю ссылку на картинку так - на ру-боарде тема "Total Commander (часть 10) ", 43 страница, 1 пост сверху
Quote:

Поноценный узкий диалог возможен только на версии 8.01.
Версия 8.52а + новая версия movebutton_20190225.zip
По сути, недочеты чисто косметические, в 3-х местах

=== И ЗДЕСЬ ЗАВЕТНАЯ КАРТИНКА ===

#1260:  Author: FlasherLocation: Москва PostPosted: Sun Mar 03, 2019 18:14
    —
Loopback wrote:
Могу, а зачем? Эта строка во всех диалогах этого типа.
Выяснилось, что если в wcx-списке есть путь с пробелами, то (нет) уходит на нижеследующие строки, чего не скажешь о "По типам файлов...".
А по заголовку страницы (в TMyPanel) настроек ты не сможешь отличать?


Last edited by Flasher on Sun Mar 03, 2019 18:19; edited 1 time in total

#1261:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Mar 03, 2019 18:15
    —
rk2019
Как вижу, начался банальный флуд. Кем вас там считают, мне неинтересно, но вы, похоже, действительно начисто не понимаете смысл данных ответов. Суть проблемы вполне ясно излагалась словами без всяких картинок, которые абсолютно не нужны. Про все эти недочёты неоднократно сказано выше и мной, и разработчиком. А версия плагина от 25 февраля ни разу не последняя, после неё были ещё две (ссылки имеются в теме). То, что было на ру-бордовском скрине, проделывалось параметром /Narrow и никакой дальнейшей коррекции уже не поддаётся, а сейчас речь идёт про другую методику (прочитайте, в конце концов, справку плагина). Кобмобоксы можно регулировать в 32-битном TC параметрами плагина, а закрепляющей кнопки всё равно не будет.
Это всё. Самостоятельно (и никак иначе!) разбирайтесь с последней версией плагина в пределах его возможностей согласно рекомендациям (прочитав и поняв, наконец, написанное ранее), а в противном случае сидите на том, что есть. Подсказок, как легким движением руки вернуть вам безукоризненный узкий диалог, не ждите — их нет. Гонять по кругу свою "хотелку" хватит, бестолковые повторы будут просто удаляться без всяких дальнейших дисскуссий.

#1262:  Author: Loopback PostPosted: Sun Mar 03, 2019 19:30
    —
Flasher wrote:
Выяснилось, что если в wcx-списке есть путь с пробелами, то (нет) уходит на нижеследующие строки, чего не скажешь о "По типам файлов...".

Это как-то всё совсем ненадежно. Тут уходит, тут нет...

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

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

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

#1263:  Author: FlasherLocation: Москва PostPosted: Sun Mar 03, 2019 19:38
    —
Loopback
Я был и не стал предлагать заголовок страницы, если бы было надёжно.
Loopback wrote:
делают фактически одно и то же.
Если ширину и можно сделать одинаковой, то вот по высоте хотелось бы иметь разницу, т.к. длины списков оличаются существенно.
Loopback wrote:
Просто усилия для различения уже растут в прогрессии, и я все больше сомневаюсь в необходимости дальнейшего усложнения.
Ну, доп. параметр точно добавлять не надо, только обозвать по-новому два диалога.

#1264:  Author: Loopback PostPosted: Mon Mar 04, 2019 20:07
    —
Непонятно что с форумом произошло, добавил пост, а через 10 минут его уже нет. Повторяю.

Новая версия.

+ переделал фильтрацию диалогов, теперь дополнительные условия поиска (кроме класса диалога) задаются отдельной командой AddCondition
+ добавлено опциональное сохранение позиций и размеров диалогов
+ добавлен шаблон DIALOG_COPYMOVE_PINNED для закрепленного диалога

На данный момент это всё, больше хотелки не принимаю Smile Для поиска различий диалогов было сделано и так значительно больше, чем хотелось бы. Теперь только исправления, иначе до релиза дело никогда не дойдет.

С помощью нового фильтра те три диалога можно разделить так:

Code:

AddDialog /H:-30 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Плагины"
AddDialog /H:100 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Правка/Просмотр"
AddDialog /W:100 "TASSOCIATEDLG"


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

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

#1265:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 04, 2019 20:59
    —
Loopback
Есть некоторые проблемы. Если просто запустить 32-битную или 64-битную версию c использованием примера для учёта битности из новой справки, всё работает как должно. Но если, скажем, запустить 32-битную версию и потом перезапустить этим скриптом TC в 64-битном виде, все до единой команды после Else до самого конца (до MoveOptionsButton включительно) считаются, судя по сообщениям об ошибке, несуществующими, диалог не меняется. Если затем перезапустить TC тем же скриптом опять как 32-битный, вылетает теперь цепочка ошибок для 32-битного блока команд плюс MoveOptionsButton. Что тут можно сделать? От этой перезапускалки со сменой битности отказываться я не хочу, она очень удобная и до этого не подводила.

#1266:  Author: Loopback PostPosted: Mon Mar 04, 2019 21:48
    —
Avada
Хотя скрипт мягко говоря странный и не подразумевает использование нескольких окон TC одновременно, да и работает у меня криво (иногда закрывает предыдущий тотал, иногда нет), но описанной проблемы ни разу не возникло.

Это не то чтобы криво, он просто не работает с несколькими экземплярами TC.

#1267:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 04, 2019 22:59
    —
Loopback
Мне и не нужна его работа с несколькими экземплярами, мне достаточно переключать текущий экземпляр. (К тому же — за неимением лучшего.) А вот описанная проблема у меня проявляется в полный рост. Какие могут быть этому объяснения и что следует ещё посмотреть и проверить для уточнения?

#1268:  Author: Loopback PostPosted: Mon Mar 04, 2019 23:28
    —
Avada wrote:
считаются, судя по сообщениям об ошибке, несуществующими

Раз такие ошибки выдает, значит не загружается сам Мove_Button, и соответственно, все функции становятся нереализованными. Есть предположение, что в путях к MoveButton в конфиге есть переменные окружения. Поскольку при перезапуске через скрипт переменные окружения от изначально запущенной 32-битной версии будут унаследованы 64-битной версией (и наоборот при следующем перезапуске), вполне возможно, что они окажутся для нее неприемлемыми.

В стандартном конфиге используются относительные пути: LoadLibrary Plugins\Autorun_MoveButton.dll

Других возможных причин я пока не вижу.

#1269:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 04, 2019 23:37
    —
Loopback
Все пути к дочерним плагинам относительные, согласно образцу конфига, переменных там нет.
Сам плагин загружается строкой LoadLibrary Plugins\Autorun_MoveButton.dll.

#1270:  Author: Loopback PostPosted: Tue Mar 05, 2019 00:29
    —
Avada
Закинул тестовую версию, она должна выдавать сообщения с полным путём к загружаемой библиотеке перед ее загрузкой. Надо хоть посмотреть, что там получается по факту.

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

#1271:  Author: FlasherLocation: Москва PostPosted: Tue Mar 05, 2019 03:04
    —
Loopback
Ну, ты монстр! За /SAVE:<flags> расцеловать мало. 5 лет ждал! И отдельный респект за AddCondition!
Буду всё тщательно тестировать и подбирать. Потом свой вариант с комментами выложу.
Loopback wrote:
На данный момент это всё, больше хотелки не принимаю
Мм.. Забыл об одной важной вещи — ключ центрирования диалога (AddDialog) относительно родительского окна (хотя можно и главного ТС). Rolling Eyes

Avada
Скрипт не ждёт завершения. Добавь после 9-й строки:
Code:
WinWaitClose($title)
Sleep(40)


Last edited by Flasher on Tue Mar 05, 2019 09:40; edited 2 times in total

#1272:  Author: rk2019Location: Moskov PostPosted: Tue Mar 05, 2019 03:50
    —
Loopback

Если сделать диалоги копирования/перемещения узкими не получается через плагин Autorun_MoveButton.dll, то может их получится банально отредактировать ресурсхакером или другой программой умеющей корректировать ресурсы прямо в ехе-шнике???

#1273:  Author: FlasherLocation: Москва PostPosted: Tue Mar 05, 2019 05:55
    —
rk2019
Не получается или не пытались настроить, чтобы получилось (без крепёжной кнопки, разумеется)?
 Пример:


Loopback
Почему-то нижние чекбоксы не уменьшаются по ширине, разрывая правую границу группбокса.
И комбобокс списка перезаписи не всегда сокращается для DIALOG_COPYMOVE_POST, даже если экспериментировать в текущей сессии с одним объектом под курсором, нажав F5/F6 (+ кн. Опции) несколько раз.
Классическая тема семёрки, если это важно. Можно поправить?


Last edited by Flasher on Tue Mar 05, 2019 12:24; edited 1 time in total

#1274:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Mar 05, 2019 06:50
    —
rk2019
Правка экзешника TC на данном форуме не обсуждается вообще (независимо от её гипотетической результативности, которой в данном случае нет и быть не может). Получите предупреждение согласно пункту 5 правил форума. Да и в других местах на подобное "банальное редактирование" не надейтесь.
Об остальном сказано выше. Вам написали про действующую методику, а раз вы не хотите в ней разбираться (на это не наблюдается ни малейших намёков), то и обсуждать больше нечего. Прекращайте флуд.

Flasher
Коррекция скрипта помогла, спасибо.

Loopback
В обычной версии с исправленным скриптом (там по сравнению с указанным по ссылке ещё и пути, естественно, исправлялись) всё стало нормально. В тестовой версии отображается последовательная нормальная загрузка всех указанных в конфиге библиотек нужной битности.
Но есть одно "но". После коррекции скрипта с предыдущей (не тестовой) версией Autorun всё работает при применении скрипта правильно, пока запуск выполняется из стандартной рабочей папки TC (у меня это C:\Totalcmd\). Стоит папку TC с теми же настройками скопировать в другое место (например, D:\Totalcmd_921a\), как там при перезапуске со сменой битности начинается та же чехарда, что до правки скрипта. Но, что интересно, с тестовой версией Autorun появляются только сообщения о загрузке библиотек, ошибки не выводятся, диалог копирования изменяется правильно. Видимо, следует отметить, что в скрипте учтено и это предложение по модификации, а лежит он всегда в корне текущей папки TC.

#1275:  Author: Loopback PostPosted: Tue Mar 05, 2019 12:02
    —
Flasher wrote:
Мм.. Забыл об одной важной вещи — ключ центрирования диалога (AddDialog) относительно родительского окна (хотя можно и главного ТС).

Ок, вроде это несложно должно быть. Но в любом случае, если включить сохранение позиций, оно будет перекрывать эту настройку. И это последнее Very Happy

Flasher wrote:
Почему-то нижние чекбоксы не уменьшаются по ширине, разрывая правую границу группбокса.

Там класс "TCheckBox", а не "TMyCheckBox" должен быть.

Flasher wrote:
И комбобокс списка перезаписи не всегда сокращается для DIALOG_COPYMOVE_POST

Да, это я видел пару раз. Тут на самом деле довольно кривое место. Есть предположение, почему так получается: сейчас ожидается появление TCheckBox1 в групбоксе как индикатора, что произошло нажатие кнопки, сразу после этого выполняется перемещение. Вполне возможно, что комбобокс при создании появляется позже и перемещение успевает отработать до этого момента. Попробую поставить ожидание комбобокса вместо чекбокса. Можно и просто задержку, но это не самый лучший вариант, т.к. не подгонишь под производительность конкретного компьютера.

Avada
Хорошо, что заработало, но на самом деле все равно хотелось бы понять, почему вообще такая проблема возникает, когда Autorun запускается, но не загружает подплагин.

#1276:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Mar 05, 2019 12:08
    —
Loopback
Там дальше у меня была позднейшая дописка, когда заработало, а когда нет. Так что готов к дальнейшему обсуждению.

#1277:  Author: FlasherLocation: Москва PostPosted: Tue Mar 05, 2019 12:30
    —
Loopback wrote:
Но в любом случае, если включить сохранение позиций, оно будет перекрывать эту настройку. И это последнее
Я было подумал, что с /SAVE:4/8/12 центрирование будет происходить само собой, но что-то у меня вообще ничего не подхватывается:
Code:
# Сохранение высоты "Определить цвета для типов файлов":
AddDialog /SAVE:8 "TDlgCustomColors"
AddCondition /TEXT /VISIBLE:1 "Определить цвета для типов файлов"
# Сохранение размеров "Внутренние ассоциации":
AddDialog /SAVE:12 "TDlgCustomColors"
AddCondition /TEXT /VISIBLE:1 "Внутренние ассоциации"
# Увеличение и сохранение высоты "Добавить выделение":
AddDialog /H:200 /SAVE:8 "TCOMBOINPUT"
AddCondition /TEXT /VISIBLE:1 "Добавить выделение"
AddControl /H:200 "TMyListBox" 1
# Измение и сохранение высоты диалога "Фильтр...":
AddDialog /H:200 /SAVE:8 "TCOMBOINPUT"
AddCondition /TEXT /VISIBLE:1 "Total Commander"
AddControl /H:200 "TMyListBox" 1
# Сохранение размеров "Выбор команды":
AddDialog /SAVE:12 "TCmdSelForm"
# Сохранение размеров "Файловые ассоциации":
AddDialog /SAVE:12 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Плагины"
AddDialog /SAVE:12 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Правка/Просмотр"
AddDialog /SAVE:12 "TASSOCIATEDLG"
# Сохранение размеров "Плагины файловой системы"
AddDialog /SAVE:12 "TFsPluginConfigForm"
AddCondition /TEXT /VISIBLE:1 "Плагины файловой системы"
# Сохранение размеров "Плагины внутреннего просмотрщика"
AddDialog /SAVE:12 "TFsPluginConfigForm"
AddCondition /TEXT /VISIBLE:1 "Плагины внутреннего просмотрщика"
# Сохранение размеров "Информационные плагины"
AddDialog /SAVE:12 "TFsPluginConfigForm"
AddCondition /TEXT /VISIBLE:1 "Информационные плагины"
Что делаю не так?
Насчёт "последнее" — а больше и не надо. И так выше крыши. Very Happy
Главное, чтобы работало.

Loopback wrote:
Там класс "TCheckBox", а не "TMyCheckBox" должен быть.
Точно. Я наивно скопипастил класс у первого чекбокса. ) Спасибо. Исправил в сообщении — теперь порядок.
Add: Хотя нет... На относительно голом ТС работает, а на моём — нет, + отламывается TGroupBox. Sad
Loopback wrote:
Попробую поставить ожидание комбобокса вместо чекбокса.
ОК.

Loopback wrote:
все равно хотелось бы понять, почему вообще такая проблема возникает, когда Autorun запускается, но не загружает подплагин.
С этой проблемой сталкивался ещё в далёком 2011 и даже не надеялся, что без полноценного закрытия ТС это возможно исправить.

#1278:  Author: Loopback PostPosted: Tue Mar 05, 2019 13:09
    —
Avada wrote:
Но, что интересно, с тестовой версией Autorun появляются только сообщения о загрузке библиотек, ошибки не выводятся, диалог копирования изменяется правильно.

Причем в сообщениях, как я понимаю, правильные полные пути?

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

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

#1279:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Mar 05, 2019 13:15
    —
Loopback
Да, в сообщениях абсолютно правильные и полные пути. А идея о задержке приходила в голову и мне. Что, в скрипте для перезапуска надо задержку где-то попробовать увеличить? И почему эта карусель зависит от местоположения?

Со скриптом уже поигрался. Sleep(100) — нормально проходит первое переключение на x64 с 32-битного TC, но вылезают ошибки при возврате к прежней битности. Sleep(120) — вроде теперь всё нормально. Но буду ещё смотреть, в том числе на другой машине.


Last edited by Avada on Tue Mar 05, 2019 13:30; edited 1 time in total

#1280:  Author: Loopback PostPosted: Tue Mar 05, 2019 13:29
    —
Flasher wrote:
Я было подумал, что с /SAVE:4/8/12 центрирование будет происходить само собой

Нет, такого не предполагалось.
Flasher wrote:
Что делаю не так?

Ну как минимум, неправильно используешь функцию AddCondition Smile

Code:
AddCondition /TEXT /VISIBLE:1 "Определить цвета для типов файлов"


Во-первых, /TEXT и /VISIBLE: - вместе не используются. VISIBLE - это видимость контрола. Во-вторых, где класс/экземпляр контрола, для которого создается условие? Я так понимаю, ты здесь хочешь сравнить с текстом заголовка, тогда надо делать так:

Code:
AddCondition /TEXT "TDlgCustomColors" 0 "Определить цвета для типов файлов"


На самом деле, должно работать и с пустым именем класса:

Code:

AddCondition /TEXT "" 0 "Определить цвета для типов файлов"


Это надо документировать. Но "" 0 в любом случае останется, т.к. последовательность параметров.

Flasher wrote:
С этой проблемой сталкивался ещё в далёком 2011 и даже не надеялся, что без полноценного закрытия ТС это возможно исправить.

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

#1281:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Mar 05, 2019 13:31
    —
Loopback
Тут у меня опять существенное дополнение было...

#1282:  Author: Loopback PostPosted: Tue Mar 05, 2019 13:39
    —
Avada wrote:
И почему эта карусель зависит от местоположения?

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

Avada wrote:
Тогда прошу конкретных рекомендаций,

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

Дополнение видел, скорее всего да, зависимость от полной выгрузки (закрытие окна не означает полной выгрузки процесса).

#1283:  Author: FlasherLocation: Москва PostPosted: Tue Mar 05, 2019 14:08
    —
Loopback wrote:
Нет, такого не предполагалось.
Ясно. Жду опции.
Loopback wrote:
/TEXT и /VISIBLE: - вместе не используются.
ОК. Убрал везде /VISIBLE:1. Не обратил внимания на '|' в синтаксисе.
Loopback wrote:
Во-вторых, где класс/экземпляр контрола, для которого создается условие?
Посчитал, раз он задан в AddDialog, то повторно его писать не требуется в отличии от /PARENT.
Loopback wrote:
На самом деле, должно работать и с пустым именем класса:
Всюду добавил "" 0 после /TEXT — по нулям.
Loopback wrote:
Ну как минимум, неправильно используешь функцию AddCondition
Так в командах и твои примеры с TASSOCIATEDLG есть — не работает.
Loopback wrote:
Это надо документировать.
Это точно. Без подсказки бы не разобрался.

Loopback wrote:
закрытие окна не означает полной выгрузки процесса
Верно. Там нужен ProcessWaitClose. Вот упрощённый вариант.

#1284:  Author: Loopback PostPosted: Tue Mar 05, 2019 19:24
    —
Flasher wrote:
Посчитал, раз он задан в AddDialog, то повторно его писать не требуется в отличии от /PARENT.

В принципе правильно посчитал, но были недокументированные нюансы.
Flasher wrote:
Всюду добавил "" 0 после /TEXT — по нулям.

Да, тут была ошибка, причем в самом Autorun, из плагина не работали пустые параметры "" (до этого, похоже, такие нигде в плагинах не встречались). Так что выложу и исправленную версию Autorun.
Flasher wrote:
Так в командах и твои примеры с TASSOCIATEDLG есть — не работает.

У меня работали, но тут в перечислении диалогов была одна глупая ошибка, думаю после исправления все будет ок.
Flasher wrote:
Вот упрощённый вариант.

Примерно то, что и я бы написал. Хорошо, тогда я этим не занимаюсь.

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

Сегодняшняя версия.

+ добавлено центрирование диалогов
- исправил ошибку в коде различения диалогов
- определение нажатия на Опции путем обнаружения появления 3 экземпляра комбобокса, возможно, это улучшит стабильность

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

- исправлена работа с пустыми параметрами из субплагинов
+ добавлены многострочные комментарии #[ .. #].
+ добавлена функция таймера для проверки производительности

Многострочных комментариев мне давно не хватало, особенно остро это встало когда появилась куча AddDialog и т.д. Что-то я обязательно добавлю, но вот с форматом не уверен. Сейчас сделал #[ .. #], но как-то вводится не очень интуитивно. Думаю еще про вариант #{ #}, мне кажется немного лучше. Хотя можно и как в Autoit #cs #ce.

#1285:  Author: FlasherLocation: Москва PostPosted: Tue Mar 05, 2019 21:14
    —
Loopback
Да, теперь всё заработало. Комбобокс теперь тоже не глючит. Проверил на нескольких диалогах с добавкой центрирования. Всё просто потрясно! Smile
Кнопки в "Добавить выделение/Фильтр..." перемещу — и всё супер будет.
И всё-таки один диалог таки сбрасывается после использования Win+Left/Right:
Code:
# Сохранение размеров "Выбор команды":
AddDialog /CENTER:3 /SAVE:12 "TCmdSelForm"

И не очень понял:
Quote:
Если окно открывается из главного окна Total Commander, то при использовании флага 4 диалог будет отцентрирован относительно «Рабочего стола».
Разве это логично? ТС же остаётся родителем. Просто интересуюсь, т.к. меня более чем устраивает центровка относительно главного окна по /CENTER:3.

#1286:  Author: Loopback PostPosted: Tue Mar 05, 2019 21:41
    —
Flasher wrote:
Разве это логично?

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

#1287:  Author: FlasherLocation: Москва PostPosted: Tue Mar 05, 2019 22:05
    —
Loopback wrote:
а родительским к главному окну - десктоп.
Почему к главному-то, если должно быть к диалогу?

Что по глюку с "Выбор команды"?

#1288:  Author: Loopback PostPosted: Tue Mar 05, 2019 22:42
    —
Flasher wrote:
Почему к главному-то, если должно быть к диалогу?

Ну ок, соглашусь, если смотреть чисто по структуре может не очень логично. Просто иначе использование 4 для диалогов из главного окна вообще ничего не дает. А так какая-то смысловая нагрузка. Могу и убрать.
Code:

Desktop
  - Total Commander
    - Dialog1
    - Options
      - Dialog2

Dialog1 без ключа 4 центрируется относительно Total Commander
Dialog1 с ключом 4 центрируется относительно Desktop
Dialog2 без ключа 4 центрируется относительно Total Commander
Dialog2 с ключом 4 центрируется относительно Options

Flasher wrote:
Что по глюку с "Выбор команды"?

Пропустил, слишком много сегодня писанины. Скорее всего потому, что его позиция сохраняется самим тоталом.

А Win+Left/Right у меня ничего не делают вообще.

#1289:  Author: rk2019Location: Moskov PostPosted: Wed Mar 06, 2019 01:41
    —
Loopback

Вроде говорили что все исправимо, а у меня получается криво.


Posted after 15 minutes:

Я понимаю что 2 человека в этой ветке понимают, но может и остальным расскажите в какой файл эти строки ложить надо??

Code:
AddDialog /W:-70 "DIALOG_COPYMOVE"
# Первый выпадающий список:
AddControl /W:-64 "TMyComboBox" 2
# Второй выпадающий список:
AddControl /W:-72 "TMyComboBox" 1
# Кнопка-флажок "С проверкой MD5":
AddControl /X:-67 "TMyCheckBox" 1


Перечитал хелп, но нет основного - куда блин это вписать?

#1290:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 03:31
    —
Loopback wrote:
Просто иначе использование 4 для диалогов из главного окна вообще ничего не дает.
Как же не даёт? Оно будет сохранять, что важно, привязку к окнам ТС:
Code:
Dialog1/2 без ключа 4 центрируется относительно Total Commander

Dialog1 с ключом 4 центрируется относительно Total Commander
Dialog2 с ключом 4 центрируется относительно Options

Loopback wrote:
Скорее всего потому, что его позиция сохраняется самим тоталом.
И это не обойти (ожиданием отрисовки, например)? Дело в том, что ТС сам не запоминает размер и позицию с флагом развёрнутости.

Loopback wrote:
А Win+Left/Right у меня ничего не делают вообще.
А должны, если у тебя Win7+, и ты их в реестре не заблокировал параметром:
Code:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\DisabledHotkeys
По умолчанию с данными хоткеями активное окно заполняет левую/правую половину экрана. В системной справке это именуется как "Развертывание окна до левого/правого края экрана". С "Выбор команды" это иногда удобно, так как при достаточности ширины ты можешь наблюдать за интересующими объектами в видимой панели.


rk2019 wrote:
Вроде говорили что все исправимо, а у меня получается криво.
Разве мой пример с учётом всех последних правок плагина даёт такой результат? Очевидно, что нет.
rk2019 wrote:
Я понимаю что 2 человека в этой ветке понимают, но может и остальным расскажите в какой файл эти строки ложить надо??
Ну, как минимум, 3, и то, потому, что обсуждают. Остальные смыслящие тихо, как это чаще бывает, ждут развязки.
В справке "help_ru.chm" на странице "Установка" (не говоря уж про десятки страниц топика) о каком файле идёт речь?
Вы как пришли к результату на скриншоте без правки этого файла? А других файлов настройки у плагина Autorun нет.
И надо понимать, что ценность имеют не только приведённые строки.

#1291:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Mar 06, 2019 07:09
    —
Flasher
По поводу последних рекоменаций для rk2019. Он пытается подогнать это для 8,52a, где могут отличаться контролы ( я не проверял). Хотя сомневаюсь, что при таком уровне внимательности вообще что-то удастся объяснить.

rk2019
Про дурацкую манеру внедрять в картинки совершенно неуместный там текст речь шла ещё на ру-борде. Извольте картинки и текст давать по отдельности. А перед демонстрацией того, что получается, обычно внятно поясняют, что конкретно сделано. Результат на картинке соответствует всё тому же применению параметра /Narrow, а не новой методике. А как это нормально должно выглядеть (хотя и без запирающей кнопки) показано в следующем посте. Разница видна?
И многократно говорилось, что в данном конкретном случае не всё исправимо (перечитайте хотя бы мои сообщения).
А записываются все нужные строки в конфиг плагина, естественно, после строки LoadLibrary Plugins\Autorun_MoveButton.dll
И для общего развития — слова "ложить" в русском языке нет.


Last edited by Avada on Wed Mar 06, 2019 12:16; edited 1 time in total

#1292:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 07:24
    —
Avada wrote:
где могут отличаться контролы
Есть. Один верхний. Раньше было поле TAltEdit, теперь там выпадающий список TMyComboBox с тем же размером. Остальное неизменно.
Avada wrote:
что в данном конкретном случае не всё исправимо
Ты про комбобоксы для x64? А rk2019 где-либо обозначил битность системы (на своём маленьком квадратном мониторе)?

#1293:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Mar 06, 2019 10:04
    —
Flasher
Да, я про комбобоксы для x64. А про битность он нигде ни единого слова не сказал. Я предполагаю 32-битный TC — тем более, что на новые версии он переходил с 7.57a, где заведомо x64 не было (но зато был, как и в 8.0x, узкий диалог копирования с двухрядными кнопками по умолчанию).

#1294:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 10:50
    —
Avada
Я тоже думаю, что 32-х. Поэтому мысль о комбобоксах сперва отпала.

Двухрядными, конечно, те кнопки не назвать. Всё-таки "Опции" была на другом ярусе.

#1295:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Mar 06, 2019 11:30
    —
Flasher
Что ярусы, что ряды — назови как угодно, всё одно кнопка "Опции" была во второй строке слева, и от этого многим очень хотелось избавиться.

#1296:  Author: rk2019Location: Moskov PostPosted: Wed Mar 06, 2019 11:31
    —
Flasher wrote:

В справке "help_ru.chm" на странице "Установка" (не говоря уж про десятки страниц топика) о каком файле идёт речь?
Вы как пришли к результату на скриншоте без правки этого файла? А других файлов настройки у плагина Autorun нет.
И надо понимать, что ценность имеют не только приведённые строки.


Для загрузки плагина в autorun.cfg есть 2 строки
Code:
LoadLibrary Plugins\Autorun_MoveButton.dll
MoveOptionsButton MOVE_LEGACY /NARROW


Этого достаточно для получения того вида диалога, котрый выложил скриншотом.

Дальнейшее дописование в autorun.cfg целой кипы строк

Code:
AddDialog /W:-70 "DIALOG_COPYMOVE"
# Первый выпадающий список:
AddControl /W:-64 "TMyComboBox" 2
# Второй выпадающий список:
AddControl /W:-72 "TMyComboBox" 1

---- УРЕЗАЛ КУЧУ СТРОК-----

# Кнопки-флажки в блоке доп. настроек:
AddControl /W:-67 "TCheckBox" 1
AddControl /W:-67 "TCheckBox" 2
AddControl /W:-67 "TCheckBox" 3
MoveOptionsButton


в autorun.cfg вид этого диалога не меняет, от слова совсем.

Поэтому я предположил, что эти настройки нужно ложить в какой-то другой файл.

#1297:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 11:38
    —
rk2019 wrote:
Этого достаточно для получения того вида диалога, котрый выложил скриншотом.
Внимательно читаем в справке, что написано на странице MoveOptionsButton.

#1298:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Mar 06, 2019 11:49
    —
rk2019
В дополнение к сказанному выше: MoveOptionsButton MOVE_LEGACY /NARROW — это дублирование двух параметров со сходной функциональностью (совсем старого и более нового). Наглядно продемонстрировано, что создавший эту строку не понимает (от слова совсем), что и зачем делает. Такую связку не советовал нигде никто. И "дальнейшее дописывание" чего-то после этой строки (а не вместо неё) никто нигде не предлагал. Даже в приведённых обрывках кода видно, что в этом длинном наборе строк последняя — MoveOptionsButton без параметров. (И в справке в разделе "О плагине" это сказано прямо и показано во всех примерах.) Дубль с параметрами в этом случае не просто ненужен, но и вреден.

#1299:  Author: BeTePLocation: Санкт-Петербург PostPosted: Wed Mar 06, 2019 13:30
    —
Flasher, Avada.

Не в защиту rk2019, а справедливости ради.

Если я правильно понял rk2019, он пытается использовать плагин в ТС 8.52а.
Я вчера пытался экспериментировать с ТС 8.52а и там действительно плагин работает не корректно. Получается именно то, о чём говорит rk2019.
 Hidden text

Если есть желание, то Вы и сами можете в этом убедиться установив ТС 8.52а и применив конфиг, который прекрасно работает на ТС 9.21а. Например тот, который приведён в справке:
 Конфиг

#1300:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 13:49
    —
BeTeP
Нет смысла убеждаться, есть смысл включить внимание. Выше я указывал на изменённый контрол, а Avada c Loopback выяснили, что комбобоксы можно урезонить только на TC x32. Вот в этом можно убедиться самостоятельно.

#1301:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Mar 06, 2019 13:56
    —
BeTeP
Сразу же говорили и несколько раз потом повторяли (нетрудно найти и убедиться), что под свои нужды надо доводить базовые настройки до ума самостоятельно. И было бы очень странно, если в современной справке плагина примером приводилась бы адаптация к изрядно устаревшей версии TC, не правда ли?
Проверять всё это я на 8.52a не буду, хотя он у меня и установлен. Я и так потратил достаточно много времени на дискуссию по этой "хотелке" сначала на ру-борде, а затем здесь, не имея в ней сам никакой особой надобности. Вам это сужение диалога, насколько понимаю, интересно обоим, так что достигайте взаимопонимания, я не против. Только очень желательно, чтобы всё прояснилось за минимальное число постов без вреда для основного обсуждения.

Flasher
Справедливости ради замечу, что тестированием комбобоксов на x64 я не занимался, доверяя суждениям разработчика и признав его выводы бесспорным фактом.

#1302:  Author: Loopback PostPosted: Wed Mar 06, 2019 14:03
    —
Flasher wrote:
И это не обойти (ожиданием отрисовки, например)?

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

Flasher wrote:
А должны, если у тебя Win7+, и ты их в реестре не заблокировал параметром

Параметра нет, но я вспомнил о чем это - есть такая хрень как "автоматическое упорядочивание окон при приближении к границам экрана", наверно самая бесящая функция, которую я отключаю сразу после установки системы Very Happy

Flasher
Avada
Кстати, а ведь теперь с учетом вчерашних изменений в плагине, rk2019 не сможет вернуть желаемый вид на той версии тотала, даже если захочет, т.к. теперь отслеживание нажатия производится по 3-м комбобоксам, а в той версии вместо одного из них TAltEdit. Адаптировать плагин под древнюю версию тотала я, конечно, не буду, но позавчерашнаяя еще подойдет.

rk2019
В связи с вышесказанным, ваша версия плагина от 4 марта.

Ниже пример из справки, с двумя измененными контролами под 8.52а. Код для 32-битной версии, для 64 используется стандартная обработка, поскольку вручную лучше ее все равно не сделаешь.
Code:

LoadLibrary Plugins\Autorun_MoveButton.dll
If %AUTORUN_TCARCH% = 32 Then

AddDialog /X:58 /W:-116 DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "TButton" 2
AddControl /X:-93 /Y:-74 /W:-20 "TButton" 3
AddControl /X:-116 /Y:1 "TButton" 1
AddControl /W:-116 "TMyComboBox" 1
AddControl /W:-114 "TAltEdit" 1
AddControl /X:-111 "TMyCheckBox" 1
AddControl /W:-101 "TMyCheckBox" 3
AddControl /W:-114 "TMyGroupBox" 1

AddDialog DIALOG_COPYMOVE_POST
AddControl /W:-114 "TMyComboBox" 1
AddControl /W:-114 "TCheckBox" 1
AddControl /W:-114 "TCheckBox" 2
AddControl /W:-114 "TCheckBox" 3

AddDialog /X:58 /W:-116 DIALOG_COPYMOVE_PINNED
AddControl /W:-113 "TMyGroupBox" 1
AddControl /W:-113 "TMyComboBox" 1
AddControl /W:-116 "TMyComboBox" 2
AddControl /W:-113 "TAltEdit" 1
AddControl /X:-116 /Y:1 "TButton" 1
AddControl /X:-110 "TMyCheckBox" 1
AddControl /W:-113 "TCheckBox" 1
AddControl /W:-113 "TCheckBox" 2
AddControl /W:-113 "TCheckBox" 3
MoveOptionsButton
Else
MoveOptionsButton /NARROW
Endif

#1303:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 14:14
    —
Loopback
Опция ожидания в самый раз, тем более, что она нужна далеко не везде. Добавь, пож-та. Насчёт результирующей работы было и так понятно. Вопрос лишь в том, чего ждать: окна (типа WinWait), его активации (типа WinWaitActive) или флага развёрнутости в момент формирования.
Loopback wrote:
но я вспомнил о чем это - есть такая хрень как "автоматическое упорядочивание окон при приближении к границам экрана", наверно самая бесящая функция, которую я отключаю сразу после установки системы
Это не то. На 7-ке этой фичи нет, есть только сторонняя приблуда AquaSnap (довольно глючная, почти ей не пользовался). Но, судя по всему, ты отключил не только её. Wink
Loopback wrote:
т.к. теперь отслеживание нажатия производится по 3-м комбобоксам, а в той версии вместо одного из них TAltEdit.
Я об этом, если ты не заметил, уже дважды написал.

#1304:  Author: Loopback PostPosted: Wed Mar 06, 2019 15:09
    —
Flasher wrote:
Вопрос лишь в том, чего ждать

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

Flasher wrote:
На 7-ке этой фичи нет

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

Flasher wrote:
Я об этом, если ты не заметил, уже дважды написал.

Ты писал про TAltEdit, а я про непригодность вчерашней версии для старых версий Тотала.

#1305:  Author: FlasherLocation: Москва PostPosted: Wed Mar 06, 2019 15:26
    —
Loopback wrote:
с настраиваемой задержкой после открытия окна
ОК. Пусть будет задержка.
Loopback wrote:
Таки что-то есть, если не отключать опцию "автоматическое упорядочивание..."
Понял, о чём ты. Да, у меня не отключена опция в Центре спец. возможностей. Не мешает абсолютно, т.к. окна мышью, тем более к краям экрана, не двигаю за ненадобностью.
Loopback wrote:
Ты писал про TAltEdit, а я про непригодность вчерашней версии для старых версий Тотала.
Почему версия-то непригодна (имеется в виду без /NARROW)? Другое дело, команды, приведённые в хелпе, - сие больше к ремарке Avada о самостоятельной правке.

#1306:  Author: Loopback PostPosted: Wed Mar 06, 2019 21:25
    —
Новая версия.

+ добавлен параметр /WAIT:<ms>
+ уборка файла Autorun_MoveButton.pos от неиспользуемых секций


Flasher wrote:
Почему версия-то непригодна

Ну я имел в виду для него. Режим без /NARROW работать будет, конечно.

#1307:  Author: rk2019Location: Moskov PostPosted: Thu Mar 07, 2019 01:54
    —
Loopback

Спасибо! Теперь действительно то, что хотелось!

Коротенький мануал, для тех кто захочет получить такие диалоги копирования/перемещения на ТС 8.52а.

Сразу предупреждаю, ТС 9.ХХ я не приемлю ввиду растянутого шага в списке файлов + замене иконок под закос стиля Вин 10. Короче такой ТС в топку - последняя адекватная версия 8.52а с классическим видом.



Для получения таких диалогов, нужно установить:
1) ТС 8.52а
2) wdx_autorun_2.0.4.zip с хитрой процедурой запуска через Цветовые схемы, в описании плагина есть процедура установки
3) movebutton_20190304.zip - именно эту версию, с более новой будет работать некорректно
4) в autorun.cfg добавить строки
Code:

# Enables MoveButton functionality
# Включает функционал MoveButton
LoadLibrary Plugins\Autorun_MoveButton.dll
If %AUTORUN_TCARCH% = 32 Then

AddDialog /X:58 /W:-116 DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "TButton" 2
AddControl /X:-93 /Y:-74 /W:-20 "TButton" 3
AddControl /X:-116 /Y:1 "TButton" 1
AddControl /W:-116 "TMyComboBox" 1
AddControl /W:-114 "TAltEdit" 1
AddControl /X:-111 "TMyCheckBox" 1
AddControl /W:-101 "TMyCheckBox" 3
AddControl /W:-114 "TMyGroupBox" 1

AddDialog DIALOG_COPYMOVE_POST
AddControl /W:-114 "TMyComboBox" 1
AddControl /W:-114 "TCheckBox" 1
AddControl /W:-114 "TCheckBox" 2
AddControl /W:-114 "TCheckBox" 3

AddDialog /X:58 /W:-116 DIALOG_COPYMOVE_PINNED
AddControl /W:-113 "TMyGroupBox" 1
AddControl /W:-113 "TMyComboBox" 1
AddControl /W:-116 "TMyComboBox" 2
AddControl /W:-113 "TAltEdit" 1
AddControl /X:-116 /Y:1 "TButton" 1
AddControl /X:-110 "TMyCheckBox" 1
AddControl /W:-113 "TCheckBox" 1
AddControl /W:-113 "TCheckBox" 2
AddControl /W:-113 "TCheckBox" 3
MoveOptionsButton
Else
MoveOptionsButton /NARROW
Endif


В итоге должны получить диалоги, как на скриншоте.

#1308:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 02:44
    —
Loopback wrote:
+ добавлен параметр /WAIT:<ms>
Аж 2 секунды поставил — нет результата.
Code:
# Сохранение размера и позиции "Выбор команды"
AddDialog /WAIT:2000 /SAVE:15 "TCmdSelForm"
Может, ты сделал задержку не до момента изменения окна из запомненных данных, а до момента сохранения в Autorun_MoveButton.pos?
И что сулит такое запоминание при переходе на мониторы с меньшим разрешением? Тут нет автоподгонки под края экрана? Не лучше сделать в процентах от него?
И раз сам ТС запоминает восстановленное окно, можно сделать чтобы /WAIT срабатывала только при развёрнутом варианте (высота окна >= высоте экрана)?

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

И что там по хотелке? Не хотелось бы релиза без неё. Rolling Eyes


rk2019 wrote:
Сразу предупреждаю, ТС 9.ХХ я не приемлю ввиду растянутого шага в списке файлов + замене иконок под закос стиля Вин 10. Короче такой ТС в топку - последняя адекватная версия 8.52а с классическим видом.
Если рассматривать степень адекватности ФМ только по иконкам (а даже не убитым 3D-границам в тулбаре и увеличенным дисковым кнопкам с результирующими жалобами и здесь и на оффоруме), которые меняются на раз, то такое мнение всерьёз воспринимать тут никто не будет, при том сколько исправлений кучи всего было сделано в новых версиях, не говоря уже о добавке давно ожидаемых и весьма полезных опций. Да и растянутый шаг в файловых панелях при одинаковом шрифте никто здесь пока также не наблюдал.

Last edited by Flasher on Thu Mar 07, 2019 12:48; edited 1 time in total

#1309:  Author: Loopback PostPosted: Thu Mar 07, 2019 11:36
    —
Flasher wrote:
Аж 2 секунды поставил — нет результата.

Не знаю, может мы разные результаты ожидали? Без ожидания окно расширенное командами Win-Left/Right свой размер после закрытия/открытия теряло, теперь к нему возвращается.

Flasher wrote:
Может, ты сделал задержку не до момента изменения окна из запомненных данных, а до момента сохранения в Autorun_MoveButton.pos?

Задержка сделана от момента появления окна. Т.е. для этого окна перемещение кнопок, восстановление позиции и центрирование (в этом порядке) производится через заданное количество мс после появления окна.
Flasher wrote:
И что сулит такое запоминание при переходе на мониторы с меньшим разрешением? Тут нет автоподгонки под края экрана? Не лучше сделать в процентах от него?

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

Flasher wrote:
Кстати, ты не хочешь в хелп мой пример с выравненными под оптимальную ширину кнопками добавить?
Хотя у Гислера этот момент не регламентирован, разница ширин кнопок гуляет в разных диалогах в диапазоне из десятка-другого пикселей.

Могу и добавить, мне не жалко Very Happy Только комментарии надо будет под английскую версию переводить.
А кнопки у Гислера гуляют, это да. У него эстетика всегда на втором месте после функционала. И в принципе меня это устраивает.

Flasher wrote:
И что там по хотелке? Не хотелось бы релиза без неё.

Это другой плагин, какое отношение он имеет к MoveButton? Чем раньше MoveButton уйдет в релиз, тем раньше будет шанс заняться тем.

#1310:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 11:50
    —
Loopback wrote:
Не знаю, может мы разные результаты ожидали?
Нет. После Win+Left/Right позиция и размеры окна "Выбор команды" после закрытия по Esc не запоминаются. Напомню, что тема на x86 7-ке классическая.
Loopback wrote:
Нет, это уже избыточно.
А что сложного в процентной реализации /SAVE? Вроде математика простая. Зачем нам геморрой с диалогами, растянутыми за пределы экрана?
Глянь ещё дописку со слов "И раз сам ТС".

Loopback wrote:
Только комментарии надо будет под английскую версию переводить.
В хелпе примеры вообще без комментариев. Их можно убрать.

Loopback wrote:
Это другой плагин, какое отношение он имеет к MoveButton?
Ну, это же дочерние плагины, которые идут в архиве и релизе (на wincmd.ru) главного, а не отдельно. Я думал, ты про релиз Autorun писал.

Last edited by Flasher on Thu Mar 07, 2019 12:47; edited 1 time in total

#1311:  Author: Loopback PostPosted: Thu Mar 07, 2019 12:18
    —
Flasher wrote:
Нет. После Win+Left/Right позиция и размеры окна "Выбор команды" после закрытия по Esc не запоминаются. Напомню, что тема на x86 7-ке классическая.

У меня запоминается и воспроизводится. Тема классическая на 7. Код такой:
Code:

AddDialog /SAVE:15 /WAIT:50 "TCmdSelForm"

Flasher wrote:
А что сложного в процентной реализации /SAVE? Вроде математика простая.

Дело не в сложности, а в неправильности такого подхода. Т.е. вроде сохранение, а вроде и нет, т.к. воспроизводится на разных экранах всё по разному. Если тебя смущают именно окна, ушедшие за пределы экрана, можно в таких случаях их изменять так, чтобы они полностью помещались в экран. Но не более того.
Flasher wrote:
И раз сам ТС

Нет, слишком муторно.
Flasher wrote:
Я думал, ты про релиз Autorun писал.

Про Autorun. Ну будет сейчас к примеру 2.05, а тот плагин в релизе 2.06 или 2.09 или еще в каком. Не вижу проблем.

#1312:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Mar 07, 2019 12:33
    —
Loopback
Кстати, к вопросу об эстетике и её значении для Гислера. В справке был бы, ИМХО, уместен (помимо существующих) ещё и примерчик того, как в диалоге создания нового файла (Shift+F4) отобразить кнопку "Дерево" не ДО кнопки OK (как сейчас), а ПОСЛЕ. Это компоновочный глюк из серии особо вопиющих.

#1313:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 12:33
    —
Loopback wrote:
У меня запоминается и воспроизводится.
Прошу прощения. Я не тот конфиг правил. Теперь убедился в работоспособности. Smile

Loopback wrote:
т.к. воспроизводится на разных экранах всё по разному.
В смысле? По-разному в процентном соотношении как раз сейчас. А с процентами будет соответствие размерам экрана. Но есть и более оптимальный вариант. Запоминать пиксели в секциях разрешений аля [1024x768 (10x20)] и [AllResolutions], как это реализовано в wincmd.ini.

Loopback wrote:
Нет, слишком муторно.
Но это ведь позволит не дёргать окно с ожиданием, когда это не требуется. Узнать высоту экрана и сравнить с запомненной — это же самое простое.
Можно сделать /WAIT:<ms>[:H] или добавить /WAITH:<ms>.

Loopback wrote:
Не вижу проблем.
Я к тому, что ты приступил к реализации в обратной последовательности запросов. Ожидалось, что всё по меньшей мере пойдёт в совокупности.
Это, конечно, не катастрофа. Делай, как тебе удобней.


Last edited by Flasher on Thu Mar 07, 2019 13:42; edited 2 times in total

#1314:  Author: Loopback PostPosted: Thu Mar 07, 2019 13:20
    —
Flasher wrote:
По-разному в процентном соотношении как раз сейчас.

Так это функция сохранения позиции и размера. "Процентные соотношения" тут вообще никаким боком.

Flasher wrote:
А с процентами будет соответствие размерам экрана. Но есть и более оптимальный вариант. Запонимать пиксели в секциях разрешений аля [1024x768 (10x20)], как это реализовано в wincmd.ini.

Ага, давай второй тотал напишем еще Very Happy

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

Flasher wrote:
Но это ведь позволит не дёргать окно с ожиданием, когда это не требуется. Узнать высоту экрана и сравнить запомненной — это же самое простое.

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

PS: Более того, тут высота окна не равна высоте экрана.

Flasher wrote:
Ожидалось, что всё по меньшей мере пойдёт в совокупности.

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

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

#1315:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 13:33
    —
Loopback wrote:
Но со всеми вытекающими минусами такого подхода, в виде плодящихся секций.
Не думаю, что мы заметим эти минусы. Конфиг API-шной функцией читается быстро. Вон ТСFS2 (и не только) с большущим конфигом летает будь здоров. А тут будет в десятки раз меньше секций.
Loopback wrote:
будет работать исключительно в граничных условиях с этим окошком.
Почему это? Я же написал:
Flasher wrote:
Можно сделать /WAIT:<ms>[:H] или добавить /WAITH:<ms>.
Т.е. это сугубо опциональная вещь.
Loopback wrote:
Более того, тут высота окна не равна высоте экрана.
Поэтому я написал:
Flasher wrote:
(высота окна >= высоте экрана)


Loopback wrote:
Писать разные вещи параллельно очень неудобно.
Поэтому я и пишу:
Flasher wrote:
Это, конечно, не катастрофа. Делай, как тебе удобней.

Loopback wrote:
Я уже писал, что лично мне он давно не особенно интересен.
Жаль. Sad
Loopback wrote:
Единственное что хотелось - его поправить и забыть. А во что это вылилось.
Осталось совсем чуть-чуть. Потерпи немного, друже. Уже и так много добра сделал. Smile

#1316:  Author: Loopback PostPosted: Thu Mar 07, 2019 13:55
    —
Flasher wrote:
Не думаю, что мы заметим эти минусы.


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

Flasher wrote:
(высота окна >= высоте экрана)

Она здесь не больше, а меньше.

И вообще, в чем проблема-то? Если окно неразвернутое, то его координаты будут и в тотале, и в плагине одинаковые. Соответственно и плагин визуально ничего дополнительно не двигает. Зачем огород городить?

Flasher wrote:
Осталось совсем чуть-чуть.

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

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

#1317:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 14:24
    —
Loopback wrote:
но в определенных условиях (виртуальные машины к примеру) количество секций будет разрастаться прилично.
Виртуальные нужны для тестов, а не повседневки. В последнем случае всё будет ограничиваться 2-3-мя (ну, может, 4-мя) секциями расширений. Только судя по тому, что идентификаторы окон (кстати, что это?) прописаны сейчас как названия секций, их придётся встраивать в имена ключей. Или переделать в XML. Ну, тебе виднее.

Loopback wrote:
Зачем огород городить?
ОК. Убедил.

Loopback wrote:
Если это не прервать, процесс будет бесконечен.
Не будет. Уверяю. Окна в целом все я просмотрел. Никаких особых моментов больше не наблюдаю. По крайней мере в ближайшей перспективе их не будет.

#1318:  Author: Loopback PostPosted: Thu Mar 07, 2019 14:43
    —
Flasher wrote:
Виртуальные нужны для тестов, а не повседневки.

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

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

Loopback wrote:
ОК. Убедил.

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

Flasher wrote:
Не будет. Уверяю.

Это радует Wink

#1319:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 14:50
    —
Loopback wrote:
По количеству секций там может быть и больше, т.к. в виртуалке может быть любое разрешение экрана.
Мм.. А если проверять на виртуальность и игнорировать?
P.S.: Я ещё xml выше предлагал.
Loopback wrote:
Но проблема в самом деле гипотетическая, в крайнем случае всегда можно снести pos-файл и начать заново.
Т.е. плагин будет сносить файл как только выяснит, что разрешение не соответствует предыдущему? Но тогда при возрате на предыдущее разрешение окно под него не восстановится.

Loopback wrote:
Это, кстати, для любых ситуаций будет правильно.
Согласен. Оптимальное решение.

#1320:  Author: Loopback PostPosted: Thu Mar 07, 2019 15:11
    —
Flasher wrote:
Мм.. А если проверять на виртуальность и игнорировать? P.S.: Я ещё xml выше предлагал.

Да не, ни к чему это, для этой задачи ini вполне достаточно.

Идентификаторы это хэш от строки, включающей имя класса и все условия.

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

Нет, конечно, снос файла оставим пользователю Smile Если он вдруг решит, что накопилось слишком много.

#1321:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 15:19
    —
Loopback wrote:
Да не, ни к чему это, для этой задачи ini вполне достаточно.
А как это будет выглядеть?
Сейчас:
Code:
[8449BB92]
Ver=32
Left=599
Top=394
Width=715
Height=380

В новой варианте:
Code:
[1024x600 (8x16)]
8449BB92_Ver=30
8449BB92_Left=500
8449BB92_Top=300
8449BB92_Width=700
8449BB92_Height=300

[1024x768 (10x20)]
8449BB92_Ver=32
8449BB92_Left=599
8449BB92_Top=394
8449BB92_Width=715
8449BB92_Height=380

[LastResolution]
Res=1024x600 (8x16)
Res будет указывать на секцию с последним разрешением, если секция с текущим будет отсутствовать.
Так?

Loopback wrote:
Идентификаторы это хэш от строки, включающей имя класса и все условия.
Удобно закомуфлировал. Smile

#1322:  Author: Loopback PostPosted: Thu Mar 07, 2019 15:33
    —
Flasher wrote:
Удобно закомуфлировал.

Ага. Но главное работает быстро.

Предполагаю как-то так:
[8449BB92]
Version=32
Screen=1024x768
Left=500
Top=300
Width=700
Height=300

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

#1323:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 15:44
    —
Loopback wrote:
Хэш для разных разрешений будет разный.
Хм. Т.е., как ни крути, получается либо много хэш-ключей в секциях разрешений либо много хэш-секций. Т.е. без разницы. ОК.
Но LastResolution при отсутствии всё равно нужен. И, конечно, уменьшение и/или сдвиг до границ экрана при выходе за них, что ты изначально предлагал.

Loopback wrote:
(для этого и Version)
А как ты будешь узнавать, в какой секции её искать?

#1324:  Author: Loopback PostPosted: Thu Mar 07, 2019 16:05
    —
Flasher wrote:
Но LastResolution при отсутствии всё равно нужен.

А вот нужен ли? Лучше пусть эту работу тотал сделает. Если плагин ничего не будет двигать под новым разрешением, тотал сам уменьшит размер окна так, чтобы оно уместилось.

#1325:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 16:13
    —
Loopback wrote:
А вот нужен ли?
Да. Т.к. дело не в "уместилось", а в исходном увеличении некоторых диалогов без необходимости снова дёргать за их границы. Тем более, что у нас есть /CENTER.

А насколько целесообразно здесь учитывать размер шрифтов, как в ТС?
Структура файла wincmd.ini wrote:
[1024x768 (10x20)] Данные, зависящие от разрешения экрана и размера шрифта (размер шрифта определяется числами в скобках: (8x16) — для нормального и уменьшенного шрифта, (10x20) — для крупного шрифта).

Про Version поясни, пож-та.

#1326:  Author: Loopback PostPosted: Thu Mar 07, 2019 16:27
    —
Flasher wrote:
а в исходном увеличении некоторых диалогов

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

Flasher wrote:
А насколько целесообразно здесь учитывать размер шрифтов, как в ТС?

Да я уже не знаю ,что тут еще считать целесообразным.

Flasher wrote:
Про Version поясни, пож-та.

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

#1327:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 16:29
    —
Loopback wrote:
как будто ты по десять раз на дню меняешь разрешения (и все разные) и настраиваешь их.
Это было бы справедливо, если бы окон было пару штук, а когда их пару-тройку десятков и ты не знаешь, в какой момент ты доберёшься до того или иного, то лучше иметь приемлемый вариант без лишней нервотрёпки (мол, ну вот опять я что-то забыл и т. п.).

Loopback wrote:
Ну ок, давай громоздить излишества, одним больше, одним меньше...
Ну, знаешь. Одна секция и один ключ — это так себе излишество. Wink

Loopback wrote:
Да я уже не знаю ,что тут еще считать целесообразным.
Да это я на всякий спросил, не запаривайся. Smile

Про Version понял.


Last edited by Flasher on Thu Mar 07, 2019 16:37; edited 1 time in total

#1328:  Author: Loopback PostPosted: Thu Mar 07, 2019 16:36
    —
Flasher wrote:
Одна секция и один ключ —

Где же одна, когда это надо делать под каждый диалог отдельно?

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

#1329:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 16:41
    —
А если использовать предложенный мной вариант с секциями разрешений без добавки их в хэш? Тогда и не придётся плодить сущности.

#1330:  Author: Loopback PostPosted: Thu Mar 07, 2019 16:55
    —
Flasher wrote:
А если использовать предложенный мной вариант с секциями разрешений

Уже смотрел, нет, это не проще.

#1331:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 16:57
    —
Loopback
Тут ключевое "без добавки их в хэш". Что именно усложнит ситуацию?

#1332:  Author: Loopback PostPosted: Thu Mar 07, 2019 23:16
    —
Сегодняшнаяя версия.

+ сделал сохранение позиций зависимой от разрешения
- убрал очистку секций

Всё, это "последняя китайская хотелка", больше ничего глобального не добавляю. Иначе я за себя не ручаюсь, брошу вообще как есть Smile

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

В pos-файле есть три ключа:
ScreenResDependent=1 - если 1, будет зависимость от разрешения, если 0 не будет (как в предыдущей версии).
RestoreFromLastRes=1 - если 1, при смене разрешения берутся размеры окна из предыдущего разрешения, если 0 - окно позиционирует тотал
NoRestartToCreate=1 - если 1, при смене разрешения секция создается сразу в той же сессии, если нет - нужен перезапуск тотала

Кстати, там еще хэш неправильно создавался, старый файл лучше стереть.

Справку не обновлял.

Avada
В пылу спора пропустил сообщение Smile Хорошо, добавлю.

#1333:  Author: FlasherLocation: Москва PostPosted: Thu Mar 07, 2019 23:44
    —
Loopback
Супер. Спасибо! Razz
1. Немного потестил. Почти то, что надо, только при смещении окна за левую границу оно не смещается до левого края. С правой границей всё в порядке.
2. Почему для каждого окна создаётся по две секции с одинаковыми данными?
3. Сперва не удалял pos, секция Common и три указанных ключа появились. После удаления файла и новых тестов секция не появилась.
4. С "Выбор команды" интересная ситуация: если сперва использовать Win+Right, а потом Win+Left, то при следующем открытии окно прыгает из стороны в сторону, хотя сам ТС не должен запоминать ни один из вариантов. Question

#1334:  Author: Loopback PostPosted: Fri Mar 08, 2019 00:19
    —
Flasher wrote:
только при смещении окна за левую границу оно не смещается до левого края.

Ок, поправлю, но не сегодня.

Flasher wrote:
Почему для каждого окна создаётся по две секции с одинаковыми данными?

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

Flasher wrote:
Сперва не удалял pos, секция Common и три указанных ключа появились. После удаления файла и новых тестов секция не появилась.

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

Flasher wrote:
С "Выбор команды" интересная ситуация

Не знаю, значит что-то все-таки сохраняет. Я двигаю один раз.

#1335:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 00:41
    —
Loopback wrote:
Ок, поправлю, но не сегодня.
Я и не рассчитывал. На моих до конца сегодня полчаса осталось. Отдыхать надо'с. Wink
Loopback wrote:
Это норма.
А как происходит чтение? При каждом вызове любого окна считываются все хэши на предмет класса и разрешения? Это разве не замедляет процесс в сравнении с переходом к одной секции с нужным разрешением, как я предлагал?

Loopback wrote:
Ключи создаются только при запуске
Понял. Вижу.

Loopback wrote:
Не знаю, значит что-то все-таки сохраняет.
Действительно. Иногда, если переключаться таким образом, ТС восстанавливает половинчатое окно. Это ещё поймать надо. В иных ситуациях, будь окно полностью развёрнуто или восстановлено в дограничном варианте, а после спозиционировано по одной из указанных комбинаций, запоминания не происходит никогда.

#1336:  Author: Loopback PostPosted: Fri Mar 08, 2019 01:08
    —
Flasher wrote:
При каждом вызове любого окна считываются все хэши на предмет класса и разрешения?

Даже если бы так было, ты бы вряд ли заметил замедление Smile Разумеется, сделано не так. Хэши "независимые" считаются один раз для всех диалогов при запуске (как хорошо и эффективно было в первом варианте...). "Зависимые" - один раз для одного диалога при каждом открытии диалога (можно, конечно, и здесь чуть оптимизировать, но лень). Далее секции читаются и пишутся напрямую.

#1337:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 01:16
    —
Loopback wrote:
"Зависимые" - один раз для одного диалога при каждом открытии диалога
А как ты отличаешь зависимые от независимых без перечёта всех хэшей?

#1338:  Author: Loopback PostPosted: Fri Mar 08, 2019 01:31
    —
Flasher
Ээ, ну их как бы и не надо специально отличать. Они же уникальны для каждого диалога. И те и другие. Конечно, коллизии совсем нельзя исключить, но на таком количестве строк они очень маловероятны.

#1339:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 01:39
    —
Loopback
Ты же пишешь, что "сделано не так". Я спрашиваю про момент открытия любого окна. Ты пишешь, что независимые считаются единожды. Но файл же пополняется. Как без "вечного" пересчёта можно выяснить, какие считать единожды, а какие при каждом вызове?

#1340:  Author: Loopback PostPosted: Fri Mar 08, 2019 02:10
    —
Flasher
Единожды считается на основе данных диалога (строка из класса диалога, условий - кстати, забыл, надо еще обязательно учитывать условия visible). При запуске окна ("окно", чтобы отличать от диалога, "диалог" в данном случае - его описание во внутреннем массиве) - диалог мы определяем по классу окна плюс исходя из заданных условий, независимый хэш для него уже посчитан вначале. Для прошлой версии этого уже было достаточно, по хэшу сразу читаем/пишем секцию. Независимый хэш всегда одинаков для диалога при любом разрешении. Зависимый считается заново из тех же исходных данных (диалог-то мы уже нашли условиями) плюс строка разрешения экрана - хэш другой. При изменении разрешения строка разрешения поменяется, опять будет другой хэш. Всё просто Smile

В общем, если остались вопросы - всё завтра.

#1341:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 08:36
    —
Loopback
То, чем отличаются зависимые и независимые хэши, я не спрашиваю. С этим было понятно.
Я спрашиваю про то, что происходит в момент запуска окна. Хэш независимый записан в ini. Но в любом случае нужно опять выснить все данные для сравнения с ini? Или есть какая-то автопривязка ко всем окнам типа раширенного стиля, которая сразу выдаёт нужный хэш?
Loopback wrote:
При изменении разрешения строка разрешения поменяется, опять будет другой хэш.
И всё равно непонятно, зачем писать разрешение в хэш, если можно вдвое сэкономить на секциях? Или хэш меняется при смене разрешения независимо от склейки?

#1342:  Author: Loopback PostPosted: Fri Mar 08, 2019 15:14
    —
Flasher
Слушай, я не знаю, как ещё объяснить. Я же сказал, в момент запуска окна считается ровно один хэш для того диалога, который открывается, с учётом разрешения. Считается на основе данных, которые ты задаешь командами AddDialog, AddCondition + строка разрешения. Hex-строка из подсчитанного хэша - это секция ini, я сразу ее читаю и записываю.

По "экономии" секций даже говорить не о чем, нет никакой принципиальной экономии, условно говоря, какая разница, 100 значений по 50 в 2 секции или по 4 в 25. Секций больше, зато не надо делать кучу конкатенаций для чтения каждого значения в виде хэш_Left и т.д.

Я же не говорю, что твоим способом принципиально нельзя сделать, но в данном случае это не даёт никакого выигрыша, плюс реализация уже была сделана, удобная и быстрая, зачем изобретать велосипед?

#1343:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 16:09
    —
Loopback
Как и из чего формируются хэши это по 2-му разу повторять не нужно.
Вот "сразу записываю" уже о чём-то говорит. Т.е. пишешь без сравнения.
Loopback wrote:
По "экономии" секций даже говорить не о чем, нет никакой принципиальной экономии, условно говоря, какая разница, 100 значений по 50 в 2 секции или по 4 в 25.
Насчёт "вдвое" я, конечно, слукавил:
 Твой вариант (32 строки)

 Мой вариант (28 строк):
Разница несущественная, хотя с увеличением числа разрешений и окон она будет расти в пользу моего варианта.

Loopback wrote:
зато не надо делать кучу конкатенаций для чтения каждого значения в виде хэш_Left и т.д.
В рамках запуска одного окна не кучу, а всего 4. И тебе, если я правильно понял, не придётся по новой считать хэши:
Loopback wrote:
Хэши "независимые" считаются один раз для всех диалогов при запуске
Уж явно 4 конкатенации по скорости значительно быстрее вычисления хэша.

Loopback wrote:
плюс реализация уже была сделана, удобная и быстрая, зачем изобретать велосипед?
Я сейчас больше интересуюсь не в целях перекомпиляции, а скорее в образовательных.

#1344:  Author: Loopback PostPosted: Fri Mar 08, 2019 17:32
    —
Quote:
Уж явно 4 конкатенации по скорости значительно быстрее вычисления хэша.

Замерять не буду, но не факт, хэш простейший, криптостойкость же ему не нужна. Плюс есть как минимум два пути оптимизации, может даже и сделаю один (расчет зависимого на основе независимого), тогда будет точно быстрее. Но на самом деле реально не вижу необходимости, на строках в пару десятков символов это микросекунды, а у нас не какие-нибудь нагруженные базы данных, где это будет хоть как-то заметно.
Quote:
интересуюсь не в целях перекомпиляции

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

#1345:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 18:11
    —
Loopback wrote:
Это понятно
Было бы понятно, не спросил бы про велосипед. Wink

В общем, если захочешь оптимизировать, делай. Или выкладывай релиз с правкой смещения до левой границы и хелпа (если нужны примеры всех окон Тотала с комментами, пиши, выложу). Я бы ещё переименовал плагин под новые реалии. MoveWindow/MoveDialog — что-то в этом духе.

#1346:  Author: Loopback PostPosted: Fri Mar 08, 2019 18:34
    —
Flasher wrote:
. Я бы ещё переименовал плагин под новые реалии.

Про переименование уже думал, как минимум хорошо бы главную функцию переименовать (для совместимости можно псевдоним добавить). Если переименовать сам плагин, его старая версия останется лежать мусором, к сожалению, тоталовский инсталлятор плагинов не умеет удалять файлы.

#1347:  Author: FlasherLocation: Москва PostPosted: Fri Mar 08, 2019 18:42
    —
Loopback
За мусором каждый сам должен следить. Это по сути то же самое, что устанавливать новый плагин, не удалив уже ненужный аналог.
Да и у первых версий тоже не было приставки Autorun_.

#1348:  Author: rk2019Location: Moskov PostPosted: Fri Mar 08, 2019 22:31
    —
Loopback

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



Я очень благодарен чудной версии от 4 марта, которая наконец вернула узкие диалоги в ТС 8.52а. Не сочтите за наглость, спросить как убрать нахрен выделенные красным пункты?

#1349:  Author: FlasherLocation: Москва PostPosted: Sat Mar 09, 2019 07:03
    —
rk2019
Сместить их на сотню-другую пикселей вправо /X-ключом такая уж проблема? В случае кнопки [+] достаточно просто занулить ширину: /W:0. Указания контролов я вам давал в примере под спойлером. Учитесь решать подобные вопросы самостоятельно, тем более что выглядят они как откровенное издевательство на диалогом — особенно в отношении весьма и весьма полезной кнопки [+].

#1350:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 09, 2019 08:22
    —
Loopback
Flasher
Насчёт новых реалий — я бы название не трогал. Намёк на изменения содержимого окон достаточно адкватен, а привязки к конкретному диалогу там и нет. В конце концом, и TWinKey, например, получил когда-то название по одной конкретной функции, далеко впоследствии не главной...

rk2019
Вы уже отняли у участников этой темы непомерно много времени на удовлетворение своих прихотей. Дальше — самостоятельно. Тем более при такой наглядной демонстрации непонимания и незнания современных возможностей TC и нежелания этому учиться. Про кнопку вам ответили, а скрытие опции для проверки и так предусмотрено штатно: прочитайте в справке описание ключа VerifyEnabled.

#1351:  Author: FlasherLocation: Москва PostPosted: Sat Mar 09, 2019 08:26
    —
Avada wrote:
Намёк на изменения содержимого окон достаточно адкватен
Так себе намёк. Менять можно как сами диалоги, так и любой контрол в них, а не только какую-то кнопку. Мне в текущем положении не нравится это название.

#1352:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 09, 2019 08:51
    —
Flasher
Ты высказал своё мнение, я своё. Решать разработчику.

#1353:  Author: Loopback PostPosted: Sat Mar 09, 2019 16:51
    —
Я все же склоняюсь к переименованию, слишком много функциональных изменений, уже не только Move, и не только Button. А имя команды запуска мне вообще категорически не нравится, к "кнопке опций" она уже имеет очень отдаленное отношение.

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

Пока думаю над названием плагина "ChangeDialogs" или "FixDialogs" (но последнее можно спутать с "FixWindows").

Названия команд:
Простой режим:
SimpleChangeDialogs или DefaultChangeDialogs

Расширенный:
ChangeDialogs или RunChangeDialogs

#1354:  Author: FlasherLocation: Москва PostPosted: Sat Mar 09, 2019 17:10
    —
Loopback
Windows напоминимает ОС. Dialogs лучше.
Мне такие варинты нравятся по убывающей: DialogsMod, DialogsModify, ModifyDialods.
Команды, соответственно: SimpleDialogsMod и DialogsMod.

#1355:  Author: Loopback PostPosted: Sat Mar 09, 2019 17:28
    —
Flasher
Насчёт *Mod не уверен, а вот варианты с Modify вполне можно обдумать, пожалуй даже ближе по смыслу, чем Change.

#1356:  Author: FlasherLocation: Москва PostPosted: Sat Mar 09, 2019 17:43
    —
Loopback
ОК. Пусть будет с Modify.

#1357:  Author: rk2019Location: Moskov PostPosted: Sat Mar 09, 2019 21:01
    —
Loopback
DialogsModify

Avada
Согласен. VerifyEnabled=0 убрался этот пункт
А эту кнопку [+] также можно красиво убрать, через настройки?

#1358:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 09, 2019 21:36
    —
Loopback
Я за ModifyDialogs.

rk2019
Что делать с кнопкой, уже было сказано.

#1359:  Author: rk2019Location: Moskov PostPosted: Sat Mar 09, 2019 21:44
    —
Avada

1 Первое слово должно быть основой. А основа - это диалог, а не модификация. Я за DialogsModify

2. Я спросил про красиво убрать, то есть через конфиг. Если красивого способа нет - тогда через плагин.

#1360:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 09, 2019 21:59
    —
rk2019
Вы все ответы на свои запросы получили, оставьте эту тему в покое. И вопрос об имени плагина как-нибудь решат без вас.

#1361:  Author: rk2019Location: Moskov PostPosted: Sun Mar 10, 2019 20:28
    —
Avada

Приведенная ниже просьба, настройками ТС никак не решается. За 2 дня я перепробовал 100500 вариантов и не получил результат. Поэтому не надо писать, мол это 1000 раз обсуждалось....

Loopback

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



Можно ли средставми вашего плагина, сделать одинаковый диалог для всех случаев удаления?

Если получаем такой диалог по F8, то при Shift+F8 он уже не такой. Вид диалогов зависит и от того, что нажимаем (F8 или Shift+F8 ) и от настроек системной Корзины (используется она или нет) и от фазы Луны и от хрен пойми ещё чего.

#1362:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Mar 10, 2019 21:34
    —
rk2019
Вы регистрировались на этом форуме для решения конкретного вопроса. Он решён. Дальнейшее ваше участие — к месту и не к месту — в этой теме начинает всё более приобретать навязчивый характер. Не говоря про то, что обсуждаются уже новые версии, не имеюшие к 8.52a отношения. Вам больше нечем заняться?
То, что выше написано про диалог удаления, является абсолютной чепухой. Диалог по F8 и по Shift+F8 и не должен быть одинаковым. Насколько он неодинаков, зависит от настроек. Про ключ VistaDelete я упоминал ещё на ру-борде. Если вы не нашли времени или желания с этим разобраться по справке или материалам форумов, это ваши проблемы, но абсолютно неуместно устраивать тут ликбез по тому, что давно и многократно обсуждено теми, кто переходил на новые версии вовремя. Разумеется, и с нулевым значением этого ключа диалоги удаления в Корзину и мимо её будут в современых версиях несколько различаться. И это правильно. (Вспоминать, как это выглядело в старых версиях, мне совершенно неинтересно — и уверен, что не только мне.) А пытаться "исправить" это с помощью плагина — вообще дикость. Печально, что вы этого совершенно не понимаете.
TC, персонально подогнанного под все до единой ваши затеи и прихоти (чем дальше, тем всё более, как погляжу, странные) не будет. Пора бы уже это понять. Пользуйтесь тем, что реально существует.

Loopback
Я убедительно прошу как модератор запросы, подобные приведёному выше, впредь просто игнорировать. Всему есть пределы. Хотя бы отчасти осмысленные запросы закончились, началось чистое издевательство над программой. Не вижу надобности оказывать в этом содействие.

#1363:  Author: Loopback PostPosted: Mon Mar 11, 2019 00:01
    —
В общем, с отдельной командой Simple* отбой. Это была хоть и красивая, но не самая продуманная идея (не иначе праздники повлияли Very Happy). Когда дошло до реализации, оказалось, что так всё еще больше усложняется. Поэтому по интерфейсу всё остается как было, только имя другое.

Плагин теперь называется Autorun_ModifyDialogs, команда аналогично ModifyDialogs.

Идея по размещению Dialogs перед Modify в принципе понятна, сам я нередко так именую функции (например, работа со строками), в ряде случаев это оправданно.

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

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

Ну и наконец, в плагине уже есть целых три Add* команды.

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

В этой версии:

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

Avada wrote:
впредь просто игнорировать

Да если честно, уже после запроса на удаление "лишних" кнопок отвечать как-то желания нет.

#1364:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 08:50
    —
Loopback
С границей порядок. Спасибо.
Перестали запоминаться размеры этих окон:
Code:
# Сохранение высоты "Определить цвета для типов файлов":
AddDialog /CENTER:7 /SAVE:8 "TDlgCustomColors"
AddCondition /TEXT "" 0 "Определить цвета для типов файлов"
# Сохранение размеров "Внутренние ассоциации":
AddDialog /CENTER:3 /SAVE:12 "TDlgCustomColors"
AddCondition /TEXT "" 0 "Внутренние ассоциации"

В отличии от окна настройки WCX и "По типам файлов..." после изменения размеров "Файловые ассоциации", вызываемого из главного меню, диалог появляется с тормозами:
Code:
# Сохранение размеров "Файловые ассоциации":
AddDialog /CENTER:7 /SAVE:12 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Плагины"
AddDialog /CENTER:7 /SAVE:12 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Правка/Просмотр"
AddDialog /CENTER:3 /SAVE:12 "TASSOCIATEDLG"

Не получается отличить диалог создания каталога от диалога фильтрации (снизу добавлен только AddDialog по аналогии с предыдущим примером и проверка на отсутствие 3-й кнопки):
Code:
# Увеличение высоты "Добавить выделение":
AddDialog /CENTER:3 /H:500 "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Добавить выделение"
AddControl /H:500 "TMyListBox" 1
AddControl /Y:500 "TButton" 1
AddControl /Y:500 "TButton" 2
AddControl /Y:500 "TButton" 3
# Увеличение высоты диалога "Фильтр...":
AddDialog /CENTER:3 /H:600 "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"
AddControl /H:600 "TMyListBox" 1
AddControl /Y:600 "TButton" 1
AddControl /Y:600 "TButton" 2
AddControl /Y:600 "TButton" 3
# Не изменять диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /VISIBLE:0 "TButton" 3

 Пока пошёл другим путём:

Кстати, а почему нельзя вместе содержать /W: /H: и SAVE:4/8/12 ?

Loopback wrote:
Ну ок, соглашусь, если смотреть чисто по структуре может не очень логично. ... Могу и убрать.
Убирать флаг 4, конечно, не надо (в итоге он понадобился для диалога настроек), но привести его в полное соответствие с описанием хотелось бы. Ну, и убрать соотв. фразу про Рабочий стол из описания.

/CENTER:<flags> wrote:
Обратите внимание, центрирование окна происходит после восстановления с параметром /POS, ...
Считаю, тут и про SAVE:4/8/12 есть смысл написать.

 Лишние запятые:

Loopback wrote:
Могу и добавить, мне не жалко Very Happy
Так и? Smile

#1365:  Author: Loopback PostPosted: Mon Mar 11, 2019 11:48
    —
Flasher wrote:
Перестали запоминаться размеры этих окон

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

Flasher wrote:
диалог появляется с тормозами

"Часовню тоже я развалил?" Wink
Этот диалог всегда появлялся с задержкой, и это естественно, чтобы загрузить все ассоциации нужно время. Во всяком случае я не вижу разницы в скорости его появления с плагином или без.

Flasher wrote:
Не получается отличить диалог создания каталога от диалога фильтрации

Так и не получится, ты смотришь скрыта ли кнопка, а ее в этом диалоге просто нет. Для этого нужно вводить новое условие существования контрола.

Flasher wrote:
Ну, и убрать соотв. фразу про Рабочий стол из описания.

Всё уберу.

Flasher wrote:
Считаю, тут и про SAVE:4/8/12 есть смысл написать.

Что именно про них написать?

Flasher wrote:
Так и?

Пока не до этого, вон опять сколько косяков накидал Smile
С другой стороны, чего ждать? Выкладывай, добавлю.

#1366:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 11, 2019 12:33
    —
Loopback
Меня терзают смутные сомненья, что вот этот мой пост по запарке никому не попался на глаза. В примерах в любом случае придётся наводить порядок: три примера для копирования и ни одного для других диалогов после смены концепции дочернего плагина уже не годятся. Хоть пару ещё надо дать (дополнительно или вместо чего-то не столь важного из имеющегося), один я как раз предлагал. Кроме того, там сейчас даже явным образом не указано, что это про диалог копирования — раньше-то это было очевидно, а теперь уже не очень.

#1367:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 12:38
    —
Loopback wrote:
Только перестать запоминаться они не могли, тут сами диалоги перестали различаться.
Взгляд на проблему с разных берегов. Wink

Loopback wrote:
Во всяком случае я не вижу разницы в скорости его появления с плагином или без.
Да. Пожалуй, я поторопился с выводами.

Loopback wrote:
Так и не получится, ты смотришь скрыта ли кнопка, а ее в этом диалоге просто нет.
А я это не различаю. Если кнопки нет, то она и не видима.

Loopback wrote:
Для этого нужно вводить новое условие существования контрола.
Введи, пож-та. Добавлять новый ключ не надо, только равенство между видимостью и наличием. Тем более, что в ТС больше актуально последнее.
Но тут Avada выше подбросил мину с диалогом (Shift+F4). Там-то тоже 3 кнопки как и в Фильтр... Confused Сие не работает:
Code:
# Изменение диалога создания файла (Shift + F4):
AddDialog "TCOMBOINPUT"
AddCondition /TEXT "TButton" 1 "Д&ерево"
А, нет, работает, если над блоком для "Фильтр..." поместить. Smile

Loopback wrote:
Что именно про них написать?
Вообще указание параметра /POS сбивает с толку. Он же нигде больше в таком виде не фигурирует. Лучше писать /W и /H.
И я предлагаю отказаться от именования ключей параметрами. У ключей есть параметры. Получается, параметры у параметров. Я всегда в шапках скриптов их различаю. /key:param либо -key param.
А написать лучше так: ... после изменения размеров с ключами /W, /H или их восстановления ключом /SAVE со значением 4, 8 или 12 ...


Loopback wrote:
С другой стороны, чего ждать? Выкладывай, добавлю.
Я же ссылку на пост давал. Вот без комментов:

 Выравнивание диалога по оптимальной ширине кнопок со сменой местами "Опции" и "Отмена":

Также считаю, что в описаниях AddDialog, AddCondition, AddControl примеров не хватает.

#1368:  Author: Loopback PostPosted: Mon Mar 11, 2019 13:20
    —
Avada wrote:
по запарке никому не попался на глаза

Почему же, в текущей версии он в примерах.
Avada wrote:
Хоть пару ещё надо дать

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

Да, да, вот это важно. Исправлю.

Flasher wrote:
Взгляд на проблему с разных берегов.

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

Flasher wrote:
А я это не различаю. Если кнопки нет, то она и не видима.

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

Это неправильно, см. выше.
Flasher wrote:
Но тут Avada выше подбросил мину с диалогом (Shift+F4)

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

Flasher wrote:
Вообще указание параметра /POS сбивает с толку. Он же нигде больше в таком виде не фигурирует. ... А написать лучше так:

Резон есть, так вроде понятно получается.

Flasher wrote:
И я предлагаю отказаться от именования ключей параметрами. У ключей есть параметры. Получается, параметры у параметров.

Если уж подо что и подгонять, так под основную терминологию Autorun. А там везде Параметры и Переключатели. Вот только проблема в том, что здесь эти переключатели - именно полноценные параметры. Так что пусть остаются просто "параметры", "параметры со значением" и "параметры с флагами". Надо только к одному знаменателю всё привести.

Flasher wrote:
Вот без комментов

Ок, добавлю.

#1369:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 11, 2019 13:26
    —
Loopback wrote:
Почему же, в текущей версии он в примерах.

Пардон, проглядел. Попробовал, в 32-битном TC работает. А для 64-битного заодно можно?

Loopback wrote:
Соглашусь, жду предложений.

Я думаю, Flasher по какому-то другому диалогу легко сможет предложить что-то интересное по итогам своих экспериментов и запросов.

#1370:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 13:49
    —
Loopback wrote:
Видимая или существующая - совсем разные вещи, причем очень важные для различения диалогов
А в чём важность? Разве только проверять диалог, спецом убрав контрол за пределы его видимости.
Loopback wrote:
Попробуй его поставить выше других TCOMBOINPUT.
Пока ты пишешь ответы, я уже написал уточнения. Wink См. выше.

Loopback wrote:
Так что пусть остаются просто "параметры", "параметры со значением" и "параметры с флагами". Надо только к одному знаменателю всё привести.
Тогда придётся отказаться от флагов.
P.S.: Дело, конечно, твоё, но вообще "параметры" глаза мозолят...

Avada wrote:
Я думаю, Flasher по какому-то другому диалогу легко сможет предложить что-то интересное по итогам своих экспериментов и запросов.
По какому-то? Да выше их хватает. Пиши — не хочу. Я вообще предлагал все годные окна Тотала собрать, Loopback отмолчался.

#1371:  Author: Loopback PostPosted: Mon Mar 11, 2019 14:27
    —
Avada wrote:
А для 64-битного заодно можно?

Можно. По-хорошему надо бы для всех примеров делать вариант для x64, но это опять трата времени, а его мало.
Flasher wrote:
А в чём важность?

Ну вот, допустим, есть два совершенно одинаковых диалога, на одном кнопка TButton3 есть, но скрыта, на другом - ее вообще нет. Как различить, если visible = exists?

Может сейчас именно такой ситуации и не окажется, но в следующей версии Гислер возьмет и сэкономит еще пару диалогов.

Раз необходимость в условии наличия контрола встретилась уже сейчас, значит его надо делать. Если когда-нибудь понадобится, скажем, проверка enabled/disabled контрола, тогда добавим и его, пока я таких мест не видел.
Flasher wrote:
Пока ты пишешь ответы

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

Flasher wrote:
Тогда придётся отказаться от флагов.

С чего бы это? Параметр со значением = сумме флагов.
Flasher wrote:
Я вообще предлагал все годные окна Тотала собрать

Да я в принципе-то не против, но тогда, чувствую, в справке придется отдельный справочник с примерами делать Very Happy Там уже и так страницу долго листать приходится.

#1372:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 14:53
    —
Loopback wrote:
Может сейчас именно такой ситуации и не окажется, но в следующей версии Гислер возьмет и сэкономит еще пару диалогов.
С трудом себе такое представляю. И почему "ещё"? Были прецеденты?

Loopback wrote:
проверка enabled/disabled контрола, тогда добавим и его, пока я таких мест не видел.
Для группы чекбоксов такие места есть и на страницах настроек, и в диалогах переименования/копирования/упаковки, другое дело, что потреба их там различатать как от козла молока.

Loopback wrote:
С чего бы это? Параметр со значением = сумме флагов.
Т.е. "со значением"? При "отказе" от флагов будет именоваться как "сумма значений".
В русской справке ТС есть 3 варианта по убывающей: значений, чисел, величин. И нигде флагов, как ни странно.

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

Last edited by Flasher on Mon Mar 11, 2019 15:01; edited 1 time in total

#1373:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 11, 2019 15:01
    —
Flasher wrote:
Были прецеденты?

Сколько угодно. Диалоги создания файлов/папок. Копирование/перемещение и создание ярлыка. Неоднократно упоминавшаяся тройка диалогов для системных ассоциаций, архиваторных плангинов и внешнего просмотра. Разбиение/кодирование. Сборка/декодирование. Пакетное переименование и копирование в свой же каталог. И так далее...

#1374:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 15:03
    —
Avada
Тебя не в ту степь понесло. У нас разговор о замене видимых контролов на скрытые.

#1375:  Author: Loopback PostPosted: Mon Mar 11, 2019 15:23
    —
Flasher wrote:
Были прецеденты?

Были. Например, раньше окна создания каталогов и диалога по Shift+F4 были разные. Вот, и Avada еще подогнал примеров.

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

Flasher wrote:
что потреба их там различатать как от козла молока

Верно, поэтому пока такого условия и нет.

Flasher wrote:
Т.е. "со значением"?

Значение параметра = сумме флагов. Термин "флаг" оставлю, он лучше всего подходит под эту ситуацию.

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

А ты какой пример имеешь в виду? Кнопки равной ширины в диалоге копирования - это я понял, а остальное? Нашел только этот пост, но там везде только сохранение (ну кое-где расширение списков, но это вроде как и не назовешь полноценным исправлением).

#1376:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Mar 11, 2019 15:35
    —
Flasher
Значит, неверно понял. Но, возможно, списочек для чего-то ещё пригодится.

#1377:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 15:43
    —
Loopback wrote:
Были. Например, раньше окна создания каталогов и диалога по Shift+F4 были разные. Вот, и Avada еще подогнал примеров.
Опять же, при чём тут разница окон? Покажи мне пример скрытия ранее видимых контролов.

Loopback wrote:
И если это позволит, пусть и потенциально, различить диалоги, зачем делать урезанный вариант?
Т.е. нужно отличить окно с одним классом, где нет контрола, от окна, где он скрыт? Пока мне этот потенциал кажется сверхмалым.

Loopback wrote:
Термин "флаг" оставлю, он лучше всего подходит под эту ситуацию.
Почему же авторы перевода справки в отношении wincmd.ini так не считают?
И дело не в этом. Ты написал "Надо только к одному знаменателю всё привести.". Если нет отказа, то откуда тут взяться одному знаменателю?

Loopback wrote:
Нашел только этот пост, но там везде только сохранение (ну кое-где расширение списков, но это вроде как и не назовешь полноценным исправлением).
Неважно, что там. Главное — это полезная нагрузка применяемых опций. В растягиваемых вручную диалогах нет смысла устанавливать точный размер, поэтому там сохранение и центрирование. Выше приведены примеры с TDlgCustomColors, TCOMBOINPUT и TASSOCIATEDLG. Их будет достаточно.

#1378:  Author: Loopback PostPosted: Mon Mar 11, 2019 16:25
    —
Flasher wrote:
Покажи мне пример скрытия ранее видимых контролов.

Я не говорил, что такой пример сейчас есть.

Flasher wrote:
Пока мне этот потенциал кажется сверхмалым.

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

Flasher wrote:
Почему же авторы перевода справки в отношении wincmd.ini так не считают?

Наверно, именно потому что это ini - а в нем приняты секции, ключи и значения? И потому что это совсем другая справка?

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

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

Flasher wrote:
Неважно, что там.

Ну ок, пойдет как готовый вариант применения условий.

#1379:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 16:41
    —
Loopback wrote:
Я не говорил, что такой пример сейчас есть.
Ты написал "сэкономит еще пару диалогов" и "Были" в соотв. контексте.

Loopback wrote:
Но я лучше учту это и сделаю сразу то, что будет работать всегда
Хорошо.

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

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

#1380:  Author: Loopback PostPosted: Mon Mar 11, 2019 17:51
    —
Flasher wrote:
Ты сам задал такой синтаксис с командами и ключами как в консольных утилитах.

Однако же термин "параметры" используется во всей справке Autorun с самого ее начала, и почему-то раньше тебя это не смущало Smile

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

#1381:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 18:05
    —
Loopback wrote:
и почему-то раньше тебя это не смущало
Раньше такой формат записи везде значился как переключатели, а не параметры.

Loopback wrote:
Давай я все же не буду переделывать всю справку
Так у тебя же задача убрать разночтения. Как я уже написал, в справке были только переключатели, под них и логично подводить формат /<Name>.
Ещё в AddDialog, AddCondition, ProcessExist первым стоит слово "Функция". В FileExist, GetUptime, LoadFont, LoadLibrary, AddControl — слово "Команда". Во всех остальных нет ни того ни другого. В GetSysColor, SystemParametersInfo, GetWMIValue вообще нет вышестоящих описаний.

#1382:  Author: Loopback PostPosted: Mon Mar 11, 2019 19:29
    —
Сегдняшняя версия.

- исправлен (опять) поиск текста
+ добавлено условие существования контрола

Flasher wrote:
Раньше такой формат записи везде значился как переключатели, а не параметры.

Я уже писал, что /X, /W и т.д. сейчас трудно назвать переключателями (switches). Они не переключают, а именно что-то задают. Изначально вообще не предполагалось такого их использования, но как видишь, тут оказалось удобным. Вот только не вижу я, что станет понятнее от переименования их в переключатели, а переименование во что-то другое и не рассматривается.
Flasher wrote:
первым стоит слово "Функция"

Уже исправлено.

#1383:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 20:03
    —
Loopback
"Внутренние ассоциации" подхватываются, но стали криво центрироваться при сумме 3, нормально — при сумме 7.

Мои примеры для других диалогов в итоге ты взял не те три, что я предложил с переносом Фильтр... вниз, а все исходные с /VISIBLE:1 косяками и без переноса кнопок для "Добавить выделение" и "Фильтр...". Smile

Отмеченные красным запятые забыл убрать в /WAIT.

#1384:  Author: Loopback PostPosted: Mon Mar 11, 2019 20:36
    —
Flasher wrote:
но стали криво центрироваться

C центрированием ничего не делалось, кроме левой границы в прошлой версии.

Flasher wrote:
в итоге ты взял не те три

Честно, я уже просто запутался где что. Всё похожее. Заменю. Запятые исправлю, забыл.

#1385:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 20:59
    —
Loopback wrote:
C центрированием ничего не делалось
То есть всё так и останется? Ты сам проверял на x32?

#1386:  Author: Loopback PostPosted: Mon Mar 11, 2019 21:45
    —
Flasher wrote:
То есть всё так и останется?

Если не пояснишь, в чем "кривизна", то останется. У меня и 3 и 7 работают одинаково.

#1387:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 22:15
    —
Loopback
Кривизна в том, что диалог хоть и двигался ближе к центру, но всё равно на 100-200 пикселей уходил правее и ниже.
Сейчас заменил на 3 и перезапустил. Глюк на удивление исчез. Может, что было с чтением/обновлением pos-файла, не знаю.

#1388:  Author: Loopback PostPosted: Mon Mar 11, 2019 22:45
    —
Flasher
Ну ок. По описанию похоже, словно работало от неправильного парента, но откуда ему там неправильному взяться...

По твоим примерам. Так всё нормально? Комменты думаю надо оставлять.
Code:

# Сохранение высоты "Определить цвета для типов файлов":
AddDialog /CENTER:7 /SAVE:8 "TDlgCustomColors"
AddCondition /TEXT "" 0 "Определить цвета для типов файлов"
# Сохранение размеров "Внутренние ассоциации":
AddDialog /CENTER:3 /SAVE:12 "TDlgCustomColors"
AddCondition /TEXT "" 0 "Внутренние ассоциации"

# Сохранение размеров "Файловые ассоциации":
AddDialog /CENTER:7 /SAVE:12 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Плагины"
AddDialog /CENTER:7 /SAVE:12 "TASSOCIATEDLG"
AddCondition /TEXT /PARENT "TMyPanel" 1 "Правка/Просмотр"
AddDialog /CENTER:3 /SAVE:12 "TASSOCIATEDLG"

# Увеличение высоты "Добавить выделение":
AddDialog /CENTER:3 /H:500 "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Добавить выделение"
AddControl /H:500 "TMyListBox" 1
AddControl /Y:500 "TButton" 1
AddControl /Y:500 "TButton" 2
AddControl /Y:500 "TButton" 3
# Увеличение высоты диалога "Фильтр...":
AddDialog /CENTER:3 /H:600 "TCOMBOINPUT"
AddCondition /TEXT "" 0 "Total Commander"
AddControl /H:600 "TMyListBox" 1
AddControl /Y:600 "TButton" 1
AddControl /Y:600 "TButton" 2
AddControl /Y:600 "TButton" 3
# Не изменять диалог создания каталога:
AddDialog "TCOMBOINPUT"
AddCondition /EXISTS:0 "TButton" 3


PS: Кстати, как здесь делается скрытый текст? Похоже я один не знаю. Обычный тег "[spoiler]" не работает, в шпаргалке слева ни слова.

#1389:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 22:56
    —
Loopback wrote:
Так всё нормально?
Нет. Я же написал, что Фильтр... в самый низ нужно. И лучше с твоим примером для Shift+F4. Короче, давай так:
 Hidden text

И всё забываю спросить. Чтобы не зависеть от языка, можно научить IniRead читать lng? Т.е. нужен такой принцип:
Code:
IniRead LNG '%COMMANDER_INI%' Configuration LanguageIni
IniRead /<Encoding:ANSI/UTF-8> IntAssoc '%COMMANDER_PATH%\Language\%LNG%' "" 1722
...
AddCondition /TEXT "" 0 "%IntAssoc%"


Loopback wrote:
PS: Кстати, как здесь делается скрытый текст?
Нажми над моим постом кнопку "цитата" и сразу всё увидишь. Wink
А так объявление было здесь.


Last edited by Flasher on Tue Mar 12, 2019 10:21; edited 1 time in total

#1390:  Author: Loopback PostPosted: Mon Mar 11, 2019 23:36
    —
Flasher wrote:
Короче, давай так

Ок, так и запишем.

Flasher wrote:
Чтобы не зависеть от языка, можно научить IniRead читать lng?

IniRead нет, в lng нет секций, чтобы стандартные WinAPI функции работали. Но другой функцией в принципе можно, к тому же Autorun уже похожий формат читает (TOTALCMD.INC).

Flasher wrote:
Нажми над моим постом кнопку "цитата"

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

Ну почему "cut" для скрытого текста?... В жизни бы не догадался.

#1391:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 23:40
    —
Loopback wrote:
Но другой функцией в принципе можно
Сделай, пож-та.

Loopback wrote:
Ну почему "cut" для скрытого текста?
Типа от: скатывать, убрать под кат, срезать, урезать, сократить. Wink
Я обычно жму Code и заменяю ode на ut. Smile


Last edited by Flasher on Mon Mar 11, 2019 23:45; edited 1 time in total

#1392:  Author: Loopback PostPosted: Mon Mar 11, 2019 23:45
    —
Flasher wrote:
Сделай, пож-та.

Не раньше релиза ModifyDialogs Smile

Flasher wrote:
убрать под кат

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

#1393:  Author: FlasherLocation: Москва PostPosted: Mon Mar 11, 2019 23:47
    —
Loopback wrote:
Не раньше релиза ModifyDialogs
Ла-адно. Терпимо. Wink
Правда, потом придётся примеры в хелпе менять.

Слушай, а зачем вообще кавычки в указании контролов? Там же нет пробелов, да и без них работает.

#1394:  Author: rk2019Location: Moskov PostPosted: Tue Mar 12, 2019 00:53
    —
Avada

Ну я вначале, обратился персонально к вам, вот цитирую
Quote:
Приведенная ниже просьба, настройками ТС никак не решается. За 2 дня я перепробовал 100500 вариантов и не получил результат. Поэтому не надо писать, мол это 1000 раз обсуждалось....


VistaDelete и Win95Delete я перебрал во всех комбинациях. Диалог всё время разный - ниже я писал в каких случаях разный
Quote:
Если получаем такой диалог по F8, то при Shift+F8 он уже не такой. Вид диалогов зависит и от того, что нажимаем (F8 или Shift+F8 ) и от настроек системной Корзины (используется она или нет) и от фазы Луны и от хрен пойми ещё чего.


Вам просто надо было прочитать вопрос http://forum.wincmd.ru/viewpost.php?p=129319&sid=7fa0d7a7c0aee38a487eec84e59f7285 , а не влезать с объяснениями.

У меня на Вин ХП сейчас диалоги одинаковые, хоть с шифтом удаляю, хоть без, хоть включена корзина, хоть отключена - ещё раз пишу ВСЕГДА ОДИНАКОВЫЕ. Я даже не задумывался, что они могут быть разные.

Но на семерке не так. Почему на Вин 7 я не могу сделать одинаковые диалоги??

#1395:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Mar 12, 2019 06:46
    —
rk2019
В TC 8.52a при VistaDelete=0 на Windows 7 диалог совершенно одинаковый. (Разумеется, без включения удаления Проводником.) В XP значение 0 используется по умолчанию без правки ключа — см. справку. По этому поводу мной всё было сказано на ру-борде, хватит. Общаться с вами в этой теме больше желающих нет. (Да и на ру-борде картина в соответствующей теме та же.) Сам я на ру-борде ваши писания игнорирую, а здесь с сего момента реагирую на них только как модератор. Вплоть до постановки вопроса о блокировке аккуанта, если вы не уймётесь. А сейчас — замечание за оффтоп и флуд с последним предупреждением.

#1396:  Author: FlasherLocation: Москва PostPosted: Tue Mar 12, 2019 10:23
    —
Loopback wrote:
Ок, так и запишем.
Забыл поменять там VISIBLE на EXISTS для F7, как в твоём варианте. Сделано. Хотя результат в обоих случаях положительный, т.е. в строке с AddCondition смысл пропадает.

#1397:  Author: Loopback PostPosted: Tue Mar 12, 2019 11:41
    —
Flasher wrote:
Слушай, а зачем вообще кавычки в указании контролов? Там же нет пробелов, да и без них работает.

Можно без кавычек, разумеется. У меня просто привычка уже, все строки окавычивать.
Flasher wrote:
Хотя результат в обоих случаях положительный, т.е. в строке с AddCondition смысл пропадает.

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

#1398:  Author: FlasherLocation: Москва PostPosted: Tue Mar 12, 2019 12:09
    —
Loopback wrote:
У меня просто привычка уже, все строки окавычивать.
А я наоборот всегда стремлюсь от лишнего избавиться.
Loopback wrote:
в последнем
В данном случае — предпоследнем, иначе не сработает.

Опять нарвался на сбитое центрирование (50 пикс. левее), но теперь уже с DIALOG_COPYMOVE_PINNED. Причём стабильно и с 3 и с 7. Confused

#1399:  Author: Loopback PostPosted: Tue Mar 12, 2019 13:43
    —
Flasher wrote:
но теперь уже с DIALOG_COPYMOVE_PINNED

Если именно с этим диалогом - подтверждаю, мой косяк. Для него центрирование не выполнялось, баг добавил, когда делал ожидание Smile Кстати, для него не выполнялось и восстановление.

#1400:  Author: FlasherLocation: Москва PostPosted: Tue Mar 12, 2019 19:43
    —
Loopback
Слуйшай-ка, решил тут диалог шрифтов кастомизировать, но возникает проблема с контролом Static 5:
Code:
# Центрирование "Шрифт" относительно "Настройка" с растягиванием высот списков:
AddDialog /CENTER:7 "#32770"
AddCondition /VISIBLE:0 Static 4
AddControl /H:342 ComboBox 1
AddControl /H:60 ComboBox 2
AddControl /H:80 ComboBox 3
AddControl /Y:60 Static 5
AddControl /Y:60 Button 4
AddControl /W:0 /X:600 /Y:60 Static 6
AddControl /Y:60 Static 7
AddControl /Y:60 ComboBox 5
AddControl /X:194 SysLink 1
Не решаемо?

#1401:  Author: Loopback PostPosted: Tue Mar 12, 2019 22:10
    —
Flasher
Без понятия, это уже даже не тоталовский, а системный диалог, на такой уровень извращений я не подписывался Smile Но вообще, если плагин сейчас что-то не может переместить/изменить - значит к этому контролу/диалогу применены ограничения, а следовательно и не сможет.

#1402:  Author: FlasherLocation: Москва PostPosted: Tue Mar 12, 2019 22:19
    —
Loopback
Я так и думал, но решил спросить на всякий. Сделаю немного по-другому.

Не сочти за бред, но может быть причина в том, что раз Static 4 скрыт, то плагин не может сопоставить со своим списком видимый 5, думая, что он 4? Rolling Eyes

#1403:  Author: Loopback PostPosted: Wed Mar 13, 2019 15:44
    —
Flasher
Нет, так не бывает.

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

#1404:  Author: FlasherLocation: Москва PostPosted: Wed Mar 13, 2019 15:51
    —
Loopback
Ну, например, в TCFS2 порядковые индекс-номера для findwnd начинаются с 0, а не 1, поэтому и спрашиваю насчёт потенциального сопоставления.

#1405:  Author: Loopback PostPosted: Wed Mar 13, 2019 16:09
    —
Flasher
А, ну понятно. Нет, это не играет роли. Я просто много лет пользуюсь Autoit, поэтому вполне логично, что отсчет контролов с 1 мне представляется удобнее Smile

#1406:  Author: FlasherLocation: Москва PostPosted: Wed Mar 13, 2019 16:27
    —
Loopback
Я это сразу понял. В AHK та же тема. Wink

#1407:  Author: Loopback PostPosted: Wed Mar 13, 2019 20:44
    —
Сегодняшняя версия.

- исправлено центрирование/сохранение для DIALOG_COPYMOVE_PINNED
- создание хэша теперь также учитывает условие существования контрола
+ английская справка

#1408:  Author: FlasherLocation: Москва PostPosted: Wed Mar 13, 2019 22:04
    —
Loopback
С диалогом порядок.
Quote:
Подборка разных диалогов с условиями различения и настройками сохранения (для 32-битной версии) (автор Flasher):.
Прям вкоробило. Лучше уж "отличительными критериями" или "критериями отличия".

Вообще по хелпу могу полностью внимательно пройтись и сбросить в ЛС по ошибкам, неточностям. Кое-что уже вижу.

#1409:  Author: Loopback PostPosted: Wed Mar 13, 2019 22:53
    —
Flasher wrote:
Прям вкоробило

Да, ну не айс, конечно Laughing

Flasher wrote:
Вообще по хелпу могу полностью внимательно пройтись

Если не лень - почему бы и нет? Я бы, конечно, еще раз всё проверил, но со стороны оно часто лучше видно.

#1410:  Author: FlasherLocation: Москва PostPosted: Thu Mar 14, 2019 03:15
    —
Loopback wrote:
Если не лень - почему бы и нет?
Скинул.

#1411:  Author: Loopback PostPosted: Thu Mar 14, 2019 18:29
    —
Релиз-кандидат Autorun 2.0.5. Скачать.

- многочисленные мелкие исправления в справке
- исправлена работа с пустыми параметрами из субплагинов
+ плагин MoveButton кардинально обновлен и переименован в ModifyDialogs
+ добавлены многострочные комментарии #{ .. #}
+ добавлена функция таймера для проверки производительности

Если ничего критического не всплывет, завтра выложу как релиз.

#1412:  Author: rediffusion PostPosted: Thu Mar 14, 2019 18:29
    —
Loopback

На сайте написано - Autorun 2.0.4
После установки - Autorun 2.0.3
Так и задумано?

Flasher wrote:
Ключ /T призван завершать запускаемую программу с закрытием ТС.

Не робит.
1. В фале Plugins.ini 2 строки. Возможно нужно дописать расширение EXT="BlaBla" ?
Code:
17=%COMMANDER_PATH%\Plugins\wdx\Autorun\autorun.wdx64
17_detect=
18=%COMMANDER_PATH%\Plugins\wdx\Autorun\autorun.wdx
18_detect=

2. В самом autorun.cfg такая запись:
Code:
# После этой строки все действия выполняются при закрытии TC
ShellExec /T "%COMMANDER_PATH%\Scripts\AutoHotKey\RecycleBinEmptyU%SYSINFO_OSARCH%.exe" '"%COMMANDER_PATH%\Scripts\AutoHotKey\RecycleBinEmpty.ahk"'
#Pragma AutorunFinalizeSection

3. TC 64-bit

#1413:  Author: FlasherLocation: Москва PostPosted: Thu Mar 14, 2019 18:42
    —
rediffusion
С 2.0.3 не задумано. Просто забыл поправить.
1. Ничего не нужно дописывать.
2. Можно ещё Pragma AutorunBlockUnload добавить и перепроверить.

rediffusion wrote:
RecycleBinEmptyU%SYSINFO_OSARCH%.exe
Это ещё зачем? Где AutoHotKey?
Комментарий-то
Code:
# После этой строки все действия выполняются при закрытии TC
, наверное, стоило оставить над последней строкой.

#1414:  Author: Loopback PostPosted: Fri Mar 15, 2019 19:08
    —
Релиз выложен на сайте.

Относительно вчерашнего только подправлены номера версий плагинов.

#1415:  Author: rediffusion PostPosted: Fri Mar 15, 2019 21:03
    —
Loopback wrote:
Релиз выложен на сайте.


Такой вопрос, наверно глупый... Можно устанавливать поверх старого плагина? Или сначала старый нужно удалить?

#1416:  Author: Loopback PostPosted: Fri Mar 15, 2019 21:38
    —
rediffusion
Можно, конечно. Удаление старой версии - это по желанию.

#1417:  Author: FlasherLocation: Москва PostPosted: Fri Mar 15, 2019 22:11
    —
Loopback
Ты, наверно, хотел сказать сохранение, а не удаление. Wink

Что можно сказать. Релиз удался на слуву!
В ЛС мелкие замечания по последней правке хелпа.

#1418:  Author: Loopback PostPosted: Fri Mar 15, 2019 22:42
    —
Flasher wrote:
сохранение, а не удаление

Ответ был на "Или сначала старый нужно удалить?" - тут именно удаление по желанию.

Flasher wrote:
Релиз удался на слуву!

Да, свершилось Wink

#1419:  Author: FlasherLocation: Москва PostPosted: Sat Mar 16, 2019 02:00
    —
Loopback wrote:
тут именно удаление по желанию.
Предварительное? Ну, так при автомате он сам его должен удалить. Question

#1420:  Author: Loopback PostPosted: Sat Mar 16, 2019 11:55
    —
Flasher wrote:
Ну, так при автомате он сам его должен удалить.

Вроде при обновлении тотал предлагает его перезаписать, а не удалить.

#1421:  Author: FlasherLocation: Москва PostPosted: Sat Mar 16, 2019 12:01
    —
Loopback
Так для пользователя без разницы, что происходит: удаление + копирование новой версии или перезапись содержимого.

#1422:  Author: Loopback PostPosted: Sat Mar 16, 2019 12:16
    —
Flasher
Что-то куда-то разговор пошел не в ту степь.

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

#1423:  Author: FlasherLocation: Москва PostPosted: Sat Mar 16, 2019 12:22
    —
Loopback wrote:
Если ты понимаешь этот вопрос по-другому
Нет, я именно так и понял. Тут банальная проблема новичка в непонимании базовых принципов работы установщика по inf-файлу из архива. Тебе (а лучше — модератору) по сути надо было только отправить его читать справку, где рассказывается "Как установить плагин?".

#1424:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 16, 2019 13:24
    —
Flasher
Его отправляли читать справку уже везде и всюду. И всему этому тут уделяется чрезмерно много внимания. Давайте этот вопрос закроем.

#1425:  Author: FlasherLocation: Москва PostPosted: Thu May 30, 2019 13:19
    —
Loopback
Тут с месяц назад появилось желание расширить и зафиксировать диалог фоновых операций копирования/перемещения. Различать их можно только по правой крайней части в заголовке. <searchtext> у AddCondition, как я понял, искать по маске со звёздочкой не умеет. Можно это исправить?

#1426:  Author: Loopback PostPosted: Fri Jun 14, 2019 23:13
    —
Flasher wrote:
<searchtext> у AddCondition, как я понял, искать по маске со звёздочкой не умеет

Оно ищет вхождение заданной подстроки <searchtext> в любом месте заголовка/текста контрола. Во всяком случае, так задумывалось.

#1427:  Author: FlasherLocation: Москва PostPosted: Fri Jun 14, 2019 23:52
    —
Loopback
Может, не работает из-за того, что текст контрола динамический?

#1428:  Author: Loopback PostPosted: Sat Jun 15, 2019 00:59
    —
Flasher wrote:
Может, не работает из-за того, что текст контрола динамический?

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

#1429:  Author: FlasherLocation: Москва PostPosted: Sat Jun 15, 2019 01:04
    —
Loopback
Ясно. Жаль. Ну, ОК. Когда придёт вдохновение, жду вариант с LngRead, GetCpuInfo и слегка пофиксеной справкой.

#1430:  Author: Loopback PostPosted: Fri Jun 21, 2019 17:20
    —
Выложена новая версия.

2.0.6
+ добавлена команда LngRead для чтения строк из языковых файлов TC
- мелкие исправления в справке

#1431:  Author: FlasherLocation: Москва PostPosted: Fri Jun 21, 2019 19:28
    —
Loopback
Что-то не хочет:
Code:
IniRead LNG %COMMANDER_INI% Configuration LanguageIni
LngRead IntAssoc 1722 '%COMMANDER_PATH%\Language\%LNG%'
Msgbox %IntAssoc%, %LNG%
Пробовал %LNG% и без указания пути. LNG в UTF-8 без ВОМ начинается с:
Quote:
Russian (Русский)
codepage=65001

Quote:
Кодировка файла определяется автоматически по значению в строке «codepage».
Т.е. принудительно на UTF-16 и UTF-8? Иначе как? К тому же codepage= не является обязательной строкой.

#1432:  Author: Loopback PostPosted: Fri Jun 21, 2019 21:24
    —
Flasher wrote:
Пробовал %LNG% и без указания пути.

А случайно LanguageIni не находится в переадресованной секции? В %LNG% что-то есть? Боюсь что ini-функции не поддерживают редиректы. В остальном код выше рабочий.

Flasher wrote:
Т.е. принудительно на UTF-16 и UTF-8? Иначе как? К тому же codepage= не является обязательной строкой.

Если codepage= не найдена, то предполагается что файл ANSI и конвертируется в юникод с использованием системной кодовой страницы. Для UTF-8 она обязательно должна быть, иначе в тотале кракозябры.

Вот что я упустил, так это то, что файлы могут быть в UTF-16. Надо проверку добавить.

#1433:  Author: FlasherLocation: Москва PostPosted: Fri Jun 21, 2019 21:30
    —
Loopback wrote:
А случайно LanguageIni не находится в переадресованной секции?
Нет.

Loopback wrote:
В %LNG% что-то есть?
Разумеется. В сообщении выводится в заголовок. С этим и раньше проблем не было. Проблема исключительно в LngRead.

Loopback wrote:
Для UTF-8 она обязательно должна быть, иначе в тотале кракозябры.
Это если мы рассматриваем только языковой файл ТС. Но, полагаю, функция должна быть универсальной. Допустим, из плагинного lng нужно будет что-то выудить.

#1434:  Author: Loopback PostPosted: Fri Jun 21, 2019 21:45
    —
Flasher wrote:
Пролема исключительно в LngRead.

Тогда пока даже не знаю. Проверил все комбинации, в т.ч. и UTF-8, и без "codepage" - везде загружает.

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

Универсальной она не может быть, т.к. форматы разные, хоть и похожи. Плагинные файлы читаются IniRead.

#1435:  Author: FlasherLocation: Москва PostPosted: Fri Jun 21, 2019 22:08
    —
Loopback
Отбой. Стал проподить эксперименты с полными путями, и всё вдруг заработало и с переменными. Так и не понял, в чём был прикол.
Только толку то... AddCondition на переменную хоть бы хны:
Quote:
AddDialog /CENTER:3 /SAVE:12 TDlgCustomColors
AddCondition /TEXT "" 0 "%IntAssoc%"


Loopback wrote:
т.к. форматы разные, хоть и похожи.
ОК. Согласен.

#1436:  Author: Loopback PostPosted: Sat Jun 22, 2019 00:03
    —
Flasher wrote:
AddCondition на переменную хоть бы хны

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

#1437:  Author: FlasherLocation: Москва PostPosted: Sat Jun 22, 2019 00:42
    —
Loopback
Но /EV- касается отключения переменных окружения, а не внутренних переменных плагина.
К тому же есть и другие команды, где нет /EV- в описании: CommandExec, IniDelete, IniRead, FileExist, MsgBox, RegRead, RegWrite, RegDelete, RegRead, все строчные. Но ряд из них точно поддерживает переменные. Тот же Msgbox <текст>.

Думал ты сразу сообразишь, когда я запросил lng-ридер.

#1438:  Author: Loopback PostPosted: Mon Jun 24, 2019 12:44
    —
Flasher wrote:
Но /EV- касается отключения переменных окружения, а не внутренних переменных плагина.

Внутренних тоже, они же фактически равноценны. Думаю, стоит это уточнить в справке.
Flasher wrote:
К тому же есть и другие команды, где нет /EV- в описании

В параметрах команд, где принимается имена файлов или пути - переменные разворачиваются всегда, безальтернативно. Где просто какой-нибудь текст (например параметры запуска) - там есть /EV.

MsgBox исключение Smile

Flasher wrote:
Думал ты сразу сообразишь, когда я запросил lng-ридер.

Это было уже три месяца назад, если ты заметил... А поддержку надо добавлять в ModifyDialogs.

#1439:  Author: FlasherLocation: Москва PostPosted: Mon Jun 24, 2019 13:40
    —
Loopback wrote:
Думаю, стоит это уточнить в справке.
Однозначно.

Loopback wrote:
Где просто какой-нибудь текст (например параметры запуска) - там есть /EV.
В IniRead и RegRead нет. Добавишь?
Loopback wrote:
MsgBox исключение
Вообще-то нет. Все 9 строчных функций поддерживают переменные без /EV.

Loopback wrote:
если ты заметил.
Не суть. Там связь была непосредственная с этим. Просто так от Lng-читалки толку бы не было. Не в переменные среды же записывать. Wink

#1440:  Author: Loopback PostPosted: Mon Jun 24, 2019 14:00
    —
Flasher wrote:
В IniRead и RegRead нет. Добавишь?

Если нет - надо добавить. Кстати, в ini* еще надо бы поддержку редиректов секций добавить.

Flasher wrote:
Вообще-то нет.

Ну ок, раз вопросов не возникало - значит такой вариант достаточен.

Flasher wrote:
Не суть. Там связь была непосредственная с этим. Просто так от Lng-читалки толку бы не было.

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

#1441:  Author: FlasherLocation: Москва PostPosted: Mon Jun 24, 2019 14:08
    —
Loopback wrote:
Кстати, в ini* еще надо бы поддержку редиректов секций добавить.
Было бы недурно.

Loopback wrote:
значит такой вариант достаточен.
В описаниях для строчных? Вероятно.

 Hidden text

#1442:  Author: Loopback PostPosted: Wed Jul 17, 2019 14:39
    —
Выложена новая версия.

2.0.7
+ добавлена поддержка ключа RedirectSection в команды Ini*
+ autorun.cfg теперь может быть в любой юникодной кодировке
+ LngRead теперь должен читать файлы в любых кодировках
+ ModifyDialogs: в тексте команды AddCondition разворачиваются переменные

#1443:  Author: FlasherLocation: Москва PostPosted: Wed Jul 17, 2019 15:52
    —
Loopback
Респект! Вечером проверю.

#1444:  Author: FlasherLocation: Москва PostPosted: Thu Jul 18, 2019 00:03
    —
Переменные в AddCondition проверил. Всё пучком. Cool Теперь могу пройтись по всему списку. Могу позже скинуть уже переделанные под универсальные примеры ModifyDialogs.
Loopback wrote:
Если нет - надо добавить.
Не вижу.
Loopback wrote:
в любых кодировках
Так уж в любых? Smile
autorun.cfg мне пока хватает и в ANSI. Это, видимо, больше для некоторых других языков актуально, где, например, нужно свои комменты писать.

#1445:  Author: Loopback PostPosted: Thu Jul 18, 2019 12:28
    —
Flasher wrote:
Не вижу.

Передумал Very Happy Там только дефолтный текст, вот там реально это может понадобиться?

Flasher wrote:
Так уж в любых?

Ну да, не совсем, UTF32 не поддерживается Embarassed

Flasher wrote:
autorun.cfg мне пока хватает и в ANSI. Это, видимо, больше для некоторых других языков актуально, где, например, нужно свои комменты писать.

Да собственно это побочная фича от изменения LngRead, функция чтения одна для всего, добавлось там - автоматом и здесь. Раньше для конфига из юникода поддерживался только UTF16.

#1446:  Author: FlasherLocation: Москва PostPosted: Thu Jul 18, 2019 13:31
    —
Loopback wrote:
вот там реально это может понадобиться?
Не знаю. Не моделировал такие ситуации пока.

Loopback wrote:
Ну да, не совсем, UTF32 не поддерживается
Полагаю, там список одним UTF32 не ограничивается. Wink

Loopback wrote:
добавлось там - автоматом и здесь.
Ясно.

В общем, по сути-то кроме лёгкой правки хелпа осталась только GetCpuInfo. И всё. Можно будет выдвигать плагин на пьедестал абсолютного почёта Smile, если, конечно, тебе в голову не ударит вернуться к созданию полноценного скриптового движка. Wink

#1447:  Author: Loopback PostPosted: Thu Jul 18, 2019 15:14
    —
Flasher wrote:
Полагаю, там список одним UTF32 не ограничивается.

Надо было уточнить, что "в любой распространенной юникодной кодировке" Wink Конечно, не зная, в какой кодировке файл, из ANSI я могу перекодировать только используя системную кодировку.

Flasher wrote:
осталась только GetCpuInfo

Да, сейчас всё зарелизю и займусь.

Flasher wrote:
если, конечно, тебе в голову не ударит вернуться к созданию полноценного скриптового движка

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

#1448:  Author: FlasherLocation: Москва PostPosted: Thu Jul 18, 2019 15:35
    —
Loopback wrote:
Надо было уточнить, что "в любой распространенной юникодной кодировке"
Это другое дело.

Loopback wrote:
Да, сейчас всё зарелизю и займусь.
Отлично! Только надо ещё кое-что в справке подправить (примеры, в особенности).

Loopback wrote:
От этого придется отказаться.
Это, получается, конфиг на помойку? Я думал, что может быть некая надстройка над имеющимся типа скриптинга в рамках TCMediaInfo.xml.

#1449:  Author: Loopback PostPosted: Thu Jul 18, 2019 22:33
    —
Flasher wrote:
Я думал, что может быть некая надстройка над имеющимся типа скриптинга в рамках TCMediaInfo.xml.

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

#1450:  Author: FlasherLocation: Москва PostPosted: Fri Jul 19, 2019 00:18
    —
Loopback
Если нужно возвращать значения, то внешний скрипт (ещё и с учётом консольного вывода) будет куда медленнее.

Готовя правку примера для chm, столкнулся с такой делемой. Надо из lng-ключа вытащить 5-й элемент в массиве, разделённый по \n:
5102="Вид окна\nОсновные операции\nСодержимое панелей\nЯзык\nПравка/Просмотр\nШрифты\nЦвета\nРазное\nАрхиваторы\nАрхиватор ZIP\nТабуляторы"
Внешний скрипт со Split(Str)(4) для хелпа не годится.
Можно было бы соорудить многоэтажки из StrPos, Set и StrMid, но это тоже нормальным вариантом трудно назвать:
Code:
IniRead LNG %COMMANDER_INI% Configuration LanguageIni
LngRead Edit 5102 '%COMMANDER_PATH%\Language\%LNG%'
StrPos Pos "%Edit%" \n
Set /C Pos %Pos%+2
StrMid Edit "%Edit%" %Pos%
StrPos Pos "%Edit%" \n
Set /C Pos %Pos%+2
StrMid Edit "%Edit%" %Pos%
StrPos Pos "%Edit%" \n
Set /C Pos %Pos%+2
StrMid Edit "%Edit%" %Pos%
StrPos Pos "%Edit%" \n
Set /C Pos %Pos%+2
StrMid Edit "%Edit%" %Pos%
StrPos Pos2 "%Edit%" \n
Set /C Pos %Pos2%-%Pos%
StrMid Edit "%Edit%" %Pos%+2 %Pos%
MsgBox %Edit%
Было бы логично для строчных переменных добавить переключатель /С, чтобы проводить числовые операции с переменными.

Может, сделаешь новую команду (Split или StrRegExpReplace)?

#1451:  Author: Loopback PostPosted: Thu Jul 25, 2019 12:56
    —
Flasher wrote:
Может, сделаешь новую команду (Split или StrRegExpReplace)?

С регэкспом пока повременим. Split я очень люблю, но в чистом виде его тут не сделать, т.к. нет поддержки массивов. Но как раз в тестовой версии MediaInfo из тех же соображений добавлена функция StrPart - разделяет строку по разделителю и возвращает часть с заданным индексом. Как раз то, что надо. Можно перенести ее сюда.

Насчет /C для числовых значений можно подумать, в принципе здравая идея.

#1452:  Author: FlasherLocation: Москва PostPosted: Thu Jul 25, 2019 15:14
    —
Loopback
Split здесь я себе как раз представлял как StrPart. Переноси, конечно. Тогда ждать не буду, под неё пример подгоню.

/С ещё тут не помешал бы: IniRead, IniWrite, GetUptime, MsgBox, RegRead, RegWrite, SendCommand, Sleep, AddControl.

В TCTorrent коснулись ShellExec. Может, тут /SW_SHOWNOACTIVATE тоже стоит добавить? Или от /SW_MINIMIZE следует ждать того же эффекта?

#1453:  Author: Loopback PostPosted: Thu Jul 25, 2019 22:58
    —
Flasher wrote:
Может, тут /SW_SHOWNOACTIVATE тоже стоит добавить? Или от /SW_MINIMIZE следует ждать того же эффекта?

Может и стоит, если актуально. И нет, там эффект другой.

#1454:  Author: FlasherLocation: Москва PostPosted: Fri Jul 26, 2019 01:19
    —
Loopback
Запрашеваемый в любом случае актуальнее имеющегося.

Модифицированный пример скинул в ЛС.

#1455:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Oct 29, 2019 10:31
    —
Loopback
Конечно, до финала версии 9.50 ещё далеко, но изменения в диалоге копирования (из-за новых кнопок) уже несомненны, непригодность указанных в справке примеров настроек для изменённого диалога — тоже (там всё прекрасно видно и не требует длинных пояснений), так что проработать в тестовом режиме подгонку Autorun_ModifyDialogs к новой версии диалога копирования было бы очень неплохо.

#1456:  Author: FlasherLocation: Москва PostPosted: Tue Oct 29, 2019 13:41
    —
Avada
С учётом появление нечитабельных кнопок F7/F8 (в отличии от сохранения настроек перезаписи) актуальность в уменьшении диалога потерялась.
Для перестановки и равнения кнопок могу пока только для x32 вариант предложить:
Code:
# Настройки окна копирования/перемещения
If %AUTORUN_TCARCH% = 32 Then

# Индексы кнопок:
# [В очередь:1], [Опции:2], [Отмена:3], [Дерево:4], [OK:5]

AddDialog DIALOG_COPYMOVE
AddControl /X:-4 /W:-2 TMyComboBox 2
AddControl /X:-4 /W:-2 TMyComboBox 1
AddControl /X:-4 TMyCheckBox 2
AddControl /X:4 /Y:-2 /W:-8 TButton 5
AddControl /QUEUEBTN /X:-5 /Y:-2 /W:-8 TButton 1
AddControl /X:-13 /Y:-2 /W:11 TButton 4
AddControl /X:-95 /Y:-2 /W:-8 TButton 2
AddControl /X:101 /Y:-2 /W:13 TButton 3
AddControl /X:1 /W:2 TMyGroupBox 1

AddDialog DIALOG_COPYMOVE_PINNED
AddControl /X:-4 /W:-2 TMyComboBox 2
AddControl /X:-4 /W:-2 TMyComboBox 3
AddControl /X:-4 TMyCheckBox 2
AddControl /X:4 /Y:-2 /W:-8 TButton 5
AddControl /QUEUEBTN /X:-5 /Y:-2 /W:-8 TButton 1
AddControl /X:-13 /Y:-2 /W:11 TButton 4
AddControl /X:101 /Y:-2 /W:13 TButton 3
AddControl /X:1 /W:2 TMyGroupBox 1

Else

 # Тут для x64

EndIf

ModifyDialogs


Last edited by Flasher on Wed Oct 30, 2019 06:33; edited 2 times in total

#1457:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Oct 29, 2019 14:02
    —
Flasher
Спасибо, но меня там интересовала несколько другая перестановка кнопок с выносом "Опций" из основного ряда наверх. Ничего, подожду.

#1458:  Author: FlasherLocation: Москва PostPosted: Tue Oct 29, 2019 14:35
    —
Avada

 Мне там дырка спереди не нравится.


Last edited by Flasher on Wed Oct 30, 2019 13:29; edited 2 times in total

#1459:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Oct 29, 2019 16:04
    —
Flasher
Спасибо. А дырка спереди меня не напрягает. Осталось дождаться 64-битного варианта. (Самому возиться, увы, времени нет.)

#1460:  Author: FlasherLocation: Москва PostPosted: Tue Oct 29, 2019 16:42
    —
Avada
Ну, если ты дашь подобный скрин распахнутого дерева к диалогу в WinScanner, то, думаю, быстро получится допилить.

Loopback wrote:
Flasher wrote:
осталась только GetCpuInfo

Да, сейчас всё зарелизю и займусь.

Уже 4-й месяц ждём'с. Rolling Eyes

#1461:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Oct 30, 2019 11:53
    —
Flasher
Скрин в личке.

#1462:  Author: FlasherLocation: Москва PostPosted: Wed Oct 30, 2019 13:34
    —
Avada
Поправил. Проверь. Но это если диалоги на обеих битностях ничем внешне не отличаются. Допускаю, что есть промашка с LCLComboBox в режиме кнопки-гвоздика. В этом режиме скрин тоже бы не помешал.

#1463:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Oct 30, 2019 16:00
    —
Flasher
Нет, на x64 пока не вышло. Скрин с результатом в ЛС. Новый скрин с деревом возможен позже (и возможно, даже не сегодня), мне сейчас не до того.

#1464:  Author: FlasherLocation: Москва PostPosted: Wed Oct 30, 2019 16:24
    —
Avada
Значит, отличия есть. Тогда я пока пас.

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

#1465:  Author: Hedin PostPosted: Sun Dec 01, 2019 13:44
    —
Подскажите, можно ли плагином менять размеры надписей на форме, в частности в окне копирования файлов?



Само-то окно получилось уменьшить/увеличить и кнопки, а вот надписи нет.

Ещё вопрос, как можно победить неправильно растянутый элемент TListBox в этом окне?
Это нерастянутый элемент TListBox . Как видим всё нормально.
http://i111.fastpic.ru/big/2019/1201/29/222250ffb045556a65f817b4fba64329.png

А это растянутый. Как видим все эти квадратики, где должны быть иконки выглядят растянутыми в два раза примерно в ширину ввместо того, чтобы просто поместить в два раза больше иконок на тоже место.
http://i111.fastpic.ru/big/2019/1201/be/53740fcbfd9b722f1cd252ae183588be.png

#1466:  Author: FlasherLocation: Москва PostPosted: Mon Dec 02, 2019 19:57
    —
Hedin wrote:
можно ли плагином менять размеры надписей на форме, в частности в окне копирования файлов?
Нет, это обсуждалось.
Честно говоря, не понимаю, зачем лишать себя F2/F7/F8 кнопок.

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

P.S.: Зачем же так ломать своё зрение кислотно-болотным цветом. Я аж прослезился...

#1467:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Dec 06, 2019 13:49
    —
Hedin
Во-первых, замечание за нарушение правил форума (добавление неформатных картинок). Излишества заменены ссылками.
Во-вторых, это уже действительно не раз обсуждалось. А про кнопки, если помните, был разговор ещё в июле на ру-борде, где вы регистрировались под другим ником, но предъявляли похожие картинки, только те выглядели поприличнее. Там уже говорилось, что надо и что не надо делать. Не тратьте попусту время и не уродуйте диалоги — ожидаемого эффекта вы не добьётесь.

#1468:  Author: MVVLocation: Ростов-Дон PostPosted: Mon Dec 09, 2019 09:59
    —
На самом деле, поведение списка выглядит весьма странным. И, исходя из того, что оригинальный список в Delphi в принципе не умеет быть горизонтальным, это чисто разработка Гислера, и вряд ли такое поведение было запланировано явно (уж очень оно нетрадиционно), скорее всего просто недоделка, и есть шанс, что он согласится её поправить (сообщил о баге). Тем более, что в других режимах (у файловых панелей, где используется тот же компонент) поведение при изменении размера нормальное. И в 64-битном тотале всё хорошо.

Сослаться на предыдущее обсуждение, возможно, имело смысл. Но автора вопроса я в целом понимаю. Инструменты из серии Ultra TC Editors главным образом не принимаю из-за Visulal Basic, на котором они написаны, и необходимости в древних библиотеках.

PS. Эксклюзивная тема оформления действительно замечательно связывает сообщения. Laughing

#1469:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Dec 09, 2019 11:56
    —
MVV
За баг-репорт спасибо. Что же касается "в целом понимаю" и "не принимаю", то объективно в Ultra TC Editors слишком много уникальных возможностей и удобств, чтобы я, например, хоть на секунду отказался от него по любым соображениям. Autorun, впрочем, это тоже касается.


Last edited by Avada on Mon Jan 20, 2020 09:06; edited 1 time in total

#1470:  Author: LonerDLocation: Макеевка PostPosted: Wed Dec 11, 2019 16:59
    —
Загружаю два шрифта через LoadFont (ArialMod.ttf и Anonymous.ttf).
После закрытия Тотала ArialMod выгружается, а Anonymous нет. Пробовал менять их порядок загрузки, оставлять один шрифт, TC 32 и 64 битный запускать - всё-равно Anonymous висит.
LockHunter показывает, что его использует процесс System и процесс svchost.exe (Service: FontCache), но выгрузить System не может.
Другие программы не используют этот шрифт после закрытия Тотала.
TC 9.50beta, Win 10 x64 с последними обновлениями. Пытался подсунуть старые версии плагина - всё-равно не выгружает шрифт. Как было раньше - не обращал внимания, вроде поначалу (когда несколько лет назад стал подгружать шрифты) такой ситуации не было, а потом стала возникать.
Куда копать, в чём может быть подвох, как выгрузить шрифт и почему не выгружается только именно этот?

#1471:  Author: Skif_off PostPosted: Fri Dec 13, 2019 14:44
    —
LonerD
AkelPad нормально этот Anonymous загружает-выгружает? Там вроде те же самые AddFontResourceExW/RemoveFontResourceExW.
В смысле, может, с файлом что не то?

#1472:  Author: Hedin PostPosted: Sun Dec 22, 2019 14:28
    —
Flasher
Flasher wrote:
Нет, это обсуждалось.

Flasher wrote:
Похожий эффект будет и при открытие тулбара как меню в горизонтальном ключе (с -2 между кнопками).

Не понял, о чём речь, возможно вчитаюсь...
Flasher wrote:
Честно говоря, не понимаю, зачем лишать себя F2/F7/F8 кнопок.

Эээ, это Вы о чём? В смысле кнопок F2/F7/F8? Я про надписи спрашивал.
Flasher wrote:
P.S.: Зачем же так ломать своё зрение кислотно-болотным цветом. Я аж прослезился...

Я несколько лет такую тему использую. Не помню точно, откуда брал цвет, возможно из оливковой темы Windows XP или по мотивам. Ну, в общем выбирал по ощущениям. PS А я думал это оливковыйSmile Я вообще недавно перебирал несколько тем, классическую Windows 7, современную Windows 7 (полупрозрачную или как её там), ещё пробовал перенести цвета из 3-х тем оформления WinXP (синяя, оливковая и серебристая) на классическую тему Windows 7 (фигня получилась) и понял, что ни какую другую тему оформления не хочу использовать, кроме своей, настолько здорово её подобрал несколько лет назад.

Avada
Avada wrote:
Во-первых, замечание за нарушение правил форума (добавление неформатных картинок). Излишества заменены ссылками.

Буду знать, ok.
Avada wrote:
А про кнопки, если помните, был разговор ещё в июле на ру-борде, где вы регистрировались под другим ником, но предъявляли похожие картинки, только те выглядели поприличнее.

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

MVV
MVV wrote:
сообщил о баге

Здорово! Давно хотел, чтобы это всё поправилось!
MVV wrote:
Эксклюзивная тема оформления действительно замечательно связывает сообщения.

)))

PS Не понимаю всё-таки смысл использования Ultra ЕС Editors. Разбабаханный он, много кнопок для практически ничего.
Единственное - это то, что недавно узнал, что в Configuration Editor есть дополнительная информация о параметрах wincmd.ini, которой нет в англ. справке TC и в русской справке TC из Полного набора русификации (http://wincmd.ru/plugring/ext_rus.html). Это действительно есть смысл использовать. К тому же удобно, есть поиск по параметрам, по имени, по описанию, этого не достигнешь, используя справку. Удобно, подумываю, чтобы как справочник использовать на постоянной основе.

#1473:  Author: FlasherLocation: Москва PostPosted: Sun Dec 22, 2019 15:45
    —
Hedin wrote:
Эээ, это Вы о чём? В смысле кнопок F2/F7/F8? Я про надписи спрашивал.
Я писал не в отношении вопроса. На скриншоте эти полезные кнопки вырезаны из диалога.

 Hidden text

#1474:  Author: Hedin PostPosted: Sun Dec 22, 2019 17:23
    —
Flasher
Flasher wrote:
На скриншоте эти полезные кнопки вырезаны из диалога.

На моём этом скриншоте?
http://i111.fastpic.ru/big/2019/1201/4b/44ce737e2535d2b072987c57b7f62c4b.gif
Там же ничего не вырезано.

#1475:  Author: FlasherLocation: Москва PostPosted: Sun Dec 22, 2019 17:55
    —
Hedin wrote:
Там же ничего не вырезано.
Ну, конечно...

#1476:  Author: Hedin PostPosted: Sun Dec 22, 2019 20:36
    —
Flasher
Дак на моём скриншоте другое окно.

#1477:  Author: FlasherLocation: Москва PostPosted: Sun Dec 22, 2019 20:50
    —
Hedin
Уф... Окно прогресса. Точно. Тады пардон.

#1478:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Dec 22, 2019 20:50
    —
Hedin
Да, другое. И вырезать, скорее всего, там ничего не удастся. И очень хорошо, потому что никаких лишних надписей там нет. По-моему, вы переходите ту грань, за которой вместо разумного усовершенствования диалогов начинаются попытки издевательства над программой.
А то, что вы не понимаете смысл использования Ultra TC Editors, очень печально, конечно, но разводить тут оффтоп с разъяснениями ваших заблужений я не собираюсь.

#1479:  Author: LonerDLocation: Макеевка PostPosted: Tue Jan 14, 2020 23:07
    —
На версии 2.0.2 шрифты выгружаются.
На 2.0.7 - нет, то один шрифт, то оба (причём загружаются настолько усердно, что потом даже при перезапуске этой копии Тотала с плагином версии 2.0.2 не выгружаются).
Win10 x64 Home и Enterprise. TC 9.50 беты.
Если кто может - проверьте, чтобы подтвердить/опровергнуть.

https://www.upload.ee/files/10978716/Fonts.rar.html
Code:
LoadFont /N System\Fonts\ArialMod.ttf
LoadFont /N System\Fonts\Anonymous.ttf



Skif_off wrote:
AkelPad нормально этот Anonymous загружает-выгружает?

Да. И Тотал со старой версией Autorun-плагина тоже.


Last edited by LonerD on Mon Jan 20, 2020 05:34; edited 1 time in total

#1480:  Author: Hedin PostPosted: Mon Jan 20, 2020 03:17
    —
Avada wrote:
Hedin
И вырезать, скорее всего, там ничего не удастся.

Я и не собирался. Мне надо было там поменять размер надписей, передвинуть их. Ну, нет, так нет.

#1481:  Author: FlasherLocation: Москва PostPosted: Mon Jan 20, 2020 03:57
    —
Hedin
Я же вам ссылку на обсуждение в первом же предложении привёл. Что тут ещё можно обсуждать?
 P.S.:

#1482:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Jan 20, 2020 08:53
    —
Hedin
Во-первых, вам про динамические контролы действительно ответили сразу же. Во-вторых, в исходном посте речь шла про изменение размера, но не про передвижку (смысл которой мне тут вообще непонятен). В-третьих, даже с вроде бы хорошо отработанными статическими элементами диалогов в TC разной битности и разных версий при вмешательстве через плагин могут наблюдаться самые разные непредсказуемые эффекты.
(Кстати, по увеличению числа кнопок в диалоге настройки панели инструментов, если обратили внимание, дано отрицательное заключение разработчика. Это не недоделка, а концепция, менять которую он явно не намерен.)

#1483:  Author: Hedin PostPosted: Wed Jan 22, 2020 20:42
    —
Avada
Quote:
Во-вторых, в исходном посте речь шла про изменение размера, но не про передвижку (смысл которой мне тут вообще непонятен).

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

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

Спасибо, буду знать.

Quote:
(Кстати, по увеличению числа кнопок в диалоге настройки панели инструментов, если обратили внимание, дано отрицательное заключение разработчика.)

Я это уже читал. MVV приводил эту ссылку, я ему ответил.

#1484:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 22, 2020 21:32
    —
Hedin wrote:
Я это уже читал. MVV приводил эту ссылку, я ему ответил.

Да, но по вашей реакции можно предположить, что ту тему вы либо на момент этого ответа не прочитали, либо не поняли прочитанное.
И что по второй вашей хотелке тоже ожидать нечего, думаю, уже понятно. Се ля ви.

#1485:  Author: Hedin PostPosted: Thu Jan 30, 2020 01:24
    —
Avada wrote:
Да, но по вашей реакции можно предположить, что ту тему вы либо на момент этого ответа не прочитали, либо не поняли прочитанное.

Да нет, там всё понятно.
Avada wrote:
И что по второй вашей хотелке тоже ожидать нечего, думаю, уже понятно. Се ля ви.

Я так и написал - "ну, нет, так нет".

#1486:  Author: Loopback PostPosted: Tue Mar 17, 2020 00:14
    —
И снова здравствуйте :)

Наконец, новая версия:

Code:
2.0.8
+ добавлена команда StrPart
+ добавлена команда GetCpuInfo в плагин Sysinfo


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

Предварительный синтасксис:

Code:
ControlSetMouseAction [switches] "" <индекс контрола> <CMD|EMCMD> <команда>


/R /L /M - соответствующие кнопки мыши, срабатывает на нажатие
/R:U /L:U /M:U - то же, но на отпускание
/R:D /L:D /M:D - даблклик

/W - колесо (в любую сторону)
/W:F - колесо вперед
/W:R - колесо назад

Для всех вариантов возможны модификаторы:
/K:C /K:S /K:A - Ctrl, Shift, Alt

Для колеса как модификаторы также можно использовать другие кнопки мыши
/K:R /K:L /K:M /K:X1 /K:X2
Теоретически, если верить Microsoft, их можно и как комбинацию для других кнопок мыши использовать, но я что-то с трудом такой вариант представляю.

Специальный параметр:
/B:1 - /B:7
Применяется для указания нужной кнопки на нижней панели.


<индекс контрола> - в тотале 9.0, оказывается, появилась возможность быстро, надежно и единообразно для любой битности получать хэндлы элементов окна через сообщение WM_USER+50. Список индексов, найден на ghisler.ch:

 Hidden text


Сначала начал делать "классическим" методом, Class+Instance, но потом обнаружил эту замечательную возможность. Старый метод буду убирать, все элементы главного окна доступны новым методом.

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

Примеры:

Code:
ControlSetMouseAction /R /B:7 "" 17 EMCMD em_tcutils_tcmenupopup %COMMANDER_PATH%\Config\Exit.mnu

Открывает меню через утилиту TcPopupMenu по правому клику на кнопке выхода в нижней панели.

Code:
ControlSetMouseAction /W:F /K:R "" 7 CMD 570
ControlSetMouseAction /W:R /K:R "" 7 CMD 571

Листает колесом историю каталогов при наведении на левую панель размера файлов и нажатой правой кнопке мыши (аналогично встроенной возможности листать историю колесом с зажатым Shift).

#1487:  Author: FlasherLocation: Москва PostPosted: Tue Mar 17, 2020 02:18
    —
Loopback
И снова приветствуем. )

Спасибо за запрошенные GetCpuInfo (7 лет, етить-колотить! Surprised) и StrPart! Проверку прошли на ура! Smile
ControlSetMouseAction — неплохая идея. Вероятно, поможет избавиться от парочки резидентных скриптов вроде этого. Может, и с прокруткой табов справится с учётом?
Жаль только что-то посложнее (1, 2) не сделать. Sad
С функц. клавишами, правда, не срастётся, панель у меня убрана за ненадобностью.
К слову, у WM_USER+50 темка имеется.

Мой вопрос видел? А от Avada?

Смотрю, последняя порция правок в help так и не внесена.
/С для 19 команд и /SW_SHOWNOACTIVATE также подвисли в ожидании.

#1488:  Author: Loopback PostPosted: Tue Mar 17, 2020 16:56
    —
Flasher wrote:

Спасибо за запрошенные GetCpuInfo (7 лет, етить-колотить! Surprised)

Сам не ожидал, думал эпопея в прошлом году началась, а оно аж с 13 года Very Happy
Flasher wrote:

Может, и с прокруткой табов справится с учётом?


Такая конструкция будет работать, но только для активного окна, так работают команды 3005/3006.
Code:
ControlSetMouseAction /W:F "" 26 CMD 3006
ControlSetMouseAction /W:R "" 26 CMD 3005
ControlSetMouseAction /W:F "" 27 CMD 3006
ControlSetMouseAction /W:R "" 27 CMD 3005


Flasher wrote:

Жаль только что-то посложнее

Ну оно и не планировалось как комбайн.

Flasher wrote:

Мой вопрос видел? А от Avada?

Видел. Просто урезать нельзя. Нечто отдаленно похожее организуется работой с регионами (пример на Autoit), но результат выглядит крайне коряво.

Да и вообще, я уже писал, что у меня давно нет интереса к курочению окон тотала. Последняя версия плагина делалась с расчетом, чтобы больше мне к нему не возвращаться, функционал я считаю исчерпывающим. Вот только не надо было оставлять "простой" режим Confused А режим NARROW теперь совсем всё, можно его убирать.

Для 32 битной версии 9.50 сейчас стандартным можно считать такой вариант:

Code:

AddCondition /VISIBLE:1 "TButton" 2
AddControl /X:17 /Y:-74 /W:-20 "TButton" 2
AddControl /X:109 "TButton" 1
AddControl /X:109 "TButton" 3
AddControl /X:109 "TButton" 4
AddControl /X:109 "TButton" 5

AddDialog DIALOG_COPYMOVE_PINNED
AddControl /X:109 "TButton" 1
AddControl /X:109 "TButton" 3
AddControl /X:109 "TButton" 4
AddControl /X:109 "TButton" 5


С 64 всё стало сложнее. Тов. Гислер почему-то передумал прятать кнопку "Опции" при открытии прикрепленного окна. Он теперь ее уводит за пределы окна. Соответственно, условие перестало работать. Придется где-то допиливать.
Нет, это кажется в другом месте ошибка: плагин не понимает RedirectSection. В любом случае надо исправить.

Flasher wrote:

Смотрю, последняя порция правок в help так и не внесена.

Вижу только 2 правки от 30 октября, из них одна учтена. Вторая: /QUEUEBTN давно упразднён и не работает в коде.

Flasher wrote:

/С для 19 команд и /SW_SHOWNOACTIVATE также подвисли в ожидании.

SW_SHOWNOACTIVATE сделал, в след. версии.

А вот /C потому и подвисли, что "19" команд... куча работы. Да и при ближайшем рассмотрении всё не так просто и очевидно, как может показаться.

Если в команде присутствует числовое значение (StrLeft, StrMid и т.д.) - его при наличии ключа /С можно смело вычислять. В принципе это логично и может сократить лишние Set-ы. Хотя для Sleep и SendCommand - это называется сделать только ради того, чтобы было.

А вот целесообразность использования в командах со строчными значениями (например IniRead, MsgBox, а особенно GetUptime) мне неочевидна. Блок вычисления не работает со строками, т.е. при использовании вычисления теряется возможность конкатенации. Т.е. при любых вычислениях на выходе будет число или True/False.

Тут еще возникает проблема в случае, когда в команде более одного параметра. Какое из них вычислять? Вычислять все будет неправильно. Пример: строка "Button-1" без вычисления вернет "Button-1", а с вычислением "-1", т.к. для арифметической операции строка "Button" воспринимается как 0. Следовательно, придется городить еще какой-то механизм задания вычисляемых параметров.

#1489:  Author: FlasherLocation: Москва PostPosted: Tue Mar 17, 2020 19:13
    —
Loopback wrote:
Такая конструкция будет работать, но только для активного окна
У меня на TC 9.51 RC5 x32 не завелось. Отключение ScrollTC не помогает.
Loopback wrote:
Ну оно и не планировалось как комбайн.
Но вообще ты подумай над самой фичей с Esc. Может, и без плагина удастся добавить.

Loopback wrote:
Видел. Просто урезать нельзя.
Жаль.

Loopback wrote:
А режим NARROW теперь совсем всё, можно его убирать.
О как. )

Loopback wrote:
Вижу только 2 правки от 30 октября, из них одна учтена.
См. 3 сообщения от 20 и 26 июля.

Loopback wrote:
всё не так просто и очевидно, как может показаться.
А казалось именно так. Smile
Loopback wrote:
Хотя для Sleep и SendCommand - это называется сделать только ради того, чтобы было.
В слипе может быть множитель (коэффициент) для предусловий выполнений без ожидания.
А в SendCommand — сложение и вычитание для сопряжённых (левая/правая либо активная/пассивная панель) индексов команд. В приведённом скрипте с Esc для SendMessage это можно наблюдать. WM_USER+50 тут как раз кстати. Как пример — первые пару условий для Select Case.

Loopback wrote:
А вот целесообразность использования в командах со строчными значениями (например IniRead, MsgBox, а особенно GetUptime) мне неочевидна.
Для IniRead в отличии от IniWrite не столь важно.
MsgBox нужен для отладки. Там смысл расчётов при получении нужного числа для потенциальной вставки формулы в другую команду вполне очевиден.
Аналогично и в отношении получения санти/децисекунд для GetUptime.
Loopback wrote:
Блок вычисления не работает со строками
Я надеюсь, пока не работает. )
Loopback wrote:
Какое из них вычислять?
То, которое после возвращения значений переменных будет иметь только цифры и вычислительные знаки. Или можно придумать какой-то экранный знак (~@$*ℱ) или обёртку из пары знаков (угловые/фигурные скобки, к примеру).

#1490:  Author: Loopback PostPosted: Tue Mar 17, 2020 21:28
    —
Flasher wrote:
У меня на TC 9.51 RC5 x32 не завелось.

Странно, на той же версии работает.

Flasher wrote:
О как. )

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

Наверно все же лучше сделать для команды ключи типа /920 /950 и т.д., со своими наборами дефолтных настроек, чтобы не возникло неоднозначности.

Flasher wrote:

См. 3 сообщения от 20 и 26 июля.

Да, нашел, там прилично, оказывается. Пример на тот момент был неактуален, не было StrPart. Сейчас всё добавил.

Flasher wrote:
В слипе может быть множитель (коэффициент) для предусловий выполнений без ожидания.
А в SendCommand — сложение и вычитание для сопряжённых (левая/правая либо активная/пассивная панель) индексов команд. В приведённом скрипте с Esc для SendMessage это можно наблюдать. WM_USER+50 тут как раз кстати. Как пример — первые пару условий для Select Case.

С натяжкой, но допустим.

Flasher wrote:
Для IniRead в отличии от IniWrite не столь важно.
MsgBox нужен для отладки. Там смысл расчётов при получении нужного числа для потенциальной вставки формулы в другую команду вполне очевиден.
Аналогично и в отношении получения санти/децисекунд для GetUptime.

MsgBox ок.
GetUptime не принимает никаких параметров, тогда был просто разговор, что можно будет добавить, если понадобится. Но вроде и не понадобилось.
Flasher wrote:
Я надеюсь, пока не работает. )

Flasher wrote:
То, которое после возвращения значений переменных будет иметь только цифры и вычислительные знаки. Или можно придумать какой-то экранный знак (~@$*ℱ) или обёртку из пары знаков (угловые/фигурные скобки, к примеру).

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

В общем склоняюсь к тому, чтобы сделать для всех команд с числовыми значениями (Sleep, StrLeft, StrRight, StrMid, StrPart), причем надо подумать, возможно, даже и ключ в таких случаях не нужен - сломаться ничего не должно. Также MsgBox, SetEnv, SendCommand - тут с ключом. Остальное пока нет.

#1491:  Author: FlasherLocation: Москва PostPosted: Wed Mar 18, 2020 00:26
    —
Loopback wrote:
Странно, на той же версии работает.
Не знаю. У меня просто файловая панель прокручивается, и всё. /K:C или /K:A не помогли. /K:R как модификатор вроде как не годится, т. к. по-любому меню выскочит.
/X1 и /X2 не упомянуты. Поддерживаются?
Loopback wrote:
Наверно все же лучше сделать для команды ключи типа /920 /950 и т.д., со своими наборами дефолтных настроек, чтобы не возникло неоднозначности.
Не, не надо. Вдруг Гислеру приспичит в новой версии опять что-то поменять и сдвинуть, как процессе бет он двигал кнопки. Пусть будет кастомный вариант.
Loopback wrote:
Но вроде и не понадобилось.
Мне подумалось, что логировать будет удобней в более комфортных единицах. В т. ч. в double для секунд.
Loopback wrote:
В общем склоняюсь к тому, чтобы сделать для всех команд с числовыми значениями (Sleep, StrLeft, StrRight, StrMid, StrPart)
StrPos ещё.
Loopback wrote:
Остальное пока нет.
А как же IniWrite, RegWrite и уж точно AddControl, где сплошные числа?

#1492:  Author: Loopback PostPosted: Wed Mar 18, 2020 13:01
    —
Flasher wrote:
Не знаю. У меня просто файловая панель прокручивается, и всё. /K:C или /K:A не помогли. /K:R как модификатор вроде как не годится, т. к. по-любому меню выскочит.
/X1 и /X2 не упомянуты. Поддерживаются?

При наведении на табы - прокручивается панель?
/X1 и /X2 только в виде модификаторов. Можно и как основные добавить, просто мне их проверять не на чем.
Flasher wrote:
Не, не надо. Вдруг Гислеру приспичит в новой версии опять что-то поменять и сдвинуть, как процессе бет он двигал кнопки. Пусть будет кастомный вариант.

Поздно Smile Кастомный вариант в любом случае никуда не денется. Но было необходимо избавиться от /NARROW, который не применим к новым версиям.
Flasher wrote:
StrPos ещё.

В нем нет числовых значений.
Flasher wrote:
А как же IniWrite, RegWrite

Code:
<секция> <ключ> [<текст>]
<ключ> <параметр> <тип> <значение> [<значение2>..<значениеN>]

Хм, и где здесь числа?
Flasher wrote:
AddControl, где сплошные числа?

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

#1493:  Author: LonerDLocation: Макеевка PostPosted: Wed Mar 18, 2020 14:55
    —
Loopback wrote:
Такая конструкция будет работать, но только для активного окна, так работают команды 3005/3006.

Работает, но прокручивается только активная панель. Последовательно cmd команды выполнять можно? Наподобие такого:
Code:
ControlSetMouseAction /W:F "" 26 CMD 4001,3006
ControlSetMouseAction /W:R "" 26 CMD 4001,3005
ControlSetMouseAction /W:F "" 27 CMD 4002,3006
ControlSetMouseAction /W:R "" 27 CMD 4002,3005


Было бы неплохо иметь возможность временно отключать-включать функционал после запуска тотала.
Например, присвоить вышеуказанной секции какое-то имя и сделать возможность назначать пользовательские команды наподобие:
Autorun_Misc.dll имя_секции ON
Autorun_Misc.dll имя_секции OFF

#1494:  Author: FlasherLocation: Москва PostPosted: Wed Mar 18, 2020 15:37
    —
Loopback wrote:
При наведении на табы - прокручивается панель?
Ага. Вообще при наведении в окно ТС.
Loopback wrote:
/X1 и /X2 только в виде модификаторов.
/K:X1 и /K:X2 я видел, но это про другое.
Loopback wrote:
Можно и как основные добавить, просто мне их проверять не на чем.
Нужно. Я тебе первой ссылкой пример, которым пользуюсь, скинул.
Loopback wrote:
В нем нет числовых значений.
А в переменную нельзя сделать запись с вычислением?
Loopback wrote:
Хм, и где здесь числа?
Так куча значений/параметров ключей записывается в числовом виде.
Loopback wrote:
А в параметрах со слешами вообще не получится использовать вычисления.
Ясно.

#1495:  Author: Loopback PostPosted: Wed Mar 18, 2020 16:39
    —
LonerD wrote:
Работает, но прокручивается только активная панель.

Ну да, я же про это и писал.
LonerD wrote:
Последовательно cmd команды выполнять можно? Наподобие такого:

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

Вот с этим проблематично. Autorun как бы вообще не предназначался для таких сценариев.

Во-первых, это dll, и в таком варианте ее придется вызывать через exe-враппер (например, тот же rundll32). Во-вторых, естественно, команду нужно как-то передавать в процесс, где загружена рабочая версия dll. Нельзя сказать, что это невозможно, но простых путей тут нет.
Flasher wrote:
Нужно. Я тебе первой ссылкой пример, которым пользуюсь, скинул.

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

В смысле? Разве Set не для этого?
Flasher wrote:
Так куча значений/параметров ключей записывается в числовом виде.

Тем не менее это не делает сами параметры числовыми.

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

#1496:  Author: FlasherLocation: Москва PostPosted: Wed Mar 18, 2020 16:58
    —
Loopback wrote:
Ну да, я же про это и писал.
Т.е. "не работает". Как если бы строк в конфиге не было.
Loopback wrote:
Ок, поддержку допкнопок добавлю.
Гуд. Только бы ещё завелось это всё.
Кстати, а хэндлы ты получаешь только при запуске плагина? После скрытия/показа компонентов окна ТС они обновятся — и привет.
Loopback wrote:
В смысле? Разве Set не для этого?
Имеется в виду StrPos Name+1 ...
Loopback wrote:
Тем не менее это не делает сами параметры числовыми.
Я о нужде больше.

#1497:  Author: Loopback PostPosted: Fri Mar 20, 2020 19:07
    —
Бета-версия.

2.0.9 beta
+ в выражениях добавлена поддержка ключевых слов "not", "true", "false"
+ более детальная обработка ошибок в выражениях
+ в выражениях добавлен ключевой символ "&" для конкатенации
+ добавлена возможность вычислений в любом неименованном параметре путем добавления спецсимвола % перед кавычками
+ добавлен новый плагин Tweaks с некоторыми небольшими дополнениями для TC
* ModifyDialogs: удален переключатель /NANRROW для новых версий, в версии TC 9.20-9.21 можно использовать /VER:920N
+ ModifyDialogs: настройки "простого" режима адаптированы под новые диалоги в версии 9.50
- ModifyDialogs: исправлено чтение ShowCopyOptions из секции, перенаправленной с RedirectSection
+ В ShellExec добавлен флаг SW_SHOWNOACTIVATE

В общем, чем лепить кучу /С где надо и где не надо, проще оказалось сделать "вычисляемость" единообразно для всех параметров (не переключателей!). Вычисления производятся при указании % непосредственно перед кавычками. Т.е. вычисления обязательно должны быть в кавычках (внутри для строк можно использовать другие кавычки). Строки внутри вычисляемой строки сейчас нестрогие, т.е. если строка не содержит зарезервированных символов и не является ключевым словом, ее можно не брать в кавычки, хотя это и не очень правильно. Возможно, все же правильнее будет сделать строгие строки.

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

Справка пока не обновлялась, т.к. возможны изменения.

Flasher wrote:
Т.е. "не работает". Как если бы строк в конфиге не было.

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

Flasher wrote:
Гуд. Только бы ещё завелось это всё.
Кстати, а хэндлы ты получаешь только при запуске плагина? После скрытия/показа компонентов окна ТС они обновятся — и привет.

Добавил дополнительные кнопки, можешь попробовать (он теперь Tweaks называется). В справке описание (сырое) есть.

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

#1498:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 00:22
    —
Loopback wrote:
+ в выражениях добавлена поддержка ключевых слов "not", "true", "false"
+ более детальная обработка ошибок в выражениях
+ в выражениях добавлен ключевой символ "&" для конкатенации
А можно по примерчику? Not же ты давно добавил.

Loopback wrote:
проще оказалось сделать "вычисляемость" единообразно для всех параметров (не переключателей!). Вычисления производятся при указании % непосредственно перед кавычками.
Т. е. предложение поизгаляться и прикрутить "костыль" силу таки возымело. Smile
Loopback wrote:
т.е. если строка не содержит зарезервированных символов и не является ключевым словом, ее можно не брать в кавычки
Можно конкретизировать по символам и ключевым словам?
Loopback wrote:
Справка пока не обновлялась, т.к. возможны изменения.
И тем не менее новая порция в ЛС от меня последовала (по новинкам — в меньшей степени). Smile
Loopback wrote:
Ну не знаю, без этого кода у меня вкладки колесом не переключаются, а с ним да.
Ещё бы они без этого кода переключались. Ты бы какой отладчик выслал что ли. Rolling Eyes

Loopback wrote:
Добавил дополнительные кнопки, можешь попробовать
Не, ни в какую плагин не хочет заводиться. Сперва на сортировке проверял:
Code:
ControlSetMouseAction /X1 "" 3 CMD 321
ControlSetMouseAction /X2 "" 3 CMD 322
Win 7 x32 виртуальная у тебя есть вроде. Посмотри там.
Loopback wrote:
если окно полученное ранее не существует.
Ранее — это на момент запуска плагина? Я же пишу про switch-команды в процессе работы ТС. Нужно всегда получать, конечно.

#1499:  Author: Loopback PostPosted: Sat Mar 21, 2020 01:53
    —
Flasher wrote:
А можно по примерчику? Not же ты давно добавил.

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

Пример... ну поэкспериментируй с разной арифметикой и выражениями, для чего-то ты же хотел эту возможность? Very Happy Например, такое должно работать:
Code:

%'"Pa&ram_" & (%aaa%+1)'   --> Pa&ram_2 (при %aaa% = 1)
---
if (%aaa% = 1) and not (%bbb% > 10) then
---
Set num 1
StrPos %"var&(%num%-1)" "abcdefgh" "d"
MsgBox %var0% --> 4


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

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

Flasher wrote:
Можно конкретизировать по символам и ключевым словам?

+-/*=()&<> разделители
and,or,not, true,false - зарезервированные ключевые слова
Flasher wrote:
И тем не менее новая порция в ЛС от меня последовала (по новинкам — в меньшей степени).

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

Flasher wrote:
Не, ни в какую плагин не хочет заводиться.

Прошу прощения, забыл здесь упомянуть (в справке уже есть), что синтаксис немного поменялся, неиспользуемый "" убрал. Теперь так:
ControlSetMouseAction /X1 3 CMD 321
Но кстати говоря, именно 3 и 4 скорее всего не заработают, потому что:
Flasher wrote:
Ранее — это на момент запуска плагина? Я же пишу про switch-команды в процессе работы ТС. Нужно всегда получать, конечно.

Да. Плагин его получает заново, если хэндл, сохраненный при запуске, не существует. Но именно для индексов 3 и 4 (они по-сути виртуальные) так работать не будет. Надо поправить.

#1500:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 03:32
    —
Loopback wrote:
Пример... ну поэкспериментируй с разной арифметикой и выражениями
Вот если бы ты не показал, я бы и не понял, что это именно так должно выглядеть.
Loopback wrote:
для чего-то ты же хотел эту возможность? Very Happy
Какую? Я ни про &, ни про true/false, ни про детальную обработку ошибок ничего не писал.
Code:
%'"Pa&ram_" & (%aaa%+1)'   --> Pa&ram_2 (при %aaa% = 1)
А, ты меня не так понял. StrPos Name+1 ... — хотелось не Name1 как новое имя переменной, а %Name% далее должно вернуть <значение позиции + 1>. Smile
Loopback wrote:
но быстро стало понятно, что это мазохизм и вообще криво.
С самого начала так подумал, поэтому удивился твоей реакции. )

Loopback wrote:
что синтаксис немного поменялся, неиспользуемый "" убрал.
Сам не понял, зачем тут лишний пустой параметр.

Loopback wrote:
Но кстати говоря, именно 3 и 4 скорее всего не заработают, потому что:
Цитата — это и есть пояснение? Или ты что-то забыл дописать?
Попробовал на тулбар натравить — результат тот же:
Code:
ControlSetMouseAction /X1 28 CMD 321
ControlSetMouseAction /X2 28 CMD 322
И тут сразу напрашивается 0 на главное (всё) окно ТС. Сделаешь?
А с учётом появления вычислений в переменных, будет кстати появление динамической переменной с индексом 1000 (WM_USER+50) для выяснения, какой является активная панель (1/2). Пару примеров в скриптах уже приводил. Актуально и для случая с прокруткой табов только в соотв. расположению указателя панели: 28-%var% = 26/27.

По остальному ясно.

#1501:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Mar 21, 2020 08:46
    —
Loopback
У меня пока нет времени на тщательное тестирование новых версий плагина (очень надеюсь заняться этим попозже), но при беглом просмотре новой справки к 2.0.9 beta обратил внимание вот на что.
Для команды ModifyDialogs указаны значения параметра /VER:<версия>:
950 Поддержка для версии TC от 9.50 до 9.51
920 Поддержка для версии TC от 9.20 до 9.21а

Предполагаю, что должно быть не 9.21a, а 9.22a, иначе весь диапазон версий не перекрывается. Если я прав, надо будет уточнить. Это касается и ридми, где прежний диапазон указан и вовсе как 9.20-9.21.

#1502:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 12:27
    —
Loopback wrote:
По "/QUEUEBTN" - кнопку "В очередь" необходимо добавлять в любом случае, даже если не планируете ее перемещать, поскольку по ее наличию определяется тип диалога ("Создать ярлык" имеет тот же класс, ох уж эта гислеровская экономия).
Loopback wrote:
/QUEUEBTN давно упразднён и не работает в коде.
А что же теперь делать с диалогом создания ярлыка? У меня там кнопка ОК на следующую наезжает.

Что касаемо ControlSetMouseAction /X1|2. Кнопки работают, но только совместно с дефолтным переходом по истории. Поэтому тут требуется ключ переопределения, иначе в таком виде это теряет смысл. Вероятно, это поможет и с прокруткой табов. И в отношении /R нужно сделать нечто, запрещающее вызов контекстных меню.

#1503:  Author: Loopback PostPosted: Sat Mar 21, 2020 15:04
    —
Flasher wrote:
А, ты меня не так понял. StrPos Name+1 ... — хотелось не Name1 как новое имя переменной, а %Name% далее должно вернуть <значение позиции + 1>.

Да без разницы, возможно и так и этак Smile
Flasher wrote:
Сам не понял, зачем тут лишний пустой параметр.

Я же писал, сначала плагин использовал Class+Instance для получения хэндлов. А потом нашел лучше способ.
Flasher wrote:
Попробовал на тулбар натравить — результат тот же:

Ну я уже даже не знаю тогда. Варианта только два - либо у тебя тотал < 9.00 (сомневаюсь), либо какие-то другие плагины конфликтуют. У меня на трех разных установках тотала никаких проблем нет.
Flasher wrote:
А с учётом появления вычислений в переменных, будет кстати появление динамической переменной с индексом 1000 (WM_USER+50) для выяснения, какой является активная панель (1/2). Пару примеров в скриптах уже приводил. Актуально и для случая с прокруткой табов только в соотв. расположению указателя панели: 28-%var% = 26/27.

Не особо понял. Переменную сделать можно (либо команду-враппер), но ее значение будет получаться только при загрузке, после уже не поменяешь.
Avada wrote:
Предполагаю, что должно быть не 9.21a, а 9.22a, иначе весь диапазон версий не перекрывается.

Возможно, у меня просто не было установленной 9.22, надо будет проверить потом на ней.
Flasher wrote:
А что же теперь делать с диалогом создания ярлыка? У меня там кнопка ОК на следующую наезжает.

А условия для чего? /QUEUEBTN за ненадобностью была убрана после появления условий.

Сейчас актуальный код (который по умолчанию):
 Hidden text


Flasher wrote:

Что касаемо ControlSetMouseAction /X1|2. Кнопки работают, но только совместно с дефолтным переходом по истории. Поэтому тут требуется ключ переопределения, иначе в таком виде это теряет смысл. Вероятно, это поможет и с прокруткой табов.

А, значит всё-таки что-то работает.

Что за ключ переопределения не понял.
Flasher wrote:

И в отношении /R нужно сделать нечто, запрещающее вызов контекстных меню.

Наверно можно, но имхо это не совсем правильно, т.к. фактически нарушает нормальное функционирование программы.

#1504:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 19:12
    —
Loopback wrote:
Да без разницы, возможно и так и этак
Ух ты. А как же эдак сделать? Smile Просто писать формулу типа %Name+1? Или %(Name+1)? Или %"Name+1"?

Loopback wrote:
Варианта только два - либо у тебя тотал < 9.00 (сомневаюсь), либо какие-то другие плагины конфликтуют.
Я же писал версию ТС — LAST. Проверяется Тотал в почти стирильных условиях, то бишь с одним Autorun из любых плагинов. Поэтому тут ни то, ни другое.

Loopback wrote:
Не особо понял.
Что именно?
Loopback wrote:
но ее значение будет получаться только при загрузке, после уже не поменяешь.
Это не годится. Я пишу о динамической. Ты же получаешь хэндлы не только на старте. Вот и эту переменную нужно. Можно её вообще одним символом (без процентов) сделать — @, например:
Code:
ControlSetMouseAction /W:F %"28-@" CMD 3005
ControlSetMouseAction /W:R %"28-@" CMD 3006


Loopback wrote:
А условия для чего?
А, по наличию кнопки F2, торможу. Получилось. Smile
Закинь в help тогда второй вариант с равными и переставленными (двумя) кнопками для 9.50+ x32:
 Hidden text

Loopback wrote:
Что за ключ переопределения не понял.
Перекрывающий ТС-шное поведение при кликах и встроенных хоткеях. Не знаю, можно ли их сделать неглобальными при этом.

Loopback wrote:
т.к. фактически нарушает нормальное функционирование программы.
Пусть это работает только с применением ключа /K, тогда нарушения не будет.

#1505:  Author: BeTePLocation: Санкт-Петербург PostPosted: Sat Mar 21, 2020 20:13
    —
Flasher wrote:
вариант с равными и переставленными (двумя) кнопками для 9.50+ x32

А я себе сделал диалог копирования/перемещения с кнопками, равномерно распределенными по ширине диалога. Win 7 (x64). TC 9.51 RC6 (32-bit).
Может кому пригодится:
 Скрины

 Hidden text

#1506:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 20:19
    —
BeTeP wrote:
А я себе сделал диалог копирования/перемещения с кнопками, равномерно распределенными по ширине диалога.
А я с "неравномерно" то бишь?

#1507:  Author: Loopback PostPosted: Sat Mar 21, 2020 20:24
    —
Flasher wrote:
росто писать формулу типа %Name+1? Или %(Name+1)? Или %"Name+1"?

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

ControlSetMouseAction /W:F %"28-@" CMD 3005
Если сделать здесь, будет вычислено значение в момент запуска этой команды. Вычисления вычисляют то что в строке и результат передается в параметр. Всё.

Если я правильно понял, нужно чтобы идентификатор контрола мог меняться в зависимости от результата WM_USER + 1000. Ну можно ключ ввести, какой-нибудь /DEC, который будет вычитать результат (0/1) из идентификатора, заданного в команде. Наверно.

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

Уже посмотрел, не вижу простого способа. Да и сложного не вижу.

#1508:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 20:42
    —
Loopback wrote:
Если объяснишь, какого конкретно результата надо добиться - тогда скажу.
А я разве не объяснил? Ты же на него и ответил "возможно и так". Question
Flasher wrote:
хотелось не Name1 как новое имя переменной, а %Name% далее должно вернуть <значение позиции + 1>.

Loopback wrote:
Если сделать здесь, будет вычислено значение в момент запуска этой команды.
Тогда объясни это:
Loopback wrote:
Хэндлы получаются при запуске и в процессе работы в случае, если окно полученное ранее не существует.
Что мешает в процессе вычислять и с подобной переменной? Сейчас имеется 9 вариантов на 18 хэндлов, где это может пригодиться.

Loopback wrote:
Ну можно ключ ввести, какой-нибудь /DEC, который будет вычитать результат (0/1) из идентификатора, заданного в команде. Наверно.
Если тебе с ключом проще работать, то пожалуйста. Я за оптимальность. Только 1000 даёт не 0/1, а 1/2.

Loopback wrote:
Уже посмотрел, не вижу простого способа. Да и сложного не вижу.
Это, конечно, удручает. Т. е. от /X1 и /X2 можно смело избавляться. Что ж, буду по старинке — через AHK...

А про DisableMarkedMenuItems ты что-нибудь расскажешь? Как это выглядит и работает ли с подпунктами?

#1509:  Author: Loopback PostPosted: Sat Mar 21, 2020 21:35
    —
Flasher wrote:
А я разве не объяснил?

Наверно пытался... А я пытался понять, но не смог.

Flasher wrote:
Что мешает в процессе вычислять и с подобной переменной?

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

Flasher wrote:
Если тебе с ключом проще работать, то пожалуйста. Я за оптимальность. Только 1000 даёт не 0/1, а 1/2.

Угу, а я-то, из вредности, против оптимальности.

Мы сегодня друг друга категорически не понимаем. Я не знаю, как еще объяснять. И я опять перестал понимать, что требуется, а казалось вот-вот. И сделать ничего не могу, пока не пойму. Увы.

Flasher wrote:
Т. е. от /X1 и /X2 можно смело избавляться.

Ну да, конечно, раз тебе не нужно - избавляемся. Laughing Именно так и поступим.

Flasher wrote:
А про DisableMarkedMenuItems ты что-нибудь расскажешь? Как это выглядит и работает ли с подпунктами?

Если в главном меню будут пункты типа такого:

Code:
MENUITEM "`Header", 0


После выполнения команды

Code:
DisableMarkedMenuItems "`"


Они станут неактивными.

#1510:  Author: FlasherLocation: Москва PostPosted: Sat Mar 21, 2020 21:58
    —
Loopback wrote:
А я пытался понять, но не смог.
В смысле "не смог"? А "возможно и так" к чему было?
Code:
StrPos Name-1 abc c
%Name% => 2

Loopback wrote:
Как только скрипт передал значение команде, какие еще могут быть вычисления?
Я же выше писал, что хэндлы имеет смысл получать только динамически, потому что используются switch-команды во время работы в ТС. Т. е. те, что были на старте, исчезают и возникают новые.
Кстати, ты на вопрос так и не ответил:
Flasher wrote:
И тут сразу напрашивается 0 на главное (всё) окно ТС. Сделаешь?
Тут хотя бы меняться будет нечему. Т.е. 0 должен дать %AUTORUN_TCHANDLE%, грубо говоря.

Loopback wrote:
Угу, а я-то, из вредности, против оптимальности.
Я свой вариант решения твоему не противопоставлял в данном случае. Это вытекает из условия "Если тебе с ключом проще работать". Разве нет? Confused

Loopback wrote:
Ну да, конечно, раз тебе не нужно - избавляемся. Laughing Именно так и поступим.
Было бы над чем смеяться. Покажи мне хотя бы одного юзера, который будет использовать эти кнопки для своих нужд с абсолютно ненужной ему сменой путей в активной панели (по ходу истории каталогов), нивелируя всю полезность таких кликов. Тогда посмеёмся вместе.

Loopback wrote:
Если в главном меню будут пункты типа такого:
Под "выглядеть" я имел в виду внешнее отличие (осветление текста или что там) от дефолтного состояния. Так а подпункты можно будет прикрутить, чтобы em_0 не вешать? В верхних пунктах даже не знаю, зачем это может понадобиться.

#1511:  Author: Loopback PostPosted: Sun Mar 22, 2020 00:03
    —
Code:

StrPos Name-1 abc c
%Name% => 2

Ну вот, наконец-то понятно стало. Неудивительно, что не мог понять. Нет, такой вариант, разумеется, не работает. Это все равно что в том же Autoit написать $a-1 = StrPos(...) и надеяться что результат функции запишется в $a и из него сразу вычтется 1.
Flasher wrote:
Я свой вариант решения твоему не противопоставлял в данном случае. Это вытекает из условия "Если тебе с ключом проще работать". Разве нет?

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

И вообще, какая цель преследуется этим кодом?
Code:

ControlSetMouseAction /W:F %"28-@" CMD 3005
ControlSetMouseAction /W:R %"28-@" CMD 3006

Думал долго, потом сделал тестовую версию с вычитанием из индекса контрола результата WM_USER+1000 и последующим получения хэндла. Получается фигня: при вращении колеса над неактивной панелью вкладок переключаются вкладки на активной панели.

Flasher wrote:
с абсолютно ненужной ему сменой путей в активной панели (по ходу истории каталогов)

Так они что, эти кнопки глобально работают? Т.е. если нажать не на списках, тоже историю мотает?

Flasher wrote:
Под "выглядеть" я имел в виду внешнее отличие (осветление текста или что там) от дефолтного состояния. Так а подпункты можно будет прикрутить, чтобы em_0 не вешать? В верхних пунктах даже не знаю, зачем это может понадобиться.

Скрин
Делаются неактивные все пункты меню (и подменю) в которых в начале текста есть заданный маркер. Маркер при этом из текста удаляется.

Flasher wrote:
И тут сразу напрашивается 0 на главное (всё) окно ТС. Сделаешь?

Сделал уже. Только не всё окно, а его неклиентская часть, потому что клиентская закрыта контролами.

#1512:  Author: FlasherLocation: Москва PostPosted: Sun Mar 22, 2020 00:57
    —
Loopback wrote:
Нет, такой вариант, разумеется, не работает.
Ясно. Ну, уже, собственно, и неважно, с учётом того, что нет акцента на конкретных командах.

Loopback wrote:
по другому, со всякими "динамическими" переменными в параметрах просто не получится.
Т. е. с ключом аля /DEC, судя "по другому", получится? Есть же плагины, работающие в динамике, подстраиваясь под изменения контролов, в т. ч. определяя активность панели.

Loopback wrote:
Получается фигня: при вращении колеса над неактивной панелью вкладок переключаются вкладки на активной панели.
Спутал индексы. Так:
Code:
ControlSetMouseAction /W:F %"25+@" CMD 3005
ControlSetMouseAction /W:R %"25+@" CMD 3006

Loopback wrote:
Так они что, эти кнопки глобально работают? Т.е. если нажать не на списках, тоже историю мотает?
Разумеется. Смотри опять же цитату из сообщения по первой ссылке с примером. Источник обсуждения. Это системная навигация. Аналогично — в проводнике, браузерах и т. д.

Loopback wrote:
Делаются неактивные все пункты меню (и подменю) в которых в начале текста есть заданный маркер.
Гм. Я себе это несколько иначе представлял. Т. е. нужно блокировать только пункты с маркером, а не меню, в которых находится хотя бы один такой.
И желательно искать подстроку не только в начале, но и по всей строке.
Так, что-то у меня не работает.
Code:
DisableMarkedMenuItems "'"
Code:
    MENUITEM "'F11\tРежим: Полный экран", em_0
Никакой реакции. MNU в UTF-8 без ВОМ. C "`" тоже пробовал.

Loopback wrote:
Только не всё окно, а его неклиентская часть, потому что клиентская закрыта контролами.
И что с того, что закрыта? Суть же в том, чтобы зависеть не от положения курсора, а только лишь от активности окна того экземпляра ТС, к которому есть привязка по хэндлу, как в AHK/AutoIt это обычно делается.

#1513:  Author: Loopback PostPosted: Sun Mar 22, 2020 02:18
    —
Flasher wrote:
Т. е. с ключом аля /DEC, судя "по другому", получится? Есть же плагины, работающие в динамике, подстраиваясь под изменения контролов, в т. ч. определяя активность панели.

Если про ModifyDialogs, то он работает автономно, после того как в него один раз загрузили настройки. Из скрипта после его окончания ничего и нигде не берется. Ни в одном плагине.

Flasher wrote:
Спутал индексы. Так:

Так крутит в активной панели, в неактивной не крутит. Но вкладки крутятся в одну сторону вне зависимости от направления колеса.
Flasher wrote:
Это системная навигация. Аналогично — в проводнике, браузерах и т. д.

Понятно. Ну если появится мышь с экстракнопками - посмотрю.
Flasher wrote:
Гм. Я себе это несколько иначе представлял. Т. е. нужно блокировать только пункты с маркером, а не меню, в которых находится хотя бы один такой.

Я не знаю, что нужно а что нет, делалось под себя, я ее вообще не планировал выкладывать. А нужно было сделать неактивными несколько пунктов с разным текстом в разных подменю. Поскольку в дельфях (на котором написан ТС) обычные идентификаторы меню не задействованы, то нужно было либо искать по индексам (неудобно), либо так.
Flasher wrote:
И желательно искать подстроку не только в начале, но и по всей строке.

Не вижу ни малейшего смысла - зачем размещать маркер в разных частях строки? Для такой простой задачи только лишнее усложнение.

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

Flasher wrote:
Никакой реакции. MNU в UTF-8 без ВОМ. C "`" тоже пробовал.

Возможно надо задержку перед командой поставить, может меню не загрузилось еще. У меня она строит в конце скрипта и задержка 200мс.

#1514:  Author: FlasherLocation: Москва PostPosted: Sun Mar 22, 2020 02:56
    —
Loopback wrote:
Если про ModifyDialogs
Плагины ТС имеются в виду. WLX/WFX. Из WDX — TwinKey тот же. Так каков ответ будет? Сделать рельно/нет? Или останется такое псевдорешение с предупреждением "работать будет, если в интерфейсе ничего не трогать"? Для меня, например, это весьма актуально, т. к. кнопки/хоткеи с TCFS2 со сменами вида юзаю на постоянке (F11 из mnu выше как пример). Ну, и не я один такой, само собой.

Loopback wrote:
Но вкладки крутятся в одну сторону вне зависимости от направления колеса.
Так это уже косяк плагина, а не конфликт в приёме с вычислением.

Loopback wrote:
зачем размещать маркер в разных частях строки?
Не обратил сразу внимания на:
Loopback wrote:
Маркер при этом из текста удаляется.
В такой ситуации текущее условие годится. Но пока не работает. Стоит первой командой в большом конфиге. После неё там явно больше 200 мс проходит. Поставил 2000 — то же самое. Кодировка точно не влияет?

#1515:  Author: Loopback PostPosted: Sun Mar 22, 2020 13:14
    —
Flasher wrote:
Сделать рельно/нет?

Я уже запутался в хотелках. Если речь про инкремент результата WM_USER+1000, то да, можно. Но мне не нравится неочевидность работы всего этого, что в твоем варианте (к тому же невозможном), что с ключом. Но поскольку это имеет смысл только для пар, целью чего является определение активного (или неактивного) элемента из пары, более логичным и понятным представляется такой вариант: ввести виртуальные идентификаторы типа 3 и 4, т.е. например для панели табов: 100 - активная панель табов, 101 - неактивная, и т.д.
Flasher wrote:
Так это уже косяк плагина, а не конфликт в приёме с вычислением.

Да, был косяк. Всё работает.
Flasher wrote:
В такой ситуации текущее условие годится. Но пока не работает. Стоит первой командой в большом конфиге. После неё там явно больше 200 мс проходит. Поставил 2000 — то же самое. Кодировка точно не влияет?

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

#1516:  Author: FlasherLocation: Москва PostPosted: Sun Mar 22, 2020 17:58
    —
Loopback wrote:
Если речь про инкремент результата WM_USER+1000, то да, можно.
Речь про все текущие в момент кликов хэндлы. И текущий инкремент для 9 текущих пар.
Ну, и про 0 для активного окна ТС безотносительно положения указателя мыши ты не ответил.

Loopback wrote:
ввести виртуальные идентификаторы типа 3 и 4, т.е. например для панели табов: 100 - активная панель табов, 101 - неактивная
Не понял. Какая связь у 3/4 со 100/101 ?
Я думал о добавке 9 индексов, но сперва мне такой вариант показался избыточным. И тебе тогда переменную с индексом придётся отдельно обрабатывать, а не подставлять сразу заданный. Впрочем, хозяин — барин, главное, чтобы работало.

Loopback wrote:
Элемент затеняется, но маркер не убирается.
У меня и затенения не происходит. А там не осветление с вдавленностью? Я так понял на скриншоте это ===Separator===.

#1517:  Author: Loopback PostPosted: Sun Mar 22, 2020 20:31
    —
Бета-версия 2.0.10

+ Tweaks: добавлены новые виртуальные идентификаторы для задания пар активных/неактивных элементов
+ Tweaks: добавлена поддержка зон главного окна (заголовок, меню и т.д.)
+ в выражениях добавлена прямая поддержка команд, возвращающих выражения, в виде: StrPos(["switch",] str, substr)

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

Вкратце выглядит сейчас всё так:

Code:

# 1. При использовании выражений в параметрах, можно использовать % непосредственно перед кавычками.
# Содержимое строки будет вычисляться и результат передаваться в параметр.
Set sl 1000
Sleep %'%sl%+500'
# => 1500

# 2. Внутри кавычек для текстовых констант можно использовать кавычки другого типа
Set sl 1000
StrLen var %'"Строка_" & 1'
# var => Строка_1

# 3. В выражениях можно использовать команды Autorun, возвращающие значения,
# в виде StrPos(["switch",] str, substr).
# При таком использовании первый параметр (переменная) не нужен.
# Команды могут быть вложенными.
Set zz "  abcdefgh"
MsgBox %"StrLeft(StrTrim(%zz%), 3) & '-' & StrPos(%zz%, 'd') & '-' & (StrPos('123456789', '5'))" "Expr"
# => abc-6-5

# 4. Если в команде ужно использовать переключатели, их можно передать в первом параметре в кавычках через пробел, первым символом в строке должен идти ~, вторым /: "~/S1 /S2" и т.д.
Set zz "AbCdEfxQWERTY"
MsgBox %"StrPos('~/S', %zz%, 'x')" "Case-sens"
# => 7

# 5. В условиях "окавычивать" выражения не нужно, выражения вычисляются по умолчанию
Set zz "snsddxff"
if StrPos('~/S', %zz%, 'x') = 6 then
  MsgBox "Yes"
endif


Flasher wrote:
Речь про все текущие в момент кликов хэндлы. И текущий инкремент для 9 текущих пар.

Текущие получались уже в прошлой версии.

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

Flasher wrote:
Ну, и про 0 для активного окна ТС безотносительно положения указателя мыши ты не ответил.

Есть, можно назначать обработку на разные зоны.

Flasher wrote:
Я думал о добавке 9 индексов, но сперва мне такой вариант показался избыточным. И тебе тогда переменную с индексом придётся отдельно обрабатывать, а не подставлять сразу заданный. Впрочем, хозяин — барин, главное, чтобы работало.

Не всегда то, что кажется избыточным, таковым является: c точки зрения скорости и простоты обработки этот вариант лучший. И не всегда то, что кажется простым, просто на самом деле (это про "переменную" @).
Сейчас код переключения вкладок такой:
Quote:
#10017 - активная панель вкладок
ControlSetMouseAction /W:R 10017 CMD 3005
ControlSetMouseAction /W:F 10017 CMD 3006

Flasher wrote:
У меня и затенения не происходит. А там не осветление с вдавленностью? Я так понял на скриншоте это ===Separator===.

Вид зависит от темы, на классической вдавленный серый текст, в десятке просто серый. В любом случае пункт неактивный.
Я не знаю, почему у тебя не затеняет. Может меню не видимо при запуске ТС? В таком случае помочь ничем нельзя.

#1518:  Author: FlasherLocation: Москва PostPosted: Mon Mar 23, 2020 00:13
    —
Loopback wrote:
+ в выражениях добавлена прямая поддержка команд, возвращающих выражения, в виде: StrPos(["switch",] str, substr)
Да ладно?! Surprised Опять 7 лет, но уже сделал то, что категорически не хотел делать. Shocked
Loopback wrote:
Один раз я такое исключение уже сделал, когда добавил функции, которые можно использовать в выражениях (вариант, кстати, очень ограниченный). Больше таких ошибок делать не буду.
...
Вычислений на месте тоже не будет. Отдельная конкатенация в Autorun вообще не нужна, переменные разворачиваются в тексте.
...
Это бессмысленная трата времени и нагромождение кучи кода, поскольку имеющийся парсер принципиально не может решить задачу работы с ними. А ради чего? Ради нескольких функций, которые будут использоваться в лучшем случае пару раз на скрипт?
...
Угу, т.е. я сейчас начну переписывать с нуля парсер, только чтобы сделать красиво строчные функции? Здорово придумано Very Happy
...
Т.е. под каждый вид функционала свой парсер. Нет, это не вариант. Всё должно обрабатываться единообразно.
Рад, что не сдержал обещания и явно подобрел с возрастом. Smile

Loopback wrote:
Вкратце выглядит сейчас всё так:
Это круто. Удобно. Потестирую.

Loopback wrote:
Текущие получались уже в прошлой версии.
Прекрасно. )

Loopback wrote:
Есть, можно назначать обработку на разные зоны.
Без /H берёт только клиентскую часть, а хотелось бы всё окно. Но желательно, если это возможно, и за его пределами, т. е. чтобы клики с клавишными модификаторами не переключались на окно под указателем, как если бы мы жали только клавишные хоткеи. Или это сложно?
И возможность комбинировать зоны по сумме флагов тоже не помешала бы. Т. е. не 1, 2, 3, ..., 20, а 1, 2, 4, 16 ... как для ключей ini (c вычислением по логическому "И"). В таком виде /H:1 /H:2 пока тоже не работает.
А с /R так и не вышло что-то сделать?:
Code:
ControlSetMouseAction /R /H:2 /K:C 0 CMD 321

Loopback wrote:
c точки зрения скорости и простоты обработки этот вариант лучший.
ОК. А можно объяснить, почему такие странные числа (10001-10018) выбраны?

Loopback wrote:
Я не знаю, почему у тебя не затеняет. Может меню не видимо при запуске ТС? В таком случае помочь ничем нельзя.
Нет. Меню скрываю только со всем остальным по F11. Может, это связано с тем, что в заголовках присутствуют юникодные символы (типа как под 3-м пунктом)?

#1519:  Author: Loopback PostPosted: Mon Mar 23, 2020 01:25
    —
Flasher wrote:
Опять 7 лет, но уже сделал то, что категорически не хотел делать.

Ну, наверно лучше не обещать, но сделать, чем наоборот? Wink

Да, не планировалось. Но эти вычисления с /С потянули за собой столько всего... Что проще оказалось пару вечеров посидеть с парсером выражений. Мне и сейчас не особо нравится, как всё реализовано, но переделывать с нуля явно сложнее. Хотя иногда и хочется Smile

Flasher wrote:
Без /H берёт только клиентскую часть, а хотелось бы всё окно. Но желательно, если это возможно, и за его пределами, т. е. чтобы клики с клавишными модификаторами не переключались на окно под указателем, как если бы мы жали только клавишные хоткеи. Или это сложно?

Без /H оно вообще не планировалось и сейчас там нечто неопределенное получается. Но может быть можно окно и целиком задействовать.

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

Flasher wrote:
И возможность комбинировать зоны по сумме флагов тоже не помешала бы. Т. е. не 1, 2, 3, ..., 20, а 1, 2, 4, 16 ... как для ключей ini (c вычислением по логическому "И"). В таком виде /H:1 /H:2 пока тоже не работает.

Эти флаги напрямую устанавливаются. И они не комбинируются. Наверно можно и сделать, правда тогда придется уйти от прямого задания индекса зоны. Понять бы зачем.
Flasher wrote:
А с /R так и не вышло что-то сделать?:

Если про подавление меню - нет.
Flasher wrote:
ОК. А можно объяснить, почему такие странные числа (10001-10018) выбраны?

Честно - с потолка. Ну вдруг Кристиан еще что-нибудь надумает сделать. Это чтобы потенциально не пересечься. Хотя и этот выбор не дает гарантий, конечно.
Flasher wrote:
Может, это связано с тем, что в заголовках присутствуют юникодные символы (типа как под 3-м пунктом)?

Не знаю, но сомневаюсь. Сравнение производится элементарно - из начала текста берется количество символов = длине маркера и сравнивается.

Какая в принципе теперь разница, если схема все равно не работает с кастомными меню.

#1520:  Author: FlasherLocation: Москва PostPosted: Mon Mar 23, 2020 02:09
    —
Loopback wrote:
Ну, наверно лучше не обещать, но сделать, чем наоборот?
Ну и между "не обещать" и "утвердительно обещать не делать" знак равенства не поставишь. Wink

Loopback wrote:
Хотя иногда и хочется
Понимаю тебя. Ты не раз этот момент по всем трём своим суперплагинам затрагивал.

Loopback wrote:
Но может быть можно окно и целиком задействовать.
Хотелось бы.

Loopback wrote:
нужен глобальный хук. Это уже выходит за пределы назначения плагина
Ясно. Не так страшно. Мне в основном это пригодилось бы в ситуации, когда указатель случайно оказывается на всплывающих панелях (таскбар, TLB). С другой стороны, без глобального хука, видимо, ситуацию с /X1|2 не исправить.

Loopback wrote:
Наверно можно и сделать, правда тогда придется уйти от прямого задания индекса зоны. Понять бы зачем.
Ну как зачем. Допустим:
• Заголовок + кн. системного меню + кнопки управления
• Клиентская область + разделитель панелей + главное меню
Да и для контролов такое точно не помешает (например, все компоненты источника или получателя). Можно в перечислении через запятую или вертикальную черту, если не суммой делать.

Loopback wrote:
Если про подавление меню - нет.
MVV точно знает как быстро подавлять отрисовку (в своих утилитах делал). Можешь у него спросить.

Loopback wrote:
Честно - с потолка. Ну вдруг Кристиан еще что-нибудь надумает сделать. Это чтобы потенциально не пересечься.
Так и думал. Можно ещё было отрицательными, но маленькими сделать. )

Loopback wrote:
Какая в принципе теперь разница, если схема все равно не работает с кастомными меню.
А переделать не пробовал?
Loopback wrote:
Но в любом случае, функцию можно убирать, или нужно переделывать.

#1521:  Author: LonerDLocation: Макеевка PostPosted: Mon Mar 23, 2020 17:23
    —
Среди бурного обсуждения умных вещей так и не понял одного... А что изменилось в назначении/обработке переменных в последних двух бетах?
Раньше (до 2.0.8 включительно) было так:
SetEnv ADMIN *
Создавалась переменная ADMIN, которой присваивалось значение *.
А сейчас как нужно? C ShellExec тоже что-то изменилось?

#1522:  Author: FlasherLocation: Москва PostPosted: Mon Mar 23, 2020 17:42
    —
LonerD wrote:
Создавалась переменная ADMIN, которой присваивалось значение *.
И сейчас создаётся.

LonerD wrote:
C ShellExec тоже что-то изменилось?
Никаких проблем не наблюдаю.

#1523:  Author: LonerDLocation: Макеевка PostPosted: Mon Mar 23, 2020 18:03
    —
Flasher wrote:
И сейчас создаётся.

В том-то и дело, что нет. Заменяю один wdx файл на 2.0.8, запускаю Тотал - переменная есть. Заменяю на 2.0.10, запускаю Тотал - нету. Autorun.cfg при этом один и тот же.

#1524:  Author: FlasherLocation: Москва PostPosted: Mon Mar 23, 2020 18:21
    —
LonerD wrote:
В том-то и дело, что нет.
Я же не от балды пишу, а проверяю. См. в x32 версии.
Вызов cmd /k set admin из комстроки даст ADMIN=* .
У тебя, вероятно, какой-то обрыв в условиях. MsgBox test прямо перед этой командой вставь и проверь.

#1525:  Author: Loopback PostPosted: Mon Mar 23, 2020 21:07
    —
Flasher wrote:
Хотелось бы.

Ок, без /H будет применяться к окну целиком.

Flasher wrote:
Ну как зачем. Допустим:

Ок, в принципе можно и так. Для частей одного целого это имеет определенный смысл.

Flasher wrote:
Да и для контролов такое точно не помешает

Для контролов нет.
Flasher wrote:
знает как быстро подавлять отрисовку

Да я как бы идею представляю, но не так это просто. Меню системные (в заголовке например) прибил, там просто был косяк один. Наверно, это может решить и проблему с кнопками х1,х2. Вот с меню тоталовскими (на тулбаре, например) сложнее, не уверен, что оно стоит возни.
Flasher wrote:
А переделать не пробовал?

Нет. Тут, собственно, совсем мало вариантов остается, либо индексы (точно нет), либо просто поиск по тексту.

LonerD
В самом деле странно, у себя тоже попробовал - все создается. Код команды не менялся, ShellExec тем более.

Может где-то в другом месте что-то с выражениями? В них баги могут быть вполне.

#1526:  Author: FlasherLocation: Москва PostPosted: Mon Mar 23, 2020 22:41
    —
Loopback wrote:
Ок, без /H будет применяться к окну целиком.
Ок, в принципе можно и так.
Отлично.
Loopback wrote:
Наверно, это может решить и проблему с кнопками х1,х2.
Не терпится проверить. Smile
Loopback wrote:
не уверен, что оно стоит возни.
Если учитывать, что правую кнопку удобно использовать в качестве модификатора (гор. прокрутка в ScrollTC как пример), то, видимо, стоит.
Loopback wrote:
либо просто поиск по тексту.
Меня устроит. По паре \t или пробелов. А ты ищешь в mnu или в интерфейсе? Если в mnu, то самое простое — это по командному идентификатору в конце после запятой. Там достаточно 0 вместо команды прописать.

Кстати, в англ. справке знаки вопроса на страницах Basics > Syntax > Basics (снизу) и SysInfo > Commands > GetSysColor имеются.

#1527:  Author: LonerDLocation: Макеевка PostPosted: Tue Mar 24, 2020 04:36
    —
Loopback wrote:
Может где-то в другом месте что-то с выражениями?

Действительно, не конкретно в этом была проблема, но где-то в предшествующих секциях.
Сократил autorun.cfg до такого размера, который работает в 2.0.8, но не работает в 2.0.10 (не назначается переменная DLADMIN и не запускается ехе-шник).

Code:
LoadLibrary Plugins\Autorun_Sysinfo.dll
SetEnv /EV TCPL %commander_path%\Plugins

SetEnv DLOSVERS w6
If %sysinfo_osversion% = WIN_XP Then
  SetEnv DLOSVERS w5
EndIf

SetEnv DLOSISXP
If %DLOSVERS% = w5 Then
  SetEnv DLOSISXP XP
EndIf

SetEnv DLADMIN *
If %DLOSVERS% = w5 Then
  SetEnv DLADMIN
EndIf

ShellExec /W "%TCPL%\exe\TCLair\TCLair.exe" "" ""

#1528:  Author: Loopback PostPosted: Tue Mar 24, 2020 15:06
    —
Flasher wrote:
Если учитывать, что правую кнопку удобно использовать в качестве модификатора (гор. прокрутка в ScrollTC как пример), то, видимо, стоит.

Ладно, время будет - покопаю.
Flasher wrote:
А ты ищешь в mnu или в интерфейсе?

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

LonerD
А никаких сообщений об ошибках разве не выдавалось?

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

#1529:  Author: Loopback PostPosted: Tue Mar 24, 2020 23:27
    —
Бета-версия 2.0.11

* Tweaks: изменен синтаксис ControlSetMouseAction, вместо CMD/EMCMD используются встроенные команды Autorun
+ Tweaks: в ControlSetMouseAction зоны главного окна могут суммироваться
* Tweaks: действие по умолчанию (например, контекстные меню) не выполняется, если на эту кнопку назначено своё действие
- исправлена проблема с получением переменных окружения в выражениях

Внимание! Синтаксис ControlSetMouseAction поменялся!

Теперь вместо CMD/EMCMD можно использовать внутренние команды Autorun в соответствии с их синтаксисом.

Теперь при назначенной команде стандартное действие (например, контекстное меню при /R) не выполняется.

В более сложных случаях (например, колесо при модификаторе /K:R, на контроле, имеющем контекстное меню), чтобы меню не появлялось, надо "заглушить" стандартное действие, создав запись с пустым действием. Например, переключение вкладок колесом при нажатой правой кнопке:

Code:
ControlSetMouseAction /R 10017
ControlSetMouseAction /W:R /K:R 10017 SendCommand 3005
ControlSetMouseAction /W:F /K:R 10017 SendCommand 3006


Меню при этом доступно не будет.

#1530:  Author: FlasherLocation: Москва PostPosted: Wed Mar 25, 2020 00:42
    —
Loopback
Ничего толком не завелось. Весь конфиг:
Code:
LoadLibrary Plugins\Autorun_Tweaks.dll
# Никакой реакции на прокрутку вкладок над активной панелью:
ControlSetMouseAction /W:R /K:R 10017 SendCommand 3005
ControlSetMouseAction /W:F /K:R 10017 SendCommand 3006
ControlSetMouseAction /W:R 10017 SendCommand 3005
ControlSetMouseAction /W:F 10017 SendCommand 3006
# Тут только меню мелькает на заголовке, команда не выполняется:
ControlSetMouseAction /R /H:62 /K:A SendCommand 321
# Тут даже меню не пропадает:
ControlSetMouseAction /R /H:62 /K:C SendCommand 321
# Только дефолтный переход по истории каталогов, команды не выполняются:
ControlSetMouseAction /X1 /H:0 SendCommand 321
ControlSetMouseAction /X2 /H:0 SendCommand 322
Win7 x32, TC 9.51 RC6 x32 с одним плагином Autorun, служба Темы отключена, все резидентные программы (кроме чисто системных), браузеры и редакторы отключены. Для чистоты эксперимента даже Realtek и Nvidia (включая службы) отключил/остановил.

#1531:  Author: Loopback PostPosted: Wed Mar 25, 2020 12:46
    —
У, как всё плохо. Судя по тому, что не отрабатываются команды - похоже как будто сам Autorun не обновлен.

Скопипастил код. Первые 4 команды работают.

5,6 - ты забыл 0 - идентификатор контрола. Но сумма зон /H похоже в какой-то момент отвалилась, по отдельности работает.
ControlSetMouseAction /R /H:62 /K:A 0 SendCommand 321

7,8 - тоже 0 нет, /H:0 - такого варианта не предусмотрено, см. справку. Проверить не могу.

Версия с исправленным суммированием зон.

#1532:  Author: FlasherLocation: Москва PostPosted: Wed Mar 25, 2020 13:15
    —
Autorun обновляется всё время вручную с предварительным переименованием текущей версии, поэтому с этим проблем нет никогда.
Насчёт 0, каюсь, сглупил. ПКМ на заголовке заработал в пофиксенном плаге. Для /X1|2 только команда стала выполнятся. Всё остальное в силе.

#1533:  Author: Loopback PostPosted: Wed Mar 25, 2020 15:24
    —
Flasher
Протестировал на семерке, всё очень странно. Функция хука не получает WM_MOUSEWHEEL под семеркой вообще, под десяткой всё работает. Поискал информацию по этому вопросу, но в контексте семерки никто на такую проблему не жаловался, так что я склонен думать, что это ТС под семеркой как-то перехватывает колесо.

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

#1534:  Author: FlasherLocation: Москва PostPosted: Wed Mar 25, 2020 20:49
    —
Loopback
А, значит, ты всё-таки подтверждаешь проблему. Уже выдохнул.
Можно предварительно у Гислера спросить, перехватывает ли TC колесо.
Но, по крайней мере касаемо хоткеев, сам он отрицательно отзывался в отношении перехватов. При обсуждении этой проблемы он это ясно дал понять.

#1535:  Author: Loopback PostPosted: Thu Mar 26, 2020 12:53
    —
Flasher
Не вижу ничего удивительного, что он против Smile Думаю, не стоит его провоцировать, сделаю обходной вариант для семерки. С некоторыми ограничениями - своя команда не сможет предотвратить выполнение дефолтного действия колеса (если такое есть).

#1536:  Author: FlasherLocation: Москва PostPosted: Thu Mar 26, 2020 13:37
    —
Loopback
К файловым спискам цеплять команды ещё и по прокрутке с модификатором нужды точно нет, поэтому не страшно. Делай так.
А с /X1|2 только глобальный хук поможет, видимо, иначе, как я уже писал, смысл отсутствует.
Loopback wrote:
либо просто поиск по тексту.
А почему бы не заменить на поиск пробела или табуляции с конца взамен начала? Внешне же это будет практически неразличимо.

 А пока некоторые наброски для справочных примеров (маркер проблемности справа описаний):

Пару старых мыслей.
1. Ты мог бы сделать поддержку команд ТС с параметрами для CommandExec/SendCommand? Вероятно, это запрашивали, уже не помню.
2. Для TwinKey был запрос на установку языка ввода для указанных папок. Автор так и не родил. По хорошему это, конечно, Гислеру надо в стилях оформления делать, но пока дальше ключа KeyboardID у него за зашло. Возьмёшься?


Last edited by Flasher on Mon Apr 06, 2020 09:45; edited 3 times in total

#1537:  Author: Loopback PostPosted: Sat Mar 28, 2020 22:54
    —
Flasher wrote:
А почему бы не заменить на поиск пробела или табуляции с конца взамен начала? Внешне же это будет практически неразличимо.

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

Flasher wrote:
А пока некоторые наброски

Маркер "-" я так понимаю, "не работает". Сейчас не могу, посмотрю позже (кроме X1/X2), но не факт, что получится что-то сделать сверх уже имеющегося.
Flasher wrote:
1. Ты мог бы сделать поддержку команд ТС с параметрами для CommandExec/SendCommand? Вероятно, это запрашивали, уже не помню.

Имеется в виду OPENTABS и прочие или последние нововведения типа cm_RereadSource?
Flasher wrote:
2. Для TwinKey был запрос на установку языка ввода для указанных папок. Автор так и не родил. По хорошему это, конечно, Гислеру надо в стилях оформления делать, но пока дальше ключа KeyboardID у него за зашло. Возьмёшься?

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

#1538:  Author: FlasherLocation: Москва PostPosted: Sat Mar 28, 2020 23:49
    —
Loopback wrote:
Маркер "-" я так понимаю, "не работает".
В 4-х случаях. А там, где +/-, работает в сравнении с другими способами вызова юзеркоманды с некоторыми перебоями, иногда выполняя команду дважды. Добавка :U, немного помогла, но не до конца. Скорее это связано с тугостью нажатия колеса, дающее повторные клики из-за передерживания. Может, после нажатия/отпускания можно какую-то задержку для неповторения клика предусмотреть?
И как тебе в целом мой наборчик? Успел что-то юзабильное для себя выделить? Smile

Loopback wrote:
Имеется в виду OPENTABS и прочие или последние нововведения типа cm_RereadSource?
Те, что перечислены в блоке "Команды с параметрами". И CommandExec я не просто так отметил, т. к. параметризация там точно доступна (функция tem у TCFS2 как пример, у самой команды — /CD), т. е. на базе созданных юзеркоманд с %A в параметрах получаем некий аналог.

Loopback wrote:
что мне лично никогда не пригодится.
Т. е. ты хочешь сказать, что у тебя все каталоги, куда ты в течении суток заглядываешь, имеют строго доминирующий язык в именах содержимого? Shocked До ввода в эксплуатацию скрипта у меня ситуация была такова, что смена языка ввода являлась одной из 3-4 самых часто востребованных операций после быстрого фильтра и стрелочной/путевой навигации. Наверное, стоит в одном ряду с переименованием файла. Поэтому для меня это куда значимей, чем cpuid и похожие плюшки. И уж точно это не частный случай, а вполне распространённое явление. Но ладно бы ситуация касалась только простых каталогов, но у нас эта разноязычность значится в том числе в виртуальных папках, где преобладает язык локали, и папках системных плагинов. Примеры далее.
Предлагаю выделить список сопоставления в отдельный файл с подобным содержимым:
Code:
С:\Коллекция\*|rus
%ProgramFiles%\*|eng
%COMMANDER_PATH%\*|$0409
D:\Best Wallpapers\|1033
E:\мои фото\*|$0419
\\Сеть\|1049
\\\Startups\|eng
\\\Services2\|system
\\Библиотеки\|rus
\\Приступая к работе\|system
\\Программы и компоненты\|eng
E:\мои фото\*|$0419
И, задав сепаратором "|", sql-запросом обращаться к нужному языкового маркеру (варианты привёл на выбор). system будет подставлять язык системной локали. Наличие * будет определять поиск по левой части в пути, чтобы смена производилась и далее по глубине как в нижнем приёме со стилями.
P.S.: И ладно ты. Удивительно, как швейцарец, которому по долгу приходится работать как минимум с 4 языками, этой пользы не находит.

#1539:  Author: Loopback PostPosted: Mon Mar 30, 2020 00:15
    —
Версия Tweaks с исправленной работой колеса на Win7.

Flasher wrote:
И как тебе в целом мой наборчик? Успел что-то юзабильное для себя выделить?

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

Flasher wrote:
Те, что перечислены в блоке "Команды с параметрами". И CommandExec я не просто так отметил, т. к. параметризация там точно доступна (функция tem у TCFS2 как пример, у самой команды — /CD), т. е. на базе созданных юзеркоманд с %A в параметрах получаем некий аналог.

Ладно, ближе к делу посмотрим.

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

Так точно, 99% латиница. Виртуальные каталоги не использую, пожалуй, только "Шрифты" имеет некоторое практическое применение. У всех свои сценарии работы.

#1540:  Author: FlasherLocation: Москва PostPosted: Mon Mar 30, 2020 00:59
    —
Loopback wrote:
Версия Tweaks с исправленной работой колеса на Win7.
Увы, с обновкой ситуация не изменилась. Sad
Остальное, я так понимаю, ещё не правил.

Кстати, блокировка пунктов у меня не заработала и на исходном меню без иконок:
Code:
LoadLibrary Plugins\Autorun_Tweaks.dll
DisableMarkedMenuItems "`"

Loopback wrote:
Прокрутку колесом вкладок оставлю. Возможно блокировку вкладки. Установка равных размеров панелей - вот это точно да.
Скромно, но тоже недурно. Помимо этих для себя я вижу большую пользу в обратной сортировке, открытии "Мой компьютер" для доп. устройств, переключением между гл. меню и текущим видом окна. Но особенно я прочувствовал переключение между языками. Для быстрых тестов это вообще песня. )
Loopback wrote:
меня больше интересует использование дополнительных меню.
А ты предусмотрел отсутствие выделения и автофокус на файле под указателем? Для этого ведь скрипт или утилита требуется, т. к. твой плагин жимоклики не производит, хотя мог бы, особенно для безкомандных случаев.

Loopback wrote:
Ладно, ближе к делу посмотрим.
ОК.
Loopback wrote:
У всех свои сценарии работы.
Не спорю. Но, к примеру, при русской локали в сис. плагинах служб ты получишь русский язык, и придётся переключать. В общем, ты подумай, т. к. вещь реально нужная, т. е. совсем не на авось.

#1541:  Author: Loopback PostPosted: Mon Mar 30, 2020 14:16
    —
Flasher wrote:
Увы, с обновкой ситуация не изменилась.

Печально. У меня работает на Win7 х64, 32-битную все никак не соберусь поставить.
Единственное что могу предположить, может у тебя система выдает значение версии, отличное от заданного сейчас 6.1, при котором включается дополнительная ветка кода, хотя это и крайне сомнительно. Попробуй эту версию, если фикс включается, при запуске должно появиться сообщение с версией системы.
Flasher wrote:
Кстати, блокировка пунктов у меня не заработала и на исходном меню без иконок:

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

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

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

#1542:  Author: FlasherLocation: Москва PostPosted: Mon Mar 30, 2020 15:05
    —
Loopback wrote:
32-битную все никак не соберусь поставить.
Что-то мне давно подсказывает, что закавыка именно в этом.

Loopback wrote:
может у тебя система выдает значение версии, отличное от заданного сейчас 6.1
Нет, конечно. Это командой ver легко проверяется: Microsoft Windows [Version 6.1.7601].
Loopback wrote:
при запуске должно появиться сообщение с версией системы.
Версии продукта нет. Только это: Win7 Fix Enabled.

Loopback wrote:
Для сортировки имхо ничуть не сложнее ткнуть в заголовок
Ничего подобного. До заголовка ещё дотянуться надо и сфокусировать указатель. Это куда медленнее предлагаемого.
Loopback wrote:
сейчас же, когда устройства появляются в списке дисков, я его у себя даже из меню уберу.
Мне это бывает нужно для просмотра скрытых ключом HideRemovableNoMedia дисков.
Loopback wrote:
Третье - это твой сценарий работы, не использую.
Я догадываюсь. Smile Это типа WinRoll, когда нужно временно свернуть ТС в одну полоску. Но вот четвёртое на твоём месте я бы заценил. И то и другое на TCFS2 делается. Я там ПКМ в итоге поставил. ) А на Alt+ПКМ повесил простое обновление по OPENLANGUAGEFILE/%A. Только почему-то у меня не получается завести его через ShellExec. Что я делаю не так?
Code:
IniRead /R LNG %COMMANDER_INI% Configuration LanguageIni WCMD_ENG.LNG
ControlSetMouseAction /R /K:A /H:64 0 ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef "tem(`em_Lang %LNG%`)"'

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

Loopback wrote:
на неподдерживаемой системе 11-летней давности
Да хоть 100-летней. Wink Не спешу баловаться обновками, когда они приносят не столько ощутимой пользы, сколько вреда.

#1543:  Author: Loopback PostPosted: Tue Mar 31, 2020 19:59
    —
Flasher wrote:
Что-то мне давно подсказывает, что закавыка именно в этом.

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

Попробуй эту версию, вроде исправил.

Также поменял работу DisableMarkedMenuItems, теперь задается маркер, находящийся в конце пункта меню (например, два пробела). Маркер не удаляется.

Flasher wrote:
Только почему-то у меня не получается завести его через ShellExec. Что я делаю не так?

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

Flasher wrote:
Ты меню не для выбранного, где клик должен соответствовать координатам указателя в файловых панелях, используешь? А для чего тогда? Сторонних вызовов?

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

Flasher wrote:
Не спешу баловаться обновками, когда они приносят не столько ощутимой пользы, сколько вреда.

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

#1544:  Author: FlasherLocation: Москва PostPosted: Tue Mar 31, 2020 20:38
    —
Loopback wrote:
Попробуй эту версию, вроде исправил.
Ну, наконец-таки, победил! Smile
Только получается, ты неверно задал поведение к описанным ключам (а я ещё подумал, почему переделал в своём примере):
Quote:
:F | То же самое, но по вращению вперед.
:R | То же самое, но по вращению назад.
Вперёд = вниз, назад = вверх. А у тебя наоборот сделано. Исправь, пож-та.
И для согласованности с F (Forward) я бы предпочёл B (Backward) вместо R (Reverse). Или U/D (Up/Down).
И что насчёт параллельной прокрутки в файловой панели? Её можно стопорить?

С DisableMarkedMenuItems ситуация не изменилась. Эти настройки могут влиять?

Loopback wrote:
Не знаю, если в скрипте ShellExec работает, то ничего не мешает ему работать и здесь.
Это я не смогу проверить, т. к. при перезапуске язык, что очевидно, и так обновляется без вмешательства autorun. А кнопка работает в таком виде:
Code:
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "tem(`em_Lang Wcmd_rus.lng`)"
Хотя стоп, почему не смогу? Смогу. Достаточно коцнуть название ключа, чтобы выбрался английский. И да, вижу, что отдельно команда срабатывает, а с Atl+ПКМ — нет. С CommandExec же работает. Что-то в парсере с обработкой параметров не чисто.

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

#1545:  Author: Loopback PostPosted: Wed Apr 01, 2020 21:31
    —
Flasher wrote:
Вперёд = вниз, назад = вверх. А у тебя наоборот сделано. Исправь, пож-та.
И для согласованности с F (Forward) я бы предпочёл B (Backward) вместо R (Reverse). Или U/D (Up/Down).

Майкрософт считает иначе: "A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user."

По терминологии с Backward согласен.
Flasher wrote:
С DisableMarkedMenuItems ситуация не изменилась. Эти настройки могут влиять?

Нет. Я не знаю, что еще может не работать, тестировал везде - и везде работает.

Flasher wrote:
Что-то в парсере с обработкой параметров не чисто.

Команда, указанная в ControlSetMouseAction просто передается с сохранением параметров. Ок, проверю, что передается при такой команде.

Flasher wrote:
На вопрос про задержку так и не ответил.

Нет, чрезмерное усложнение при незначительном профите.

Flasher wrote:
И по панели диск. пространства что там? Насколько я понял, проблема в этом. Т. е. плагином это не вылечить?

Индекс 10007 и возвращает эту панель - leftinfo/rightinfo. А то, что у тебя обведено зеленым, не возвращает ни один из индексов 1-29, видимо, просто не реализовано.

#1546:  Author: FlasherLocation: Москва PostPosted: Thu Apr 02, 2020 01:59
    —
Loopback wrote:
Майкрософт считает иначе
А тебе важнее, что майкрософт считает, или всё же как пользователь будет ориентироваться по нативному поведению скроллинга в окнах? Двигаем колесо вниз, окно прокручивается вправо/вниз/вперёд/далее по списку/рабочей области, вверх — наоборот — назад к началу.
Я вдобавок и предложил U/D, чтобы не было разночтения.

На вопрос про стопорение ответишь?

Loopback wrote:
тестировал везде - и везде работает.
Хм. И на XP/2k/9x тоже?

Loopback wrote:
Индекс 10007 и возвращает эту панель - leftinfo/rightinfo.
До этого было нетрудно догадаться.
Loopback wrote:
А то, что у тебя обведено зеленым, не возвращает ни один из индексов 1-29
Я знаю. Но это то, что выдаёт любая утилита, возвращающая хэндлы при позиционировании указателя на названной панели. А индексы 11/12/10007 — то, что от указателя скрыто. Неясно, какой практический смысл в этих "скрытых" элементах Гислер увидел для разрабов, что из них вообще первично и почему элемента с тем же заголовком по сути два для одной панели. Может, он вообще их перепутал, когда внедрял в WM_USER+50?
А так же, как с прокруткой, починить тут "неправильный хэндл" нельзя?

#1547:  Author: Loopback PostPosted: Thu Apr 02, 2020 11:39
    —
Flasher wrote:
А тебе важнее, что майкрософт считает, или всё же как пользователь будет ориентироваться по нативному поведению скроллинга в окнах? Двигаем колесо вниз, окно прокручивается вправо/вниз/вперёд/далее по списку/рабочей области, вверх — наоборот — назад к началу. Я вдобавок и предложил U/D, чтобы не было разночтения.

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

Нет, пока не пояснишь, что понимается под "стопорением параллельной прокрутки в файловой панели".
Flasher wrote:
Хм. И на XP/2k/9x тоже?

Ну не докапывайся к словам. Везде на своих тестовых системах.
Если конкретно: Win10 x64, Win7 64, Win7 x86.
Flasher wrote:
Неясно, какой практический смысл в этих "скрытых" элементах Гислер увидел для разрабов, что из них вообще первично и почему элемента с тем же заголовком по сути два для одной панели. Может, он вообще их перепутал, когда внедрял в WM_USER+50?

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

Нет, тут другая ситуация, к тому же скрытое окно лежит где-то в районе табов.

#1548:  Author: FlasherLocation: Москва PostPosted: Thu Apr 02, 2020 11:52
    —
Loopback wrote:
Вот когда вкладки колесом крутятся - это вверх или вниз?
Если смотреть сверху, то колесо крутится вверх/вниз, если сзади, то, видимо, — вперёд/назад. Т. е. зависит от ракурса, ибо колесо круглое. Smile
Правда, наверное, где-то посередине. Поэтому я и выступаю не за физическую трактовку, а за поведенческую в отношении окон.

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

Loopback wrote:
Ну не докапывайся к словам.
А я и не докапываюсь. Многие тестируют своё ПО на всяких системах. На разных авторских сайтах так прямо и пишут списком от 9k до 10.
Что ж, видимо, не судьба мне подружить команду с меню...

Loopback wrote:
Что перепутал сомневаюсь, зачем бы тогда делать скрытую дублирующуюся панель.
Так а смысл скрытия в чём конкретно? Я его не вижу.

#1549:  Author: Loopback PostPosted: Thu Apr 02, 2020 21:03
    —
Flasher wrote:
Правда, наверное, где-то посередине.

Наверно. Но поскольку понятнее от этих перестановок не становится, не вижу смысла это менять.

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

А, это. Ну я же предупреждал здесь об ограничениях.

Flasher wrote:
Многие тестируют своё ПО на всяких системах.

Когда я начну писать коммерческое ПО, несомненно, буду тестировать его реально везде Smile

По меню я пока не знаю, куда еще копать.

Flasher wrote:
Так а смысл скрытия в чём конкретно? Я его не вижу.

Я тоже.

#1550:  Author: FlasherLocation: Москва PostPosted: Thu Apr 02, 2020 22:49
    —
Loopback wrote:
не вижу смысла это менять.
Допиши тогда в скобках так: ... вперед (от себя) / ... назад (на себя).

Loopback wrote:
Ну я же предупреждал здесь об ограничениях.
Понятно. И судя по тому, что себе решил эти методы поставить, тебя это устраивает?

Loopback wrote:
Я тоже.
Там ещё с 9/10 и 15/16 та же песня, только их Гислер почему-то уже внедрил парой.

Подведём пока промежуточный итог по ожиданиям:
• Правка в части параметров вызываемых команд.
• Добавка поддержки параметризованных команд ТС.
В потенциале:
• Добавка команды нажатий клавиш (в т. ч. для вызовов в отсутствие команд-аналогов).
• Смена языка ввода для заданных каталогов.

#1551:  Author: Loopback PostPosted: Fri Apr 03, 2020 12:40
    —
Flasher wrote:
Допиши тогда в скобках так: ... вперед (от себя) / ... назад (на себя).

Так и собирался сделать.
Flasher wrote:
Понятно. И судя по тому, что себе решил эти методы поставить, тебя это устраивает?

В десятке этого ограничения нет. Кстати, в Win7 x64 тоже нормально работает.
Flasher wrote:
Добавка команды нажатий клавиш (в т. ч. для вызовов в отсутствие команд-аналогов).

Это еще что такое? Не помню, чтобы я что-то такое обещал.
Flasher wrote:
Смена языка ввода для заданных каталогов.

Даже в потенциале не подписывался.

#1552:  Author: FlasherLocation: Москва PostPosted: Fri Apr 03, 2020 12:55
    —
Loopback wrote:
В десятке этого ограничения нет. Кстати, в Win7 x64 тоже нормально работает.
Может, дело в битности, а не в 10-ке?

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

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

2All Exclamation
Народ, кому не безралично появление автосмены языка в папках для быстрого поиска/фильтрации, отпишитесь, не проходите мимо.

#1553:  Author: Loopback PostPosted: Fri Apr 03, 2020 17:03
    —
Flasher wrote:
Может, дело в битности, а не в 10-ке?

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

Ок, согласен. Право есть. Можешь ожидать Smile
Flasher wrote:
с учётом того, что кода для этого по моим представлениям требуется совсем немного

Ну так вперед, реализуй. Страждущие этой "мегаполезной" фичи спасибо скажут. Я же никому ничего не запрещаю, API открыт.
Flasher wrote:
что ты даёшь заднюю

Заднюю можно дать если до этого была "передняя". Мне казалось, я сразу достаточно доходчиво обозначил позицию. Если нет - повторюсь яснее: интереса к реализации этого не имею и тратить на это время не желаю.
Flasher wrote:
2All

Вот только давить не надо, ок? Этим точно не добиться чего-то хорошего.

#1554:  Author: FlasherLocation: Москва PostPosted: Fri Apr 03, 2020 17:17
    —
Loopback wrote:
Ну так вперед, реализуй.
Я же начал с того, что реализовал это скриптом. Но скрипт и плагинный модуль — не одно и то же. Та же аналогия с поведением мыши, которые я так же реализую скриптами.
Loopback wrote:
Заднюю можно дать если до этого была "передняя".
Заднюю можно дать и с места. Ровно как поворот от ворот. Никакая доп. ясность тут не нужна. У тебя же по ряду фич тоже не было личного интереса, но ты же реализовал. Как и я реализую что-то куда более узкопрофильное, когда просят, но лично мне совершенно точно не пригодится.

Loopback wrote:
Вот только давить не надо, ок?
В смысле давить? Это для мотивации, а не давления. Всё равно тебе в конечном счёте решать.
Представляю, если бы Гислер вместо того, чтобы, как обычно, писать, что та или иная фича добавляется благодаря большому числу запросов, писал бы, что сперва после одной просьбы он хотел что-то реализовать, но под давлением запросов передумал... Laughing

#1555:  Author: Loopback PostPosted: Fri Apr 03, 2020 21:36
    —
Текущая версия.

- Исправлена ошибка с кавычками в параметрах выполняемой команды
* В качестве костыля вернул опционально старый вариант задания контролов (Class+Instance)

Flasher wrote:
У тебя же по ряду фич тоже не было личного интереса, но ты же реализовал.

Время было другое, времени было больше. И скорее всего такие фичи не требовали значительных трудозатрат. Наверно единственное исключение ModifyDialogs, который лично мне уже был не нужен, но отнял несколько дней жизни на доработку. Но он уже существовал в виде MoveButton, который так или иначе надо было исправить.
Flasher wrote:
Представляю, если бы Гислер

Сравнение с Гислером в принципе некорректно. Для него это работа и источник дохода, для меня хобби (одно из). Я не могу и не хочу делать всё подряд, даже если голосов за какую-либо фичу наберется больше одного.

#1556:  Author: FlasherLocation: Москва PostPosted: Sat Apr 04, 2020 03:57
    —
Ошибка исправилась, но только дошло, что смысла подставлять нединамическую переменную к em_Lang нет никакого, т. к. результат будет всегда один и тот же. Придётся MVV дёргать...

Loopback wrote:
вернул опционально старый вариант задания контролов
Хм. А про старый вариант ты вроде ничего раньше не писал.
Quote:
<instance> | При использовании переключателя /C — экземпляр класса контрола.
Лучше всё же порядковый номер экземпляра. Для несведующих такие вещи в справке стоит досконально разжёвать.
Внёс правки в примеры. С классами панель дискового пространства стала доступна, вопрос с кликами по ней решён. Спасибо за "костыль". Smile

Что-то надумал про запрос LonerD на последовательное выполнение команд?

Loopback wrote:
Время было другое, времени было больше.
Хох. А мне наоборот показалось, что во время карантина время таки появилось. Иначе откуда взяться реализации запросов 7-летней древности. Smile

Loopback wrote:
Для него это работа и источник дохода, для меня хобби (одно из).
ОК. Забудь про Гислера. Есть миллионы фришных разрабов (местные в частности), которых мотивирует число запросов. Если тебя нет, то будем иметь в виду. Не надо на это так остро реагировать.

#1557:  Author: Loopback PostPosted: Sat Apr 04, 2020 20:12
    —
Flasher wrote:
А про старый вариант ты вроде ничего раньше не писал.

В самом первом сообщении упоминал.

Flasher wrote:
Внёс правки в примеры.

Добавил в справку, убрал вариант, который по твоим словам корректно не работает - с кнопками X1/X2. Может быть они работают под десяткой, но это не могу проверить я. И наверно, для справки не подойдут варианты, завязанные на em-команды, т.е. те, которые после копипаста не будут сразу работать.

Flasher wrote:
Что-то надумал про запрос LonerD на последовательное выполнение команд?

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

Flasher wrote:
А мне наоборот показалось, что во время карантина время таки появилось. Иначе откуда взяться реализации запросов 7-летней древности.

Нет, не особо, скорее наоборот.
Flasher wrote:
Есть миллионы фришных разрабов (местные в частности), которых мотивирует число запросов.

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

#1558:  Author: FlasherLocation: Москва PostPosted: Sat Apr 04, 2020 20:58
    —
Loopback wrote:
В самом первом сообщении упоминал.
А, ну т. е. только у себя делал.
Loopback wrote:
И наверно, для справки не подойдут варианты, завязанные на em-команды
Можно отдельным блоком выделить и подписать чем-то вроде "Идеи для вызова пользовательских команд.".
Loopback wrote:
а в вечную бету скатываться не хочется.
Пока такое не прогнозируется. А команды с параметрами в текущей ждать?

Loopback wrote:
Да вот и удивило, что на мне свет клином сошелся при таком изобилии.
Меня это по ряду причин уже очень давно не удивляет.

#1559:  Author: Loopback PostPosted: Sun Apr 05, 2020 13:57
    —
Flasher wrote:
Можно отдельным блоком выделить и подписать чем-то вроде "Идеи для вызова пользовательских команд.".

Лучше уж тогда с примером самих em-команд.

Flasher wrote:
А команды с параметрами в текущей ждать?

Планировалось в этой.

Посмотрел, каких-то прямых вызовов этих команд (через wm_copydata, например), как я понимаю, не появилось. А через em-враппер в версии 2.0.11 должно работать, например:

Code:

CommandExec em_opentabs "path\to\tabfile.tab"

[em_opentabs]
cmd=OPENTABS
param="%A"


Т.е. получается, остается добавить только поддержку опционального числового параметра в SendCommand для команд типа cm_100Percent, cm_Select и т.д.

#1560:  Author: FlasherLocation: Москва PostPosted: Sun Apr 05, 2020 16:30
    —
Loopback wrote:
Лучше уж тогда с примером самих em-команд.
Нагромождение получится.

Loopback wrote:
А через em-враппер в версии 2.0.11 должно работать
А в предыдущих работало?

А можно сделать отложенное возвращение переменных?
Это касаемо выражений. Их подставлять таким образом нельзя?:
Code:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_CurrentLang IniRead(LNG, %COMMANDER_INI%, Configuration, LanguageIni)

И что по части команд с ключами? Ключи же в скобках не запишешь.

#1561:  Author: Loopback PostPosted: Sun Apr 05, 2020 17:53
    —
Flasher wrote:
А в предыдущих работало?

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

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

Code:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_CurrentLang %"IniRead(%COMMANDER_INI%, Configuration, LanguageIni)"



Flasher wrote:
И что по части команд с ключами? Ключи же в скобках не запишешь.

Здесь про это есть. Переключатели записываются в виде "~/S1 /S2 ... /SN". Тоже костыль, конечно.

#1562:  Author: FlasherLocation: Москва PostPosted: Sun Apr 05, 2020 20:44
    —
Loopback wrote:
Так чтобы вычислялось при каждом выполнении действия - нельзя.
Ха, а у меня в таком виде работает при каждом. Переключаю язык по ПКМ, жму Alt+ПКМ — и обновляется текущий язык. Smile

Loopback wrote:
Здесь про это есть.
О. Что-то проморгал. Отлично. )

#1563:  Author: Loopback PostPosted: Sun Apr 05, 2020 21:02
    —
Flasher wrote:
Ха, а у меня в таком виде работает при каждом.

А, точно, не учел, что CommandExec вызывается каждый раз с исходной строкой, и вычисляемая строка вычисляется. Ну тем лучше Smile

#1564:  Author: FlasherLocation: Москва PostPosted: Sun Apr 05, 2020 21:12
    —
Loopback
Конечно, супер. Жаль только If не сделать возвращаемой. В общем, добрось тогда в таком виде последние 2 примера:
Code:
# Следующие две команды включают em_Lang, где OPENLANGUAGEFILE прописано в поле "Команда:", а %A в поле "Параметры:":
# ПКМ по главному меню = обновление текущей локализации:
ControlSetMouseAction /R /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"
# Alt+ПКМ по главному меню = переключение между русским и английским языками:
ControlSetMouseAction /R /K:A /H:64 0 ShellExec '%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe' '/ef if(tcini(Configuration,LanguageIni,`WCMD_RUS.LNG`),tem(em_Lang),tem(`em_Lang Wcmd_rus.lng`))'
Также для Shift+СКМ внёс вправки.

#1565:  Author: Loopback PostPosted: Fri Apr 10, 2020 13:12
    —
Бета-версия 2.0.12

+ документированы изменения в выражениях и прочие изменения
+ команда SendCommand может отправлять команду с числовыми параметрами

Если ничего не всплывёт, это будет последняя бета перед релизом.

#1566:  Author: FlasherLocation: Москва PostPosted: Sat Apr 11, 2020 18:00
    —
Loopback
Почему-то скроллинг с Alt игнорируется в угоду скроллингу без оного. Если поставить раньше, то работают оба. И после применения Alt для переключения на скроллинг без оного нужно обязательно отправлять сообщение об активации файловой панели (кликом в неё, по дабл-Tab или иными способами).
Также c последними версиями у меня перестала работать связка Alt+Shift+скролл для Volumouse при позициониронии указателя на окне ТС (даже если команды с ключом /W закомментированы).

Кстати, всё хотел спросить: %PROCESS_ISELEVATED% = %AUTORUN_ISADMIN% ?
Ещё такой вопрос созрел: если включать стиль ws_visible для скрытых идентификаторов (11, 12, 15, 16) перед выполнением ControlSetMouseAction, ситуация изменится?

Новая порция правок хелпа — в ЛС.


Last edited by Flasher on Sun Apr 12, 2020 14:30; edited 2 times in total

#1567:  Author: LonerDLocation: Макеевка PostPosted: Sun Apr 12, 2020 03:33
    —
Loopback wrote:

А никаких сообщений об ошибках разве не выдавалось?

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

Сообщений не выдавалось и не выдаётся.
С процессами ещё поломалось, тогда же. Пока не исправлено.

В версии 2.08 работал код наподобие:
Code:
If Not ProcessExist Prog.exe Then
  ShellExec /W "D:\TotalDir\Prog.exe" "" ""
EndIf

Сейчас он не отрабатывает. И другие команды ShellExec, идущие после него, - тоже не отрабатывают.

#1568:  Author: FlasherLocation: Москва PostPosted: Sun Apr 12, 2020 14:27
    —
Да, пожалуй, косячок есть: "Right value is not boolean: not"
У меня и на современный вариант ругается: "Bad variable in expression: %"
Code:
#If Not %"ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe')" Then
#If %"Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe')" Then
If %"ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') = 0" Then
  ShellExec /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe" -startup
EndIf

#1569:  Author: Loopback PostPosted: Sun Apr 12, 2020 15:18
    —
Flasher wrote:
Почему-то скроллинг с Alt игнорируется в угоду скроллингу без оного.

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

Да, потому что Alt сам по себе имеет системное действие "активировать меню". Не уверен, что с этим получится что-то сделать.
Flasher wrote:
Также c последними версиями у меня перестала работать связка Alt+Shift+скролл для Volumouse при позициониронии указателя на окне ТС (даже если команды с ключом /W закомментированы).

В последних, в которых фикс для Win7?
Flasher wrote:
Кстати, всё хотел спросить: %PROCESS_ISELEVATED% = %AUTORUN_ISADMIN% ?

Нет. Админ - это наличие административных привилегий. А elevated - запущен ли процесс под чужой учетной записью, которая может и не быть администраторской.
Flasher wrote:
Ещё такой вопрос созрел: если включать стиль ws_visible для скрытых идентификаторов (11, 12, 15, 16) перед выполнением ControlSetMouseAction, ситуация изменится?

15,16 не скрыты, это подложка под табами. Когда рядом с табами есть свободное место - это оно.
11,12 - Не изменится. Они невидимы даже при включенном флаге видимости. И к тому же находятся на позиции табов.
LonerD wrote:
Сейчас он не отрабатывает.

Посмотрю, возможно что-то еще с поддержкой старого варианта поломалось.
Flasher wrote:
У меня и на современный вариант ругается:

В условиях выражение используется без кавычек и %:
Code:

If ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') = 0 Then
  ShellExec /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe" -startup
EndIf

#1570:  Author: FlasherLocation: Москва PostPosted: Sun Apr 12, 2020 16:16
    —
Loopback wrote:
Не уверен, что с этим получится что-то сделать.
Если не получится, я на Ctrl заменю.

Loopback wrote:
В последних, в которых фикс для Win7?
Нет, с появлением команды. Одной строки с ControlSetMouseAction в конфиге достаточно.

Loopback wrote:
Нет. Админ - это наличие административных привилегий.
Т. е. %PROCESS_RUNASADMIN% = %AUTORUN_ISADMIN% ?

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

Loopback wrote:
условиях выражение используется без кавычек и %:
А в справке не написано. И почему с Not не отрабатывает?

#1571:  Author: Loopback PostPosted: Sun Apr 12, 2020 18:27
    —
Flasher wrote:
Нет, с появлением команды.

Как-то это сомнительно. Volumouse поставил, ошибку, мешающую ее работе нашел, но она относится чисто к фиксу для Win7. На десятке и так всё работало.

Версия с исправлением. Также должно быть исправлено "скроллинг с Alt игнорируется в угоду скроллингу без оного".

Flasher wrote:
Т. е. %PROCESS_RUNASADMIN% = %AUTORUN_ISADMIN% ?

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

Возможно, не помню уже. Надо пробовать.

Flasher wrote:
А в справке не написано.

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

#1572:  Author: FlasherLocation: Москва PostPosted: Sun Apr 12, 2020 19:03
    —
Loopback wrote:
Volumouse поставил, ошибку, мешающую ее работе нашел, но она относится чисто к фиксу для Win7.
Да, сейчас заработало. Спасибо. А тестировал я со всеми бетами, начиная с 2.08.

Loopback wrote:
На десятке и так всё работало.
Но это не значит, то проблема имела отношение к фиксу, а не 7-ке.

Loopback wrote:
Также должно быть исправлено "скроллинг с Alt игнорируется в угоду скроллингу без оного".
Подтверждаю. Активацию сис. меню побороть не удалось?

Loopback wrote:
Хотя может еще и придется с процентом делать
Т. е. менять на %? И что по Not? А то в справке задан порядок приоритета, где Not идёт в начале, но с новым синтаксисом не работает.

#1573:  Author: Loopback PostPosted: Mon Apr 13, 2020 21:09
    —
Flasher wrote:
Но это не значит, то проблема имела отношение к фиксу, а не 7-ке.

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

Flasher wrote:
Активацию сис. меню побороть не удалось?

Не смотрел еще, дело не пяти минут. Проверю одну идею, если не сработает, придется с этим жить Smile

Flasher wrote:
И что по Not?

Пока нет времени, тут надо разбираться. Похоже сейчас такая ситуация, что в условии с not правильно не работает ни legacy, ни новый код.

#1574:  Author: FlasherLocation: Москва PostPosted: Tue Apr 21, 2020 17:38
    —
Loopback wrote:
придется с этим жить
Жить в таком случае будем с Ctrl, как и писал выше. Wink

Loopback wrote:
с not правильно не работает ни legacy, ни новый код.
А у меня и твой нижний вариант молчит. Пока оставил старый.

Ещё эти команды почему-то падючими оказались:
Code:
# ПКМ по панели дискового места = открытие 'Рабочий стол' в соотв. панели:
ControlSetMouseAction /R /C:TMyPanel 2 CommandExec /CD ::
ControlSetMouseAction /R /C:TMyPanel 1 CommandExec /CD "" ::
Сперва всё нормально (с переходами в разные папки), а потом с какого-то момента ноль реакции. Перезапускаю ТС, опять какое-то время работает.

#1575:  Author: rad10 PostPosted: Wed Apr 22, 2020 00:02
    —
Hi.
Нет возможности запускать исполняемые файлы с помощью ShellExec от имени Администратора?
Upd: Правда не получится завершить запущенный процесс, если ТС не от админа...

#1576:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2020 00:21
    —
rad10
В справке указана такая возможность? Нет. Так чего спрашивать?
И правильно что нет, иначе при каждом запуске придётся бороться с вводами паролей на каждой такой команде. Проще сразу запускать ТС от админа и не мучиться.
И завершение не про ShellExec, а про ProcessTerminate.

#1577:  Author: rad10 PostPosted: Wed Apr 22, 2020 01:18
    —
Flasher
Если бы было в справке - я бы не спросил.
Вижу сейчас ведется доработка - вот решил уточнить, мб есть такая не документированная возможность.
Не помню, когда последний раз вводил пароль при запуске программы от админа через контекстное меню. Да и при чем тут это? про завершение я писал в общем, не конкретизируя команду.

#1578:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2020 02:45
    —
rad10
Речь идёт о неадминских аккаунтах и контроле учёток, при работе которого будет запрос на ввод пароля там, где это требуется. Рассчитывать на недокументированные ключи тут бессмыленно. Автор у нас такими вещами не жадничает, а справка качественно прорабатывается и ныне дорабатывается в основном для новинок.

#1579:  Author: Loopback PostPosted: Wed Apr 22, 2020 17:46
    —
Flasher wrote:
Ещё эти команды почему-то падючими оказались:

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

По условиям пока все не получается поправить. Где проблема я примерно представляю.

rad10
Как уже написано выше, такой возможности нет.

#1580:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2020 18:16
    —
Loopback wrote:
Они сейчас ищутся один раз при первом выполнении команды.
А при чём тут хэндлы, если идёт обращение по классу и порядковому номеру экземпляра? Ты хэндл отлавливаешь по ним что ли, а потом загружаешь его из памяти? Лучше так не делать, это всё и портит, по всей видимости. Или сделать получение в текущий момент, как и в случае с WM_USER+.
Из оконных модификаций кроме смены тулбаров ничего не делалось. Но и при сменах команды продолжали работать. Была ситуация, когда в левой панели происходил переход при нажатии в правой, в то время как в правой уже не работало. Не может же дескриптор записаться для другой панели? Инстанс не меняется, да и в текущий момент уже не учитывается, судя по тому, что о хэндлах заговорил.

Loopback wrote:
По условиям пока все не получается поправить.
Ясно, подождём. А по Alt?


rad10
Но вам никто не мешает перед выполняемой программой ставить путь к утилите (sudo, ele, elevate и т. п.) или ярлыка на повышение прав.

#1581:  Author: Loopback PostPosted: Wed Apr 22, 2020 21:53
    —
Flasher wrote:
А при чём тут хэндлы, если идёт обращение по классу и порядковому номеру экземпляра?

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

Всё может поменяться в любой момент, если добавляется или удаляется контрол с тем же классом. Экземпляр - он не определяет контрол однозначно. Есть, допустим, два контрола TMyPanel1, TMyPanel2. Если удалить контрол TMyPanel1, то TMyPanel2 станет первым и будет находиться как TMyPanel1.
Flasher wrote:
А по Alt?

Аналогично.

#1582:  Author: FlasherLocation: Москва PostPosted: Wed Apr 22, 2020 22:04
    —
Loopback wrote:
будет менее эффективно
А я считаю, что более. Вероятность потерять инстанс гораздо меньше, чем хэндл.

Loopback wrote:
если добавляется или удаляется контрол с тем же классом.
Добавление же не меняет текущие номера по логике. А если играться с FullScreen-ом, то те же инстансы должны присваиваться аналогично исходному положению. А вот с потерей хэндлов уже ничего не поделаешь.

#1583:  Author: Loopback PostPosted: Thu Apr 23, 2020 15:03
    —
Flasher wrote:
Добавление же не меняет текущие номера по логике. А если играться с FullScreen-ом, то те же инстансы должны присваиваться аналогично исходному положению. А вот с потерей хэндлов уже ничего не поделаешь.

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

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

#1584:  Author: FlasherLocation: Москва PostPosted: Thu Apr 23, 2020 16:03
    —
Loopback wrote:
если перед существующим контролом
В дереве? Если изначально в полноценном окне они идут под 1 и 2 номерами, как в данном случае, то, по логике, добавка перед уже невозможна. Или есть варианты?

#1585:  Author: Loopback PostPosted: Thu Apr 23, 2020 20:28
    —
Flasher wrote:
В дереве? Если изначально в полноценном окне они идут под 1 и 2 номерами, как в данном случае, то, по логике, добавка перед уже невозможна. Или есть варианты?

Есть вариант создать окно и переместить его в позицию перед ними. Хотя, не думаю что это очень уж распространенный сценарий.

Попробуй эту версию, сделал поиск при каждом вызове.

#1586:  Author: FlasherLocation: Москва PostPosted: Thu Apr 23, 2020 21:40
    —
Loopback wrote:
не думаю что это очень уж распространенный сценарий.
В случае ТС это ещё мягко сказано. Здесь я вообще не вижу ему распространения.

Loopback wrote:
Попробуй эту версию, сделал поиск при каждом вызове.
Во, другое дело. Smile Уже, по крайней мере, FullScreen не ломает команду. Думаю, и далее каких-то проблем не будет. Спасибо.

 А по Alt я пока костыль с отжатием сделал (но что-то не особо нравится — указатель с часами дёргается):

#1587:  Author: Loopback PostPosted: Fri Apr 24, 2020 20:20
    —
Бета-версия 2.0.13

* Tweaks: ControlSetMouseAction изменен переключатель /W:R на /W:B
+ Tweaks: активация главного меню отменяется, если было произведено действие при нажатом Alt
+ в выражениях теперь должны работать команды из плагинов
- исправлена поддержка "старых" условий с командами и "not"

Фикс с альтом, конечно, так себе, но делать лучше - слишком много кода ради обработки единственной клавиши.

#1588:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2020 20:50
    —
Loopback wrote:
+ в выражениях теперь должны работать команды из плагинов
Эмм. А раньше не могли?
Loopback wrote:
- исправлена поддержка "старых" условий с командами и "not"
И новых, как вижу, тоже. Wink

Loopback wrote:
но делать лучше
Что делать?
Теперь работает. По отзывчивости указателя похоже на мой костыль выше. Rolling Eyes

#1589:  Author: Loopback PostPosted: Fri Apr 24, 2020 22:31
    —
Flasher wrote:
А раньше не могли?

Нет. Забыл доделать код для функций плагинов.

Flasher wrote:
Что делать?

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

#1590:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 24, 2020 22:53
    —
Решил повесить на двойной клик по разделителю панелей показ вертикальной панели, а по двойному клику по вертикальной панели — её скрытие. Прописал
Code:

ControlSetMouseAction /L:D 23 SendCommand 2944
ControlSetMouseAction /L:D 29 SendCommand 2944

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

#1591:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2020 23:08
    —
Loopback wrote:
Иногда пункт меню выделяется, иногда нет, визуальный такой косячок.
Только в начале прокрутки. Если специально туда не смотреть, то и не видно. А делать-то что?

HEXFIX
Зачем убивать исходное поведение с центровкой?

#1592:  Author: HEXFIXLocation: Калининград PostPosted: Fri Apr 24, 2020 23:10
    —
А я центровку на СКМ повесил Very Happy

UPD. Сейчас проверил. Любая команда, которая работает по принципу тумблера, срабатывает по клику в любом месте, хотя задаю по двойному.

#1593:  Author: FlasherLocation: Москва PostPosted: Fri Apr 24, 2020 23:30
    —
HEXFIX
Подтверждаю.
Кстати, примерчик (только с /M:U) в хелпе не помешает. Интересная мысль.

#1594:  Author: Loopback PostPosted: Sat Apr 25, 2020 00:26
    —
HEXFIX wrote:
Любая команда, которая работает по принципу тумблера, срабатывает по клику в любом месте, хотя задаю по двойному.

Не совсем так, это назначение двойного клика для любой кнопки так работало. Глупая ошибка, в документации для даблклика используется "D", а в коде осталось "С" от ранних версий. Удивительно, что до сих пор оставалось незамеченным.

Исправленный вариант.

#1595:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2020 01:16
    —
Loopback
Завелось. Я себе решил так сделать:
Code:
ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /L /K:R 29 SendCommand 2944
Но появляется меню после отпускания. Можешь его подавить (или отправить сообщение на отпускание кнопки)?

#1596:  Author: Loopback PostPosted: Sat Apr 25, 2020 13:04
    —
Flasher wrote:
Можешь его подавить (или отправить сообщение на отпускание кнопки)?

Нет, т.к. тут это не обрабатываемая клавиша, а модификатор.

Но если не жаль меню, можно назначить на одиночное нажатие ПКМ пустое действие и поставить его перед командой:

Code:

ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /R 29
ControlSetMouseAction /L /K:R 29 SendCommand 2944

#1597:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2020 14:51
    —
Loopback wrote:
ControlSetMouseAction /R 29
Только 23. Увы, не помогает, хоть где ставь.

#1598:  Author: Loopback PostPosted: Sat Apr 25, 2020 16:34
    —
Flasher wrote:
Увы, не помогает, хоть где ставь.

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

Если пожертвовать и меню с положениями разделителя, то можно так:
Code:

ControlSetMouseAction /R:U 23
ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /R 29
ControlSetMouseAction /L /K:R 29 SendCommand 2944

Вопрос только в целесообразности таких жертв.

#1599:  Author: FlasherLocation: Москва PostPosted: Sat Apr 25, 2020 17:03
    —
Loopback
Да, так работает. В общем, суть ясна, подумаю.

Loopback wrote:
Нет, т.к. тут это не обрабатываемая клавиша, а модификатор.
А, ты для элементов заголовка, вкладок, кнопок дисков раньше только для /R делал. Ясно..

#1600:  Author: Loopback PostPosted: Thu Apr 30, 2020 23:56
    —
Бета-версия 2.0.14

+ добавлен макрос %AUTORUN_TCLANG% с текущим кодом языка ТС
+ Tweaks: добавлена субкоманда ShowPopupMenu для ControlSetMouseAction

Всё же ещё одна бета, хотелось меню без внешних приложений, решил доделать.

#1601:  Author: FlasherLocation: Москва PostPosted: Fri May 01, 2020 01:03
    —
Loopback
А ведь меня обе мысли посещали, но что-то не спешил озвучить. Smile

2 кб сверху на менюшку. ) А сможешь поддержку иконок (как в TCmenu) сделать? Понятно, что дело более трудоёмкое, но всё же.

#1602:  Author: LonerDLocation: Макеевка PostPosted: Fri May 01, 2020 04:20
    —
Loopback
А что насчёт выполнения последовательности команд? Не планируется к релизу?
Code:
ControlSetMouseAction /W:F 26 CommandExec 4001,3006

#1603:  Author: FlasherLocation: Москва PostPosted: Fri May 01, 2020 04:40
    —
LonerD
За обсуждением совсем не следишь Question

#1604:  Author: LonerDLocation: Макеевка PostPosted: Fri May 01, 2020 05:39
    —
Недочитал. Значит пока остаётся вариант с назначение em-команд.

#1605:  Author: FlasherLocation: Москва PostPosted: Fri May 01, 2020 09:04
    —
Не только. Прежде всего ShellExec + TCFS2. На мой пример в справке можно было бы и наткнуться.

#1606:  Author: Loopback PostPosted: Fri May 01, 2020 13:53
    —
LonerD wrote:
А что насчёт выполнения последовательности команд? Не планируется к релизу?

К релизу точно нет. Быстро "в лоб" делать не хочется, а делать правильно - реализация ожидается непростая. Так что пока только через TCFS2.

Flasher wrote:
А сможешь поддержку иконок (как в TCmenu) сделать?

Наверно когда-нибудь сделаю, когда придет вдохновение, сейчас вряд ли.

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

#1607:  Author: FlasherLocation: Москва PostPosted: Fri May 01, 2020 23:43
    —
Loopback wrote:
Наверно когда-нибудь сделаю, когда придет вдохновение
Тогда до лучших времён. Вдруг они настанут к след. релизу. Wink
PopSel (+ TCFS2) — годный вариант, по умолчанию становится под указатель, хотя умеет центрироваться и появляться в нужных координатах. Для работы со списками есть %file%.

Слушай, а что с этим %AUTORUN_TCLANG% делать без условий? Какой может быть профит?

#1608:  Author: Loopback PostPosted: Sat May 02, 2020 17:45
    —
Flasher wrote:
PopSel (+ TCFS2) — годный вариант

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

Flasher wrote:
Какой может быть профит?

Code:

... ShowPopupMenu %COMMANDER_PATH%\Config\Menu_%AUTORUN_TCLANG%.mnu

#1609:  Author: FlasherLocation: Москва PostPosted: Sat May 02, 2020 21:44
    —
Loopback wrote:
как-то слишком уж неспешно.
Как раз из-за иконок. Без /I нормально грузится. Если позиций немного, то с иконками — более менее.
Loopback wrote:
... ShowPopupMenu
А, ясно. Просто я подумал про замену IniRead для LngRead, но там одним окончанием не отделаешься.

#1610:  Author: Loopback PostPosted: Wed May 06, 2020 23:38
    —
Релиз Autorun 2.1.0 выложен на wincmd.ru.

+ небольшие добавления и исправления в API
+ дополнения в документации

#1611:  Author: FlasherLocation: Москва PostPosted: Thu May 07, 2020 03:21
    —
Loopback
С релизом! Cool
Loopback wrote:
+ дополнения в документации
А где их смотреть?
Примеры не мешало бы в help_en.chm тоже исправить.

#1612:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu May 07, 2020 06:08
    —
Loopback
В связи с релизом нет ли желания привести в более свежее состояние шапку этой темы? Я как модератор пока ограничился тем, что убрал там в конце свои утратившие актуальность дописки, однако дополнять новыми дописками имеющийся чужой текст (а тем более — лезть в него) мне бы не хотелось. Если что, доступ к шапке запрашивается у CaptainFlint.

#1613:  Author: Loopback PostPosted: Tue May 12, 2020 12:48
    —
Flasher wrote:
А где их смотреть?
Примеры не мешало бы в help_en.chm тоже исправить.

Там по мелочам, в частности по API. Примеры вот точно забыл.

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

Шапку редактировать могу, проверил. Может уже раньше запрашивал.

#1614:  Author: FlasherLocation: Москва PostPosted: Wed May 13, 2020 07:23
    —
Loopback
Понятно. А первую половину шапки с пунктами и правда переписать надо.

Мысль тут пришла: AltGr=Alt, чтобы реестр не трогать. Сделаешь Question

#1615:  Author: Loopback PostPosted: Wed May 13, 2020 13:09
    —
Flasher wrote:
AltGr=Alt, чтобы реестр не трогать.

Опять шарады загадываешь? Smile

#1616:  Author: FlasherLocation: Москва PostPosted: Wed May 13, 2020 13:12
    —
Loopback
Подразумевается подмена (псевдоремап) AltGr на LAlt, чтобы хоткеи с Alt в ТС при удерживании RAlt работали везде с любыми драйверами клавиатур как надо.

#1617:  Author: LonerDLocation: Макеевка PostPosted: Wed May 13, 2020 14:46
    —
Я проще эту проблему в ТС решил - назначил в секции [Shortcuts] на все команды с A+ аналогичные команды с CA+.
Хотя да - через плагин эту проблему, наверное, можно решить кардинальным образом, и при активном главном окне ТС интерпретировать нажатие Ctrl+Alt как Alt (правда, придётся ещё проверять, чтобы в это время не был активен ввод текста).

#1618:  Author: FlasherLocation: Москва PostPosted: Wed May 13, 2020 15:12
    —
LonerD wrote:
назначил в секции [Shortcuts] на все команды с A+ аналогичные команды с CA+.
Ну, это не решение. У меня 18 клавиш отдельно с Ctrl+Alt+ связаны.

#1619:  Author: Loopback PostPosted: Wed May 13, 2020 23:34
    —
Flasher
Ясно. Не знал, что тут какие-то проблемы есть, как-то даже и мысли не возникает тянуться к правому альту, когда есть левый, тем более что сейчас у меня на клавиатуре правого альта вообще нет Smile

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

#1620:  Author: FlasherLocation: Москва PostPosted: Thu May 14, 2020 00:38
    —
Loopback wrote:
и мысли не возникает тянуться к правому альту, когда есть левый
А у меня и мысли бы не возникло тянуться в левому Альту в сочетании с M|K|L|P|OEM_,|OEM_.|OEM_US/?|OEM_US;:|OEM_US'", когда есть правый.

ОК.

#1621:  Author: asmadeus PostPosted: Thu May 14, 2020 22:13
    —
Доброго всем вечера!
Скажите, а работает ли у кого нибудь версия плагина на Тотале 9.51х64?

#1622:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri May 15, 2020 06:35
    —
asmadeus
А почему бы ей не работать? И что такое"версия плагина"? Если у вас есть проблемы, формулируйте их без подобных наводящих вопросов.

#1623:  Author: asmadeus PostPosted: Fri May 15, 2020 09:00
    —
Avada wrote:
И что такое"версия плагина"?

Версия последняя, 2.1.0. Тотал х64 9.51

Avada wrote:
Если у вас есть проблемы

Да проблема собственно в том, что на 64 битности не вижу плагина. Не стартует то, что прописано. 32-битный тотал нормально себя ведет.

#1624:  Author: FlasherLocation: Москва PostPosted: Fri May 15, 2020 09:13
    —
asmadeus wrote:
не вижу плагина.
Где именно? В диалоге "Информационные плагины"? Папка для обеих битностей тестируемого ТС общая?
asmadeus wrote:
Не стартует то, что прописано.
Это уже другая проблема, которая может быть связана с условиями в коде. Тут конкретика нужна.

#1625:  Author: asmadeus PostPosted: Fri May 15, 2020 20:39
    —
Flasher wrote:
Папка для обеих битностей тестируемого ТС общая?

Папка общая
Не вижу - в смысле нет результата его работы. В списке есть, в поиске прописан, да и на 32-х битном тотале отрабатывает
Flasher wrote:
Тут конкретика нужна.

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

#1626:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri May 15, 2020 21:27
    —
asmadeus
Вас решение проблемы интересует или нет? Для начала — какие именно результаты работы этого плагина или его дочерних модулей вы видите в 32-битном TС и не видите при этом в 64-битном? Конкретно, а не общими словами.

#1627:  Author: asmadeus PostPosted: Fri May 15, 2020 21:43
    —
Avada, давайте кокретно. Может, полностью конфиг скинуть?
Навскидку - при старте
Code:
shellexec "%COMMANDER_PATH%\TCIMG.exe" "menux=1||em_Grey"
shellexec "%COMMANDER_PATH%\TCIMG.exe" "start=Punto"

При выходе:
Code:
shellexec "%COMMANDER_PATH%\TCIMG.exe" "close=punto.exe"
shellexec "%COMMANDER_PATH%\TCIMG.exe" "close=ps64ldr.exe"
shellexec "%COMMANDER_PATH%\TCIMG.exe" "close=PortableAppsPlatform.exe"
shellexec "%COMMANDER_PATH%\TCIMG.exe" "close=TCPIW.exe"
shellexec "%COMMANDER_PATH%\TCIMG.exe" "close=TCIMG.exe"

#1628:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat May 16, 2020 06:12
    —
asmadeus
Это уже понятнее, чем "не вижу плагина". Но, скажем,TCIMG я пользуюсь в очень ограниченных пределах и связки с ним обсуждать не буду. (Flasher не пользуется вовсе.) С Punto у меня без всяких плагинов есть многолетние проблемы и со штатной работой. И так далее. В общем, экспериментировать ни с одним пунктом данного списка желания не имею и более тут ничем полезен быть не могу. Может быть, автор имеет какие-то идеи.

#1629:  Author: FlasherLocation: Москва PostPosted: Sat May 16, 2020 10:29
    —
asmadeus
А если не навскидку? Простые команды типа "MsgBox Test", "SendCommand 2127", "ShellExec notepad" выполняются на чистом конфиге?
И зачем прослойка в виде лишнего процесса для завершения, когда есть ProcessTerminate?

#1630:  Author: asmadeus PostPosted: Sun May 17, 2020 07:17
    —
Avada, Flasher, спасибо, что отозвались. Помогли понять, что проблема уникальна и только моя

#1631:  Author: Loopback PostPosted: Sun May 17, 2020 13:12
    —
asmadeus
Да, похоже какая-то локальная проблема. Скачал TCIMG, попробовал команды с меню и запуском/закрытием приложений (правда не с punto, его давно не использую) - всё работает без проблем на x64 версии.

#1632:  Author: asmadeus PostPosted: Sun May 17, 2020 20:17
    —
Loopback, проблема была в условии (просто ранее сидел чисто на 32 битной версии, и не замечалось). Условие такое:
Code:
If %AUTORUN_TCARCH% = 32 Then
LoadLibrary Plugins\TCFS2Tools.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
Else
LoadLibrary Plugins\TCFS2Tools.dll64
EndIf


А заработало так:
Code:
If %AUTORUN_TCARCH% = 32 Then
LoadLibrary Plugins\TCFS2Tools.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
Else
LoadLibrary Plugins\TCFS2Tools.dll64
LoadLibrary Plugins\Autorun_Sysinfo.dll64
EndIf

Вот только не пойму - причем эта библиотека при запуске программ? Ну да ладно, не суть . Работает!

#1633:  Author: FlasherLocation: Москва PostPosted: Sun May 17, 2020 20:42
    —
asmadeus
О чём я и писал. Не нужны тут никакие условия. См. примечания в справке на странице Команды > LoadLibrary.

#1634:  Author: Loopback PostPosted: Mon May 18, 2020 14:06
    —
Нежданно-негаданно, иконки подъехали Smile

Новая версия Tweaks, обновленная справка по команде.

#1635:  Author: FlasherLocation: Москва PostPosted: Mon May 18, 2020 14:16
    —
Loopback
Красавело! Благодарим'c! Razz
Вот бы ещё для безмышиного вызова такое. Rolling Eyes

P.S.: Шапку потом будешь править?

#1636:  Author: Loopback PostPosted: Mon May 18, 2020 14:43
    —
Flasher wrote:
Вот бы ещё для безмышиного вызова такое.

В смысле? Экзешник отдельный?

Flasher wrote:
P.S.: Шапку потом будешь править?

На неделе поправлю, некогда еще было.

#1637:  Author: FlasherLocation: Москва PostPosted: Mon May 18, 2020 14:47
    —
Loopback wrote:
В смысле? Экзешник отдельный?
Ну, как вариант, если чисто клавишный для плагина отпадает. Типа TcMenuPopup посл. редакции с опциями размещения по центу и под перекрестием разделителя с верхними углами файловых панелей.

#1638:  Author: Loopback PostPosted: Mon May 18, 2020 15:08
    —
Flasher
Ладно, как-нибудь можно будет подумать. У каждого подхода свои проблемы в реализации, неизвестно что проще.

#1639:  Author: FlasherLocation: Москва PostPosted: Mon May 18, 2020 15:20
    —
Loopback
Хорошо. Если будет утилита, то публикацию, как понимаю, стоит ожидать в отдельном топике.

Вижу косяк. После вызова меню не работает навигация стрелками и его скрытие по Esc.

#1640:  Author: Loopback PostPosted: Mon May 18, 2020 16:48
    —
Flasher wrote:
Вижу косяк.

Пожалуй, не совсем и косяк, учитывая что меню сейчас вызывается только мышью. За всё время даже и не подумал проверить такой сценарий Smile

Перезалил по той же ссылке.

#1641:  Author: FlasherLocation: Москва PostPosted: Mon May 18, 2020 16:59
    —
Loopback wrote:
учитывая что меню сейчас вызывается только мышью.
Почему только? А как же клавишные модификаторы? Wink

Спасибо за фикс.

#1642:  Author: Loopback PostPosted: Sat May 30, 2020 23:57
    —
В общем, поскольку проблем вроде больше не возникло, плагин ушел в релиз.

2.1.1
- небольшие исправления в документации
* чистки в коде
+ Tweaks: ShowPopupMenu может отображать значки в меню

#1643:  Author: FlasherLocation: Москва PostPosted: Sun May 31, 2020 00:38
    —
Loopback
Да не сказать, что сильно тестировал менюшки. До баров даже руки не дошли, тем более с такими ограничениями.

По справкам:
Страница GetSystemMetrics опустела.
В англ. справке примеры для ModifyDialogs так и не поправил. Там же к неисправленным знакам вопроса добавилась страница ControlSetMouseAction в моих примерах.

#1644:  Author: yozhikLocation: Электросталь PostPosted: Sun May 31, 2020 03:33
    —
А как по кнопке на тулбаре попасть, чтобы на неё менюшку повесить? Вижу класс TButtonBar, а как внутри него до кнопки добраться не понимаю. Вот так на всех кнопках одна и та же менюшка получается:
Code:
ControlSetMouseAction /L:U /C:TButtonBar 1 ShowPopupMenu %COMMANDER_PATH%\Profile\tools\MenuPopup\TCMenuSystem.mnu

#1645:  Author: FlasherLocation: Москва PostPosted: Sun May 31, 2020 03:46
    —
yozhik
Никак. Кнопки рисованые и не имеют отдельных оконных идентификаторов и классов.

#1646:  Author: Loopback PostPosted: Sun May 31, 2020 11:23
    —
Flasher wrote:
Страница GetSystemMetrics опустела.

Точно. Интернет вчера отвратительно работал, страничка недогрузилась. Перезалил архив, версию не поднимал.
Flasher wrote:
В англ. справке

Да, надо бы это сразу править, потом забывается...

#1647:  Author: FlasherLocation: Москва PostPosted: Sun May 31, 2020 17:11
    —
Loopback wrote:
Да, надо бы это сразу править
Так и? См. выделения в цитате из второй половины сообщения в ЛС от 25 апр. 15:36. Плюс:
Quote:
# Shift+??? anywhere = switch to main toolbar,
Остальное, вроде, починил.

Add: исправления вижу, теперь ОК.

#1648:  Author: Loopback PostPosted: Sun May 31, 2020 20:53
    —
Новая версия. Даже не знаю - бета это или альфа... Самые глобальные изменения за последние семь лет Very Happy Пока называю 2.2.x, но вероятнее всего, это будет 2.5 или 3.0.

Список изменений:

Унифицированы интерфейсы команд - внутренних и экспортируемых из плагинов (внутреннее изменение, оптимизация)
Парсер переписан с нуля, с учетом сохранения совместимости
Соответственно, переписаны условия If..Else..Endif, добавлена возможность однострочного If .. Then
Добавлены циклы For и While
Code:
    For var = 1 To 5 [Step x]
    ...
    Next

    While var > 0
    ...
    Wend

Ключевые слова для управления выполнением (break, continue, return)
Добавлены пользовательские функции
Code:
    Func FuncName([ByRef] var1, var2, var3 = 1)
    ...
    EndFunc

Переменные в функциях локальны
Добавлено присваивание переменной
Code:
    var = expression

Поддержка разделения на строки с символом "_" в конце
Code:
    var = expression_1 + _
          expression_2 - _
          expression_N

Поддержка загрузки подключаемых файлов (includes)
Code:
    Pragma Include "path_to_include" (алгоритм аналогичен LoadLibrary, но работают только переменные окружения)

В подключаемых файлах можно использовать Pragma IncludeOnce
В выражениях можно использовать переменные без %%


В целом, совместимость со старыми скриптами сохраняется. Если команда/функция находится в начале строки (без присваивания), то Autorun их различает по наличию "(" после имени. Если вдруг понадобится запустить "старую" команду, где первый символ после имени должен быть скобкой, ее можно просто взять в кавычки.
Code:
MsgBox 123 Title - OK
MsgBox("123", "Title") - OK

А вот в присваивании в правой части писать команды "старым" методом нельзя.
Code:
ex = FileExist "c:\Total\NoClose.exe" - работать не будет
ex = FileExist("c:\Total\NoClose.exe") - ОК


Синтаксис %"expression" используется только в параметрах команд старого типа.

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

- Убрана команда AutorunBlockUnload(YES), которая оставалась с древних времен для совместимости, оставлена только Pragma AutorunBlockUnload.
- Убран старый синтаксис FileExists в условиях, можно легко переписать FileExists "file" -> FileExists("file") (имя должно быть в кавычках). Реально, тут было слишком много лишнего кривого кода ради одной функции.
- Убрана директива AutorunAllowWriteEnv, я ее и раньше считал невразумительным костылем, а в новом коде она вообще нормально не ложится.
- Еще не убрана, но есть желание убрать директиву AutorunLoadInSubrocess, все же сомневаюсь, что кому-то может понадобиться загружать Autorun повторно в процессе, например, поиска. А сейчас, с учетом подключаемых файлов, поиск этой директивы может быть уже не так безболезнен как раньше.

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

По получившемуся результату мне не нравится единственный момент - передача переключателей в функции через специальный первый параметр ("~/S /N ..."), для обычных команд еще терпимо, но вот для строчных как-то это совсем не очень. Наверно, придется немного переделать.

Справка еще не обновлялась, поэтому достаточно подробно расписал пока здесь, возможно, что-то еще будет меняться. У тех, кто знаком с Autoit, проблем с синтаксисом не будет Smile

Flasher wrote:
Так и?

Правил-правил, в итоге скопировал старый вариант Smile Обновил, последний раз, если что осталось - потом.

#1649:  Author: FlasherLocation: Москва PostPosted: Sun May 31, 2020 22:31
    —
Loopback
Быстро же ты синтаксис в приоритет над последними хотелками вывел. Smile

Loopback wrote:
добавлена возможность однострочного If .. Then
Наконец-то! А сделать, чтобы такая запись заработала в качестве параметра ControlSetMouseAction, можно?

Loopback wrote:
Добавлены пользовательские функции
А вызывать их как? Через Call, со скобками, без? Интерактивно (ControlSetMouseAction) можно?
Loopback wrote:
Переменные в функциях локальны
А если они объявлены до вызова?

Loopback wrote:
Поддержка загрузки подключаемых файлов (includes)
Имеется в виду скриптов с синтаксисом autorun?

Loopback wrote:
В целом, совместимость со старыми скриптами сохраняется.
Это очень хорошо. Smile

Loopback wrote:
есть желание убрать директиву AutorunLoadInSubrocess
Нисколько не против.

Loopback wrote:
Наверно, придется немного переделать.
А тут только и остаётся добавить флаг в качестве последнего параметра.

Loopback wrote:
Обновил, последний раз
См. добавку в пред. посте.

#1650:  Author: Loopback PostPosted: Mon Jun 01, 2020 01:15
    —
Flasher wrote:
Быстро же ты синтаксис в приоритет над последними хотелками вывел.

А чего тянуть-то? Wink

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

Flasher wrote:
Наконец-то! А сделать, чтобы такая запись заработала в качестве параметра ControlSetMouseAction, можно?

А вызывать их как? Через Call, со скобками, без? Интерактивно (ControlSetMouseAction) можно?

Напрямую в качестве параметра нет, но можно вызывать функцию с нужными If-ами и прочим. Вызов по имени точно такой же, как у любой другой команды. Можно без скобок командой (если не нужно возвращаемое значение), можно со скобками:
Code:

    FuncName 123 "asdf"   - OK
    FuncName(123, "asdf")  - OK
    ControlSetMouseAction ... FuncName 123 zxcv - OK

    Func FuncName(var1, var2)
    ...
    EndFunc


Flasher wrote:
А если они объявлены до вызова?

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

Flasher wrote:
Имеется в виду скриптов с синтаксисом autorun?

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

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

Flasher wrote:
А тут только и остаётся добавить флаг в качестве последнего параметра.

Да, так и планировалось.

#1651:  Author: yozhikLocation: Электросталь PostPosted: Mon Jun 01, 2020 01:41
    —
Ух ты, как много поменялось со вчерашнего дня!
А у меня жалоба на 2.1.1, но если надо могу перепроверить на новой 2.2.х.
Вызываю Распаковку архива кликом по кнопке F6 с зажатым Alt
Code:
ControlSetMouseAction /L:U /K:A 17 /B:4 SendCommand 509

Диалог открывается, но на нажатие клавиш Enter, Esc, Tab не реагирует. Надо по нему кликнуть мышкой, только тогда он «отмирает». Смотришь на него — он вроде в фокусе, а на самом деле фокуса на нём нет. Причём, если мышкой кликнуть по любой кнопке (в том числе по красной закрывающей), то ничего не сработает, только со второго клика.

#1652:  Author: FlasherLocation: Москва PostPosted: Mon Jun 01, 2020 02:12
    —
Loopback wrote:
На самом деля я вроде и не давал каких-то конкретных обещаний.
Если под конкретными ты понимаешь временны́е, то, разумеется, нет. Wink
Loopback wrote:
Да и что-то та тема уже несколько поднадоела
Какая та? Вызов списка команд через запятую или какая?

Loopback wrote:
Можно без скобок командой (если не нужно возвращаемое значение), можно со скобками:
Хорошо. А под "можно сделать" я имел в виду запрос, а не нынешнюю правку конфига.

Loopback wrote:
Но что-то мне подсказывает, что сейчас оно как-то не как задумано работает...
Позже оценю тогда.

Loopback wrote:
но как выяснилось, возможны менее болезненные варианты.
Значит, тогда я был ближе к истине. Wink


yozhik
Это опять же с Alt и фокусировкой на главном меню связано, как в случае с фиксом в отношении прокрутки вкладок.

#1653:  Author: yozhikLocation: Электросталь PostPosted: Mon Jun 01, 2020 10:00
    —
Flasher
У кнопки F5 этот функционал с клавишами — родной. И когда с Alt по F5 щёлкаешь, то всё работает.

#1654:  Author: FlasherLocation: Москва PostPosted: Mon Jun 01, 2020 10:35
    —
yozhik
Я понимаю. Это суть моих слов не меняет.

#1655:  Author: yozhikLocation: Электросталь PostPosted: Mon Jun 01, 2020 13:27
    —
Loopback
Я тут ещё мелочь заметил, похоже ускользнула от внимания. В справке на странице «Стандартные плагины»
Quote:
В дистрибутив уже включены три плагина.

Наверное вы забыли добавить строчку про Tweaks. Ну, и «три» бампнуть Smile .

#1656:  Author: Loopback PostPosted: Mon Jun 01, 2020 13:39
    —
Flasher wrote:
Какая та?

Меню по комбинациям кнопок. Или отдельная утилита, что в общем небольшая разница.
Flasher wrote:
Вызов списка команд

Если имеется в виду это, то сейчас как раз легко решается функциями.
Flasher wrote:
А под "можно сделать" я имел в виду запрос, а не нынешнюю правку конфига.

Не понял.
yozhik wrote:
Вызываю Распаковку архива кликом по кнопке F6 с зажатым Alt

Да, все эти проблемы в стандартном действии одиночного альта. В такой комбинации при отпускании альта фокус явно передается основному окну, соответственно, новое окно не обрабатывает нажатия. Как такой вариант можно исправить в при существующей реализации я не очень представляю. Если не критично использование события именно по отпусканию левой кнопки, то по событию нажатия (просто /L) всё работает корректно.
yozhik wrote:
Ну, и «три» бампнуть

Точно, поправил на "несколько" (на будущее, так сказать) + новый добавил.

#1657:  Author: yozhikLocation: Электросталь PostPosted: Mon Jun 01, 2020 14:51
    —
Loopback wrote:
Если не критично... именно по отпусканию...

Абсолютно не критично. Это уж так подумалось, что, мол, иногда редко, но бывает, что нажал на кнопку и вдруг передумал, и тогда не отпуская ЛКМ отводишь в сторону и она не срабатывает. Сделал с просто /L — работает замечательно, всем доволен. Спасибо.

В качестве идеи (у меня, правда, технические идеи не очень обычно получаются, но вдруг в этот раз народ поддержит и вы заинтересуетесь). Сейчас с Tweaks нижнюю панель с F-кнопками (и не только её) стало возможным сделать очень функциональной. Как бы сами напрашиваются всплывающие хинты к кнопкам, где можно было бы подсмотреть шпаргалку про существующие возможности. Было бы, наверное, всем очень удобно (в первую очередь мне)). А если бы ещё в этих хинтах был перенос строк и табы для хоткеев вправо, то вообще б красота. Может быть, это не сложно было бы реализовать Rolling Eyes . Например, для F5 уже четыре строчки имеются, причём родного функционала:
Code:
Copy              <click>
Create shortcut   Ctrl+<click>
Pack              Alt+<click>
Pack in place     Alt+Ctrl+<click>

А с Tweaks и того больше можно...

#1658:  Author: FlasherLocation: Москва PostPosted: Mon Jun 01, 2020 17:16
    —
Loopback wrote:
Меню по комбинациям кнопок.
Понял.
Loopback wrote:
Если имеется в виду это, то сейчас как раз легко решается функциями.
Не только это. Но это, мягко говоря, не одно и то же. Дело же не только в возможности вызова самой последовательности, но и в короткой записи по аналогии с ТС.
Loopback wrote:
Не понял.
Ну, ты объясняешь, что сейчас нельзя сделать. Я это изначально предполагал, поэтому скорее запрашивал на будущее, чем спрашивал о нынешнем вызове.

yozhik wrote:
Сделал с просто /L — работает замечательно
Хех. Я бы точно не начинал тестировать с параметром отпускания, думал, у остальных так же, и даже предлагать не стал.

#1659:  Author: Loopback PostPosted: Mon Jun 01, 2020 20:20
    —
Flasher wrote:
но и в короткой записи по аналогии с ТС.

А, ну понятно. Я-то думал ехать, а тут шашечки Smile

Flasher wrote:
Ну, ты объясняешь, что сейчас нельзя сделать.

Нельзя, и маловероятно, что будет можно. Альтернатива - введение обязательного разделителя функций (как ";" в паскале или С, сейчас это конец строки) и чего-то подобного анонимным функциям или, как минимум, синтаксиса для задания блока. К тому же тогда нельзя будет записать команду классическим методом, только функциональным, чтобы парсер мог добраться до блока. Да и скорее всего, от классического метода совсем придется отказаться. Стоит ли это возможности запихнуть всё в одну строку? Мне ответ очевиден.

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

yozhik wrote:
В качестве идеи

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

#1660:  Author: FlasherLocation: Москва PostPosted: Mon Jun 01, 2020 20:40
    —
Loopback wrote:
а тут шашечки
Они самые. Very Happy
Loopback wrote:
только функциональным
То бишь в скобках? Это разве плохо?
Loopback wrote:
Да и скорее всего, от классического метода совсем придется отказаться.
В контексте параметра или вообще во всём синтаксисе конфига?

#1661:  Author: Loopback PostPosted: Mon Jun 01, 2020 21:09
    —
Flasher wrote:
Это разве плохо?

Не то чтобы плохо, но нецелесообразно. В развесистых командах типа AddControl командный синтаксис удобнее. Опять же, потеря совместимости, ибо:
Flasher wrote:
В контексте параметра или вообще во всём синтаксисе конфига?

Во всем. Не делать же в парсере исключение под одну конкретную функцию.

#1662:  Author: FlasherLocation: Москва PostPosted: Mon Jun 01, 2020 22:29
    —
Loopback wrote:
Не делать же в парсере исключение под одну конкретную функцию.
Почему одну? Ещё вложенные if-ы есть. Smile Можно же подкомандые if-ы отдельно написать. Нет?

#1663:  Author: yozhikLocation: Электросталь PostPosted: Tue Jun 02, 2020 00:18
    —
Loopback
Code:
ControlSetMouseAction /L /K:S 17 /B:7 CommandExec em_TCRestart

В 2.1.1 работает, а в 2.2.1 не хочет.

DisableMarkedMenuItems поставил перед группой команд ControlSetMouseAction — не сработал. Поставил после — сработал. Если так и должно быть, может стоит в справке упомянуть про строгую последовательность?

Loopback wrote:
а на функциональных клавишах не заработает точно

А может тогда несложно и уместно сделать чтоб DisableMarkedMenuItems рапространялся и на менюшки ShowPopupMenu? Тогда можно было бы шпаргалку из неактивных пунктов сделать. Костыль, конечно, но рабочий и вполне симпатичный.

#1664:  Author: Loopback PostPosted: Tue Jun 02, 2020 00:56
    —
Flasher
С вложенными If-ами нет проблем. Что за подкомандные не знаю.

В общем это, наверно, не так просто объяснить. If..Then, даже однострочный, это по-сути блок кода. В параметрах команд/функций могут быть любые выражения, но не блоки. Поддержку блоков можно было бы сделать, если бы был разделитель команд типа ";". Сейчас разделитель конец строки, с ним не получится. Никак.

В Autoit такой же принцип и те же ограничения. Вот то, что ты предлагаешь, и оно так же не будет работать.
Code:

$a = 1
Test(123, If $a < 0 Then $b = 1)

Func Test($a, $b)
EndFunc


yozhik
Занятно, у меня работает. Ну на то она и бета.

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

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

Quote:
DisableMarkedMenuItems рапространялся и на менюшки ShowPopupMenu

С этой командой не получится. Чисто теоретически, можно добавить поддержку функционала DisableMarkedMenuItems в ShowPopupMenu (она же создает элементы меню), но не очень хотелось бы загромождать команду. Ну можно будет подумать.

#1665:  Author: FlasherLocation: Москва PostPosted: Tue Jun 02, 2020 08:50
    —
yozhik wrote:
чтоб DisableMarkedMenuItems рапространялся и на менюшки ShowPopupMenu? Тогда можно было бы шпаргалку из неактивных пунктов сделать.
Я на днях тоже об этом думал, было бы удобно (если бы ещё у меня работало Laughing).

Loopback wrote:
Что за подкомандные не знаю.
Отдельно написанная if-функция под команды, не из блочного синтаксиса:
Code:
ControlSetMouseAction /R /K:A /H:64 0 if(%"IniRead('~/R',%COMMANDER_INI%,Configuration,LanguageIni)"=WCMD_RUS.LNG,CommandExec(em_Lang),CommandExec('em_Lang Wcmd_rus.lng'))
ControlSetMouseAction ... if(%AUTORUN_TCPID%=32,ShellExec('~/SW_HIDE',prog.exe),ShellExec('~/SW_HIDE',prog64.exe))


Last edited by Flasher on Thu Jun 04, 2020 01:25; edited 3 times in total

#1666:  Author: yozhikLocation: Электросталь PostPosted: Tue Jun 02, 2020 11:55
    —
Loopback wrote:
Занятно, у меня работает.

Вот, ключевая фраза прозвучала, и сразу и у меня всё заработало. А оказывается дело-то было в пробелах! Я команды в конфиге выровнял пробелами, чтоб наглядней было:
Code:
ControlSetMouseAction /L /K:A      17 /B:4 SendCommand 509
ControlSetMouseAction /R           17 /B:7 ShowPopupMenu %COMMANDER_PATH%\Profile\tools\MenuPopup\TCMenuShutdown.mnu
ControlSetMouseAction /L      /K:S 17 /B:7 CommandExec em_MENU_Shutdown_TCRestart
ControlSetMouseAction /L /K:A /K:S 17 /B:7 CommandExec em_Menu_Shutdown_TCSwitchArc

Теперь если в 3й строке лишние пробелы между /L и /K:S убрать, и оставить один, то всё заработает. 2.1.1 воспринимает оба варианта, 2.2.1 только без пробелов. Ну, по аналогии с жизнью вроде это понятно: парсер то молодой ещё, а чем моложе, тем строже Smile .

Flasher wrote:
Я на днях тоже об этом думал

Очень рад, что я не одинок. Собственно, была бы возможность настраиваемых подсказок. Там уж какими способами — дело хозяйское.

#1667:  Author: Loopback PostPosted: Tue Jun 02, 2020 12:20
    —
Flasher wrote:
Отдельно написанная if-функция под команды, не из блочного синтаксиса:

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

MyIf(%AUTORUN_TCPID%=32,"ShellExec('~/SW_HIDE',prog.exe)","ShellExec('~/SW_HIDE',prog64.exe)")

Func MyIf(expr, e_true, e_false)
    if expr then
        Eval(e_true)
    else
        Eval(e_false)
    endif   
EndFunc


yozhik wrote:
А оказывается дело-то было в пробелах!

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

#1668:  Author: FlasherLocation: Москва PostPosted: Tue Jun 02, 2020 12:29
    —
Loopback wrote:
тогда можно будет так записать:
В конфиге? Это-то понятно, но нам бы опять же шашечки. Wink

#1669:  Author: Loopback PostPosted: Tue Jun 02, 2020 12:46
    —
Flasher
Других шашечек не будет.

#1670:  Author: yozhikLocation: Электросталь PostPosted: Tue Jun 02, 2020 17:32
    —
Loopback
Ещё заметил. При такой последовательности
Code:
ControlSetMouseAction /L /K:A      17 /B:6 CommandExec em_MENU_F8_BGDelete
ControlSetMouseAction /L /K:A /K:S 17 /B:6 CommandExec em_FASTCOPY_Delete

вызов по Alt+Shift не срабатывает, точнее в обоих случаях срабатывает только первая em_. Чтобы заработали обе, нужно переставить строки местами
Code:
ControlSetMouseAction /L /K:A /K:S 17 /B:6 CommandExec em_FASTCOPY_Delete
ControlSetMouseAction /L /K:A      17 /B:6 CommandExec em_MENU_F8_BGDelete

Это я к тому, что может в справке стоит упомянуть...

#1671:  Author: Loopback PostPosted: Tue Jun 02, 2020 18:40
    —
yozhik
Не надо это документировать, это баг Smile Вот исправленная версия.

Для трех основных модификаторов любые их комбинации должны работать независимо от расположения вызовов.

#1672:  Author: Loopback PostPosted: Tue Jun 02, 2020 21:47
    —
Версия 2.2.2 beta

- Tweaks: исправлена работа с модификаторами
- исправлена работа с именованными параметрами
+ функция Eval для вычисления значения строки с выражением
+ функция Call для вызова функции по имени, заданному строкой
+ добавлен открытый список параметров в функциях
+ добавлены ключевые слова Global, Local
- исправлен некорректный номер строки в сообщениях об ошибках
- исправлена работа с кавычками в выражениях в определенных ситуациях
- исправлена работа с глобальными переменными в функциях

В русскую справку добавлено описание бета-функционала, пока одной страницей. Онлайн-вариант.

#1673:  Author: FlasherLocation: Москва PostPosted: Wed Jun 03, 2020 00:09
    —
Loopback
Так ты поддержку старого синтаксиса поубирал что ли?
Code:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"

Undefined variable: Configuration
Code:
If Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') Then

Undefined command of function name: NotProcessExist
Code:
If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = "" Then

Undefined variable: wcmd_eng.lngOR%COMMANDER_LANGINI%


Quote:
Также возможно задавать переменные без предварительного определения:
Хм.
Code:
Set Name Text
Name = "Text"
Легче не стало. Без кавычек нельзя, апострофы не поддерживаются.
Quote:
Параметр задается специальным значением «…»
Code:
Func MyFunc(...)
    For i = 1 To Args()
Вот так намудрил. Впервые такое вижу. Smile

Last edited by Flasher on Wed Jun 03, 2020 00:16; edited 1 time in total

#1674:  Author: yozhikLocation: Электросталь PostPosted: Wed Jun 03, 2020 00:15
    —
Loopback
У меня пробелы работают и бага с расположением больше нет. Спасибо.
Следующий момент:
Code:
ControlSetMouseAction /L      /K:C      17 /B:3
ControlSetMouseAction /L      /K:C /K:S 17 /B:3 SendCommand   1004

В этом варианте второй вызов (с Ctrl+Shift) блокируется.
Code:
ControlSetMouseAction /L      /K:C /K:S 17 /B:3 SendCommand   1004
ControlSetMouseAction /L      /K:C      17 /B:3

А в этом всё хорошо отрабатывает: родной с Ctrl блокируется, а мой назначенный с Ctrl+Shift срабатывает.

#1675:  Author: Loopback PostPosted: Wed Jun 03, 2020 01:38
    —
Flasher wrote:
Так ты поддержку старого синтаксиса поубирал что ли?

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

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

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

А пока исправленная версия с необязательными кавычками.

Хотя, во втором примере все равно косяк. Многострадальный not Smile

Flasher wrote:
Без кавычек нельзя, апострофы не поддерживаются.

Причина та же что и выше.

Что за апострофы, которых тут так не хватает?

Flasher wrote:
Вот так намудрил. Впервые такое вижу

Всё давно придумано до нас.

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

yozhik wrote:
Следующий момент:

Хорошо, проверю.

#1676:  Author: FlasherLocation: Москва PostPosted: Wed Jun 03, 2020 02:49
    —
Loopback wrote:
в процессе отключил поддержку строчных литералов без кавычек
А почему тогда на эту строку не ругалось?
Code:
If %OSVer% = 2000 Or %OSVer% = XP Or %OSVer% = 2003 Or %OSVer% = 2003R2 Then

Loopback wrote:
И скорее всего, включу ее по умолчанию.
Да ну, не надо. А то потом чужие баги разгребать замучаешься.

Loopback wrote:
Хотя, во втором примере все равно косяк. Многострадальный not
Жду правки.

Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано?

Loopback wrote:
Что за апострофы, которых тут так не хватает?
В смысле "что"? A = 'Text'

Loopback wrote:
Всё давно придумано до нас.
Что-то не вижу там ничего толкового про многоточие.

#1677:  Author: Loopback PostPosted: Wed Jun 03, 2020 11:39
    —
Flasher wrote:
А почему тогда на эту строку не ругалось?

Не знаю. Баг с not затрагивал и or и and. Что-то может сложилось не так.

PS: Перезалил исправленный вариант по той же ссылке.

Flasher wrote:
Забыл ещё написать, что сперва появляется окно только с текстом 'Load'. С чем это может быть связано?

Исправил.

Flasher wrote:
A = 'Text'

И что же мешает их использовать? Как работало, так и работает, наравне с двойными кавычками.

Flasher wrote:
Что-то не вижу там ничего толкового про многоточие.

В примере показано. В С так задается переменный список аргументов.

yozhik wrote:
Следующий момент:

Доконают меня эти модификаторы Smile , а вроде простая вещь... Надеюсь, исправил окончательно.

#1678:  Author: FlasherLocation: Москва PostPosted: Wed Jun 03, 2020 20:47
    —
Loopback wrote:
Исправил.
Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449', которое обычным образом не закрывается и держит ТС (+ TCFS2) до его терминирования.

Loopback wrote:
И что же мешает их использовать?
Сейчас проверил, вроде заработало.

#1679:  Author: Loopback PostPosted: Wed Jun 03, 2020 22:07
    —
Flasher wrote:
Появляется, если присвоение без кавычек. А вот на этой строке 'If %COMMANDER_LANG% = eng Then' не только появляется, но потом и крашит ТС с окном 'Runtime error 216 at 754D8449'

На этой строке не могу повторить.

Конкретно "Load" вылезало на функции LngRead, в утренней версии (от 12:43) я его убрал. Но у меня она проблем не вызывает.

#1680:  Author: FlasherLocation: Москва PostPosted: Wed Jun 03, 2020 22:56
    —
Loopback
Не знаю, у меня проблема именно на ней. Крах происходит после смены языка на английский, а Load всегда появляется.
 Появилось после правки моего справочного примера:

#1681:  Author: Loopback PostPosted: Wed Jun 03, 2020 23:41
    —
Скопировал, вставил, добавил только COMMANDER_LANG = eng перед условием. Нет падений, в том числе на утренней версии. Меняю на rus - тоже без проблем.

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

Ну попробуй текущую версию, по утренней ссылке обновил. Для контроля, время файла 22:22.

#1682:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 00:03
    —
Loopback wrote:
Скорее всего у тебя все же какая-то старая версия грузится.
Tweaks 100% новый, я сверял с архивным после закрытия/открытия ТС.

С новой версией завелось.

#1683:  Author: Loopback PostPosted: Thu Jun 04, 2020 00:13
    —
Flasher wrote:
Tweaks 100% новый

Tweaks тут не причем, думаю, там изменения по модификаторам минимальны. А вот основной плагин я выкладывал утром версию здесь.

Но вообще, бывают и косяки компиляции, сталкивался с таким не раз.

#1684:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 00:21
    —
Loopback wrote:
А вот основной плагин я выкладывал утром версию здесь.
wdx я тоже ставил. Сейчас ещё раз проверил с предыдущим Autorun.wdx (sha: 3cefd7cc6bf3c778c30b2fc4aba9fa2c44002ea6), ошибки подтвердились.

Мда, я ошибся. Load пропал, а на английском ТС крах остался. Только окна с ошибками стали закрываться...

#1685:  Author: Loopback PostPosted: Thu Jun 04, 2020 01:07
    —
Ну вот попробуй еще версию, если не поможет, то у меня больше нет идей. Может опять 32-битная семерка или еще что.

#1686:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 01:11
    —
Не помогло. Придётся забыть про %COMMANDER_LANG%, видимо...
Блин, я же не ту переменную подсовываю. Надо %AUTORUN_TCLANG%. С ней всё в порядке.
Code:
CL = %COMMANDER_LANG%
Set C_L %COMMANDER_LANG%
msgbox '%CL% %C_L%'
Quote:
---------------------------
COMMANDER_LANG %COMMANDER_LANG%
---------------------------
Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?
И почему в одном случае есть проценты, а в другом нет? И почему не вернуло пустые значения?

Ещё есть проблема с переносом строки. Не работает:
Code:
If %AUTORUN_TCARCH% = 32 Then _
LoadLibrary Plugins\ScrollTC.dll
If Not ProcessExist('~/F', '%COMMANDER_PATH%\Utils\Everything\Everything.exe') Then _
ShellExec /W:1 /T "%COMMANDER_PATH%\Utils\Everything\Everything.exe" -startup

Loopback wrote:
С вложенными If-ами нет проблем.
Я бы так не сказал:
Code:
A = 1
B = 2
C = 3
If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех
Quote:
[15] If A = 1 Then If B = 2 Then If C = 3 Then MsgBox Успех

Undefined command of function name: If

#1687:  Author: Loopback PostPosted: Thu Jun 04, 2020 02:02
    —
Quote:
Ещё есть проблема с переносом строки.

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

Quote:
Я бы так не сказал

Разумеется, это не относится к однострочным If-ам. Я думал это очевидно. Да и какой смысл в такой гирлянде, если можно собрать условие с and?

Quote:
Блин, я же не ту переменную подсовываю.

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

Хорошо что заработало, но все же, падать не должно при любых ошибках. Интересно, как создавался этот %COMMANDER_LANG% и узнать его содержимое. При его отсутствии я тоже пробовал и тоже было всё норм.

Quote:

Т. е. в If попадало COMMANDER_LANG или %COMMANDER_LANG%. Так? В чём же тогда причина краха?

Непринципиально. В условиях с процентами или без - равноценно. и я пробовал оба варианта.

Quote:
И почему в одном случае есть проценты, а в другом нет?

Издержки разницы работы старого и нового метода. Еще раз, это непринципиально.

Quote:
И почему не вернуло пустые значения?

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

#1688:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 02:16
    —
Loopback wrote:
Сделано только для того, чтобы при разрыве в строке текста не появлялся лишний пробел.
Почему это лишний? Если есть, значит, не лишний. На том же vb это нормальная практика, ведь пробел разделяет ключевые слова, чтобы ничего не слилось и работало. Перенос по словам — это же не перенос строки по ширине символов, как в текстовых редаторах/вьюверах. Wink

Loopback wrote:
Разумеется, это не относится к однострочным If-ам.
Значит, ты меня не понял. Под вложенными я понимал инлайновую матрёшку. Мы же говорили именно об этом в контексте записи if-ов внутри команд.

Loopback wrote:
Да и какой смысл в такой гирлянде, если можно собрать условие с and?
Это же очевидно. Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.

Loopback wrote:
При его отсутствии я тоже пробовал и тоже было всё норм.
Ясно, а вот у меня не норм.

Loopback wrote:
А вот это как раз "благодаря" отсутствию обязательных кавычек.
ОК. Вот тебе с апострофами:
Code:
A = '%Empty%'
Set B '%Empty%'
msgbox '%A% %B%'
Quote:
---------------------------
%Empty% \Empty
---------------------------
То же самое, только сюда ещё \ затесался.
А вот с наличием значения:
Code:
CL = '%AUTORUN_TCLANG%'
Set C_L '%AUTORUN_TCLANG%'
msgbox '%CL% %C_L%'
Code:
---------------------------
%AUTORUN_TCLANG% rus
---------------------------
Получается только с Set возращается значение.

#1689:  Author: Loopback PostPosted: Thu Jun 04, 2020 03:02
    —
Flasher wrote:
Почему это лишний?

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

Flasher wrote:
Следующее условие напрямую зависит от предыдущего, чтобы не столкнуться с ошибками. К тому же в случае несрабатывания предыдущего условия не будет тратиться время на выполнение лишнего кода в последующих условиях. У меня в куче кодов такой подход.

В принципе, во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false. Так что стройка лесенок оправдана не всегда.

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

Flasher wrote:
Получается только с Set возращается значение.

Здесь ошибки нет. При присваивании правая часть - выражение, и записав здесь '%AUTORUN_TCLANG%' ты присвоил переменной строку с именем переменной, а не значение. A Set - старая команда, где переменные разворачиваются в тексте, поэтому значение вычислилось.
Правильно:

Code:

CL = %AUTORUN_TCLANG%
CL = AUTORUN_TCLANG

Set C_L '%AUTORUN_TCLANG%'
Set C_L %AUTORUN_TCLANG%


Flasher wrote:
только сюда ещё \ затесался

У меня %Empty% %Empty%, как и ожидается.

#1690:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 04:12
    —
Loopback wrote:
во всех полноценных языках в случае нескольких выражений через and, проверка идет слева направо и сразу прекращается, если условие false.
Т. е. vb, по-твоему, неполноценный?

Loopback wrote:
Про какие коды не знаю, но тот же Autoit не позволяет городить лесенки в однострочных if-ах.
Ну, если с And там работают прерывания, то ему это и не нужно.
Loopback wrote:
Autorun к нему близок по своей сути, и многие подходы (и ограничения) такие же.
Это я давно заметил, ещё и с учётом твоей былой активности в скриптовой теме. Wink
В общем, принял к сведению, if-матрёшка тут не нужна.

Loopback wrote:
ты присвоил переменной строку с именем переменной
Я согласен, но я лишь ориентировался на твои слова:
Loopback wrote:
"благодаря" отсутствию обязательных кавычек

Code:
CL = AUTORUN_TCLANG
О, а где ещё беспроцентный вариант можно использовать? В командах, например.

Loopback wrote:
У меня %Empty% %Empty%, как и ожидается.
Ну, не знаю. У меня так. И почему ожидается-то, если вопрос был о пустых значениях?

#1691:  Author: Loopback PostPosted: Thu Jun 04, 2020 13:05
    —
Flasher wrote:
Т. е. vb, по-твоему, неполноценный?

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

Есть, для and и or.
Flasher wrote:
Я согласен, но я лишь ориентировался на твои слова:

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

Code:

Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)

А в такой проблем нет:
IniRead('~/R', %COMMANDER_INI%, "Configuration", "LanguageIni")
IniRead('~/R', %COMMANDER_INI%, 'Configuration', 'LanguageIni')
IniRead('~/R', %COMMANDER_INI%, 'Configuration', "LanguageIni")
и т.д.


Flasher wrote:
О, а где ещё беспроцентный вариант можно использовать? В командах, например.

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

В какой-то момент возникла какая-то проблема, поэтому я и разрешил переменные без %. Сейчас их можно использовать в любых выражениях - условиях, новом присваивании, параметрах функций и т.д. В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'. Обязательность %% сохраняется при прямом использовании в командной записи.
Flasher wrote:
У меня так. И почему ожидается-то, если вопрос был о пустых значениях?

Может какой-то баг, но у меня он не проявляется.

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

#1692:  Author: yozhikLocation: Электросталь PostPosted: Thu Jun 04, 2020 16:56
    —
Loopback
У меня два вопроса. Если глупые, то не читайте, но, пожалуйста, ответьте Confused .
1. Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.
Code:
ControlSetMouseAction /R 17 /B:1 MsgBox(%AUTORUN_TCHANDLE%)

2. Переменная %AUTORUN_TCHANDLE% вернула хэндл 1441850. А функция в AutoIt WinGetHandle("[CLASS:TTOTAL_CMD]") вернула хэндл 0x000000000016003A. В чём разница между этими двумя хэндлами? Просто я окошки с подсказками для F-кнопок сделал себе в AutoIt, и они центрируются по окну, хэндл которого укажешь. Так со 2м хэндлом всё правильно центрируется, а с 1м, авторановским, улетает в правый угол экрана.

#1693:  Author: Loopback PostPosted: Thu Jun 04, 2020 17:54
    —
yozhik wrote:
то не читайте

Отвечаю не глядя Very Happy

yozhik wrote:
Я не понял, где применяется новый синтаксис команд (тот, который со скобками), а где нет. Вот такая запись (ниже) должна работать? У меня не работает.

Этот вопрос как раз весьма интересный. Не считая ошибки, что 17 должна идти после /B:1, то да, не работает, здесь только старый вариант. И как прикрутить новый к функциям в плагинах (и надо ли вообще - это единственная такая функция, вызывающая какие-то другие команды) - это еще надо подумать.

Но в принципе если очень надо, сейчас можно выполнить любое новое выражение через Eval:

Code:

ControlSetMouseAction /R /B:1 17 Eval 'MsgBox(%AUTORUN_TCHANDLE%)'


yozhik wrote:
В чём разница между этими двумя хэндлами?

Тут как раз всё просто: плагин возвращает значение в десятичной системе, Autoit - в шестнадцатеричной. В Autoit из десятичного в шестнадцатиричный вид можно перевести функцией Hex.

#1694:  Author: yozhikLocation: Электросталь PostPosted: Thu Jun 04, 2020 21:48
    —
Loopback wrote:
и надо ли вообще

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

В том то и дело, что они не «какие-то», а самые что ни на есть главные. И в справке к плагину к ним просто отсылка в главный раздел. Мне бы и в голову не пришло, что одна и та же команда в рамках одного и того же сценария может иметь различия в синтаксисе. Вот такая логика людей неискушённых Smile .
Loopback wrote:
17 должна идти после /B:1

Пардон, исправил. Спасибо. Я заметил, что так в справке, но подумал, что если параметр /B: относится только к 17, то ему логичней идти после Embarassed .

#1695:  Author: FlasherLocation: Москва PostPosted: Thu Jun 04, 2020 23:23
    —
Loopback wrote:
Обязательных кавычек для строк, а не всего выражения.
Потом-то уже стало понятно.
Code:
Проблема в такой записи:
IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)
Почему проблема-то? Это справочный пример.
 Хотя с ним другая проблема возникла:
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать. Confused

Дай, думаю, проверю:
Code:
ControlSetMouseAction /R /K:A /H:64 0 %"MsgBox('Alt+ПКМ')"
ControlSetMouseAction /R /H:64 0 %"MsgBox('ПКМ')"
Но вместо того, чтобы выполняться по кликам на гл. меню, окна стали появляться сами на этапе запуска ТС и только. Shocked
Code:
# Shift+ЛКМ по вкладкам = переключение на первую вкладку в соотв. панели:
ControlSetMouseAction /L /K:S 26 SendCommand 5201
ControlSetMouseAction /L /K:S 27 SendCommand 5301
Эти команды вообще без шифта стали работать, т. е. я не могу теперь активировать вкладку простым кликом.

Как это всё понимать?

Loopback wrote:
В том числе для команд при использовании вычисляемых строк, например так: %'COMMANDER_PATH & "\Main.bar"'.
Ух ты. Понял.

Loopback wrote:
Пустые значения при отсутствии переменной не могут выдаваться, т.к. неизвестно, переменная ли это.
Так нужно отличать. Мы же можем подставлять их в строку как в случае с переменными среды.
Из старого примера TCFS2.exe' '/ef "tem(`em_Lang %LNG%`)"' , где вместо %LNG% ожидается пустое значения для правильного срабатывания.

#1696:  Author: Loopback PostPosted: Fri Jun 05, 2020 00:42
    —
Flasher wrote:
Почему проблема-то?

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

Flasher wrote:
Как это всё понимать?

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

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

Flasher wrote:
где вместо %LNG% ожидается пустое значения для правильного срабатывания

Так если переменная %LNG% существует и она пустая, то и будет пустое значение. А вот если не существует, вернется само имя переменной, так было и раньше. Что мне и не нравится, т.к. фактически это ошибка пользователя в скрипте.

#1697:  Author: yozhikLocation: Электросталь PostPosted: Fri Jun 05, 2020 01:08
    —
Flasher wrote:
вообще без шифта стали работать

Ой! Точно. Только заметил: и у меня без шифта стало срабатывать
Code:
ControlSetMouseAction /L /K:S /B:7 17 CommandExec em_TCRestart

В общем, если указан Ctrl или Shift, то команда срабатывает по простому клику без модификатора. Если указан Alt или больше одного модификатора, то нормально работает.


Last edited by yozhik on Fri Jun 05, 2020 01:19; edited 1 time in total

#1698:  Author: Loopback PostPosted: Fri Jun 05, 2020 01:19
    —
Очередной раз исправил модификаторы, перемудрил я с ними, кажется, всё проще решается. Надеюсь теперь окончательно.

#1699:  Author: FlasherLocation: Москва PostPosted: Fri Jun 05, 2020 01:22
    —
Loopback wrote:
Уже много раз повторял - из-за строк без кавычек.
Так сам код выполняется. Я и спрашиваю, с чего ты взял, что проблемный, если это не так.

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

Loopback wrote:
сейчас не поддерживается функциональный синтаксис тут напрямую, только так, как выше приводил пример.
При чём тут напрямую? Это никак не объясняет, почему приведённые команды стали срабатывать без Alt и почему сообщение появляется при запуске ТС.

Loopback wrote:
Тут вообще похоже он неприменим будет, т.к. функция с параметрами переданная в качестве параметра в ControlSetMouseAction, будет выполняться один раз при вызове ControlSetMouseAction, поскольку параметры вычисляются при входе в нее.
Вообще не понял, как связана неприменимость с указанным повендением. Понятно, что один раз. А сколько же ещё? Тут же нет цикла.

Loopback wrote:
Что мне и не нравится, т.к. фактически это ошибка пользователя в скрипте.
Не согласен. Если переменная не задана, и мы её подставляем, то логично, что она должна вернуть пустое значение. Взять тот же vbs:
Code:
MsgBox Var
Получим пустую мессагу. Или такой пример:
Code:
Prog = "Program"
If CreateObject("WScript.Shell").Environment("System")("PROCESSOR_ARCHITECTURE") <> "x86" Then Arch = "x64"
MsgBox Prog & Arch & ".exe"


Last edited by Flasher on Fri Jun 05, 2020 01:41; edited 1 time in total

#1700:  Author: yozhikLocation: Электросталь PostPosted: Fri Jun 05, 2020 01:25
    —
Loopback wrote:
исправил модификаторы

Спасибо, теперь всё хорошо.

#1701:  Author: FlasherLocation: Москва PostPosted: Fri Jun 05, 2020 01:40
    —
Loopback wrote:
Надеюсь теперь окончательно.
Увы, нет:
Code:
ControlSetMouseAction /R /K:L 1 ShowPopupMenu ...
ControlSetMouseAction /R /K:L 2 ShowPopupMenu ...
ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /L /K:R 29 SendCommand 2944
Команды выполняются без модификаторов.

По-прежнему мессаги появляется только при старте ТС. Пусть даже запись с %"<>" неактуальна, всё равно логика несвоевременного появления неясна.
С другой стороны, тут всё работает без всяких Eval:
Code:
SetEnv Manufacturer %"GetCPUInfo('CPUString')"
SetEnv Family %"GetCPUInfo('Family')"

Эта проблема тоже осталась:
Quote:
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать.
Пробовал и так, не помогло:
Code:
ControlSetMouseAction /R /K:A /H:64 0 CommandExec "em_Lang IniRead('~/R', %COMMANDER_INI%, 'Configuration', 'LanguageIni')"

#1702:  Author: Loopback PostPosted: Fri Jun 05, 2020 02:27
    —
Flasher wrote:
Ну, да ты заявил, что старому синтаксису новый не повредит, что я и отметил как положительный момент, иначе у кучи пользователей создалось бы кучу проблем с необходимостью переписывать свои конфиги.

Я и тогда писал, что строки без кавычек это не есть хорошо, но тогда это еще доставляло проблем.

В общем, я чувствую, что лучше прагмы с переключением поведения ничего не придумать. Два режима: как сейчас, только переменные без %% разрешены не будут. И второй, в котором будут разрешены, но будут обязательны кавычки вокруг строк. Третьего я не вижу.

Flasher wrote:
При чём тут напрямую? Это никак не объясняет, почему приведённые команды стали срабатывать без Alt и почему сообщение появляется при запуске ТС.

Насчет альта не знаю. Посмотрю на месаджбоксах.

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

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

Не согласен. Я с vbs был знаком очень давно и недолго, но если он на заранее не определенных переменных не возвращает ошибку, то для меня такое поведение дико.

Flasher wrote:
Команды выполняются без модификаторов.

Они меня добьют. Интересно, как они работали, если их явной обработки вообще не было. Явно по чистой случайности.

#1703:  Author: FlasherLocation: Москва PostPosted: Fri Jun 05, 2020 02:47
    —
Loopback wrote:
но тогда это еще доставляло проблем.
Частица "не" не пропущена?
Loopback wrote:
Третьего я не вижу.
Ну делай так, только оставь текущий вариант умолчательным.

Loopback wrote:
А вместо имени тут вычисляемая строка, которая при считывании выполняется.
Ох, как всё сложно...

Loopback wrote:
то для меня такое поведение дико.
Так на AutoIt без Opt('MustDeclareVars', 1) тоже переменные в ряде случае можно не объявлять. В vbs за обязательность объявления отвечает директива Option Explicit, это нормальная практика.
Loopback wrote:
Интересно, как они работали, если их явной обработки вообще не было.
Не понимаю, о чём ты. Ты меня по ним сам консультировал.

#1704:  Author: Loopback PostPosted: Fri Jun 05, 2020 15:26
    —
Flasher wrote:
Частица "не" не пропущена?

Пропущена.
Flasher wrote:
Ну делай так, только оставь текущий вариант умолчательным.

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

Не вижу ничего смертельного в некоторых "breaking changes" при переходе на новую мажорную версию. Когда-то это надо делать, иначе хвост неоптимального кода и ошибочных решений так и будет тянуться вечно. К тому же уже сейчас есть четыре изменения, которые могут повлечь неработоспособность старого скрипта, самое критичное - условие старого типа для FileExist/ProcessExist, которого больше нет. Добавится еще одно.

В Autoit такие изменения были регулярно. Одно время в нем очень долго был баг, который позволял вставить разрыв внутри текстовой строки. Когда его исправили, многим пришлось переписывать скрипты, многие возмущались, но это же не повод, чтобы оставить баг неисправленным. До сих пор в Autoit есть опция ExpandEnvStrings, которую ввели где-то в самом начале 3-ей версии и которой уже лет 15 никто не пользуется, а что если бы она была включена по умолчанию?

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

Flasher wrote:
Ох, как всё сложно...

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

Code:

Только так
ControlSetMouseAction ... SendCommand 123
Или так
ControlSetMouseAction( ... , SendCommand, 123)


Flasher wrote:
тоже переменные в ряде случае можно не объявлять

Можно не объявлять, но тогда к ним до чтения должно быть присвоено какое-то значение. Иначе - ошибка.

Суть поведения в VBS понятна, но все равно, с точки зрения возможных ошибок, кажется это не совсем правильным. Интересно, кроме VBS есть еще языки, где такое разрешено?
Flasher wrote:
Не понимаю, о чём ты. Ты меня по ним сам консультировал.

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

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

Проверил на последних проблемных вариантах, везде работает, но я уже опасаюсь что-то говорить Smile

Обновил по той же ссылке.

#1705:  Author: FlasherLocation: Москва PostPosted: Fri Jun 05, 2020 16:36
    —
Loopback wrote:
маловероятно, что кто-то (кроме новых пользователей) вообще узнает про более оптимальный вариант.
А так они узнают о ней, в основном благодаря получению ошибок, что тоже не айс.

Loopback wrote:
а что если бы она была включена по умолчанию?
Так не была же. А если бы была, то посыпались бы жалобы, само собой. О том и речь.

Loopback wrote:
Ну можно и какой-нибудь AutorunX или Neo сделать
Не стоит.

Loopback wrote:
это параметры ControlSetMouseAction, предназначенные для последующей передачи в функцию, имя которой задано перед этими параметрами
Это заставит плагин не выполнять вычисляемую строку без соотв. жимокликов?

Loopback wrote:
но все равно, с точки зрения возможных ошибок, кажется это не совсем правильным.
Не знаю, что за точка зрения такая, но возможные ошибки всегда можно исправить в процессе отладки. Если переменные не переписываются по многу раз и их крайне мало, то такой подход вполне имеет место быть.
Loopback wrote:
Интересно, кроме VBS есть еще языки, где такое разрешено?
Все диалекты Бэйсика, по всей видимости. vb/vba/pure/real/power и т. д.
А ты можешь хотя бы Dim добавить, чтобы не присваивать пустую строку и не писать Global/Local?

Loopback wrote:
но я уже опасаюсь что-то говорить Smile
И правильно. С гл. меню проблема осталась. Также плагин не различает последовательности нажатия модификатора/кнопки. Что я правую зажму, нажав левую, что наоборот, результат аналогичный.

И что там по?:
Loopback wrote:
Короче проехали, верну чтобы не съедался.
Забыл?

#1706:  Author: Loopback PostPosted: Fri Jun 05, 2020 17:54
    —
Flasher wrote:
А так они узнают о ней, в основном благодаря получению ошибок, что тоже не айс.

Узнают они об этом в основном из описания новой версии, где в таких случаях крупно объявляется о возможных проблемах и путях решения. Кто не читает - сам себе злобный буратино. Уж один раз в 10 лет можно или чуть напрячься, или оставаться на старой версии, благо она работает и добавить в неё уже нечего.
Flasher wrote:
Так не была же. А если бы была, то посыпались бы жалобы, само собой. О том и речь.

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

Не, красиво видимо не выйдет. В функциональной записи вложенные параметры, если в них есть выражения, придется записывать строками, иначе они будут вычисляться до передачи в ControlSetMouseAction. В общем что так, что эдак, бредовая запись получилась, не знаю даже, как теперь ее совместить с ФЗ (давай я буду сокращать, надоело писать полностью).

Возможно, лучше оставить ее исключением и не разрешать в ФЗ.
Flasher wrote:
А ты можешь хотя бы Dim добавить, чтобы не присваивать пустую строку и не писать Global/Local?

Могу, но не стану. Чем Global/Local хуже Dim? В чем кайф определять переменную именно в неопределенном диапазоне? В функциях Dim = Local, вне функций - Dim = Global.
Flasher wrote:
С гл. меню проблема осталась.

Если про это "ControlSetMouseAction /R /K:A /H:64 0 ", то это что-то не связанное с последними изменениями в tweaks, майская версия так же не работает.
В этом коде всё работает, это я у себя накосячил с MsgBox.
Code:

ControlSetMouseAction /R /K:A /H:64 0 MsgBox 'Alt+ПКМ'
ControlSetMouseAction /R /H:64 0 MsgBox 'ПКМ'


Flasher wrote:
Так вот, на русском при нажатии Alt+ПКМ вместо обновления языка стала выполняться смена. И только на английском обновление стало срабатывать.

Может правильную строку из справки использовать?
Code:
ControlSetMouseAction /R /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"


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

Если это про этот код:
Code:

ControlSetMouseAction /L /K:R 23 SendCommand 2944
ControlSetMouseAction /L /K:R 29 SendCommand 2944

то не подтверждаю, всё различается.
Flasher wrote:
Забыл?

Исправил в невыложенной версии.


Last edited by Loopback on Fri Jun 05, 2020 21:48; edited 1 time in total

#1707:  Author: FlasherLocation: Москва PostPosted: Fri Jun 05, 2020 21:47
    —
Loopback wrote:
Кто не читает - сам себе злобный буратино.
То же самое можно ответить на:
Loopback wrote:
маловероятно, что кто-то (кроме новых пользователей) вообще узнает про более оптимальный вариант.

Loopback wrote:
В любом случае это прямая аналогия.
Ты же написал, что новая опция не была включена по умолчанию.

Loopback wrote:
не знаю даже, как теперь ее совместить с ФЗ (давай я буду сокращать, надоело писать полностью).
Перед сокращением обычно приводят расшифровку. Я без понятия, что за ФЗ. Функциональная/файловая зависимость/запись, федеральный закон, фабрика звёзд? )) Что это?

Loopback wrote:
Чем Global/Local хуже Dim?
Длиннее. В AutoIt же есть. Почему не добавить?

Loopback wrote:
В этом коде всё работает
С мессагой работает, а с исходной командой — нет.

Loopback wrote:
то не подтверждаю, всё различается.
Не знаю. Зажимаю ЛКМ, потом жму ПКМ — и команда срабатывает.

#1708:  Author: Loopback PostPosted: Fri Jun 05, 2020 22:27
    —
Flasher wrote:
То же самое можно ответить на:

Можно.

Flasher wrote:
Перед сокращением обычно приводят расшифровку.

Функциональная Запись. В противовес Командная Запись.

Flasher wrote:
Длиннее.

Всё. Где смайл facepalm? Слов больше нет Confused

Flasher wrote:
В AutoIt же есть.

Лишняя сущность. Пережиток ранних времен. В справке его не рекомендуют к использованию.

Flasher wrote:
С мессагой работает, а с исходной командой — нет.

Ну может потому, что ты свой же пример неправильно записал? Из справки:
Code:

ControlSetMouseAction /R /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"

Всё работает, специально всё ставил и настраивал, чтобы протестировать.

Flasher wrote:
Не знаю. Зажимаю ЛКМ, потом жму ПКМ — и команда срабатывает.

Сочувствую, но повторить на сегодняшней версии не могу.

#1709:  Author: FlasherLocation: Москва PostPosted: Fri Jun 05, 2020 23:41
    —
Loopback wrote:
Функциональная Запись.
Ясно. В общем, думай, как выбраться из положения.

Loopback wrote:
Где смайл facepalm?
Где-где, в интернете...


Ладно, скажу по-другому: мне так привычней, удобней, сподручней...

Loopback wrote:
В справке его не рекомендуют к использованию.
Где? Тут не вижу.

Loopback wrote:
Ну может потому, что ты свой же пример неправильно записал?
А, по-старому работает. Так, я уже запутался с этими кавычками, не/поддержкой старых записей и т. п. %"<>" останется или нет? Внутри неё кавычки/апострофы для строчных параметров будут нужны или нет?

#1710:  Author: Loopback PostPosted: Sat Jun 06, 2020 01:00
    —
Flasher wrote:
мне так привычней, удобней, сподручней

Ок.

Flasher wrote:
Где? Тут не вижу.

Тут, раздел Объявление переменных.

Flasher wrote:
Так, я уже запутался с этими кавычками, не/поддержкой старых записей и т. п. %"<>" останется или нет? Внутри неё кавычки/апострофы для строчных параметров будут нужны или нет?

Ну давай подведем краткое резюме.
1. Классический командный синтаксис остается в неизменном виде.
2. В командной записи, если не применяется вычисляемая строка, переменные в командах всегда должны заключены в %%, строки могут быть в кавычках обоих типов или вообще без них.
3. Вычисляемая строка в виде %"<>" остаётся для командного синтаксиса, чтобы выполнять однострочное функциональное выражение и передавать его результат в команду. Применима только и исключительно в командном синтаксисе.
4. Выполнение функциональных выражений будет зависеть от прагмы, соответственно, необходимость кавычек вокруг строк и переменные без %% (в том числе в вычисляемой строке, т.к. это функциональное выражение) регулируется ей.
5. В объявлении переменных и присваивании после = выражения пишутся только в ФЗ.
6. В условиях, циклах, объявлении функций выражения пишутся только в ФЗ.
7. Любая одиночная функция/команда в строке может быть запущена как в КЗ, так и в ФЗ (вопрос в целесообразности).
8. ControlSetMouseAction - исключение, в первую очередь потому, что если в вызываемой команде есть вычисляемая строка, то при командной записи она будет выполняться каждый раз при запуске команды. Достигнуть такого же результата в функциональной записи проблематично. Поэтому, вероятнее всего эта команда будет пригодна только для записи в КЗ.

В общем вот так, всё то, за что я так не люблю AHK. Но теперь я их хотя бы понимаю.

#1711:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 01:26
    —
Loopback wrote:
Тут, раздел Объявление переменных.
Понятно. Без обоснования только.

Loopback wrote:
Ну давай подведем краткое резюме.
В справке, надеюсь, это всё отражено будет. Добавил пока пост в закладки, чтобы сперва сюда при ошибках смотреть.
А теперь вопрос. Сейчас у нас не КЗ/ФЗ, а КЗ+ФЗ? Или как? На КЗ новинки (функции, циклы и т. д.) заведуться или надо между прагмами переключаться?

#1712:  Author: yozhikLocation: Электросталь PostPosted: Sat Jun 06, 2020 01:32
    —
Loopback wrote:
Только так
ControlSetMouseAction ... SendCommand 123
Или так
ControlSetMouseAction( ... , SendCommand, 123)

Code:
ControlSetMouseAction /L /K:C /K:S /B:3 17 SendCommand 1004

Работает.
Code:
ControlSetMouseAction(/L, /K:C, /K:S, /B:3, 17, SendCommand, 1004)

«Left value conversion error: / L» при запуске ТС.
ЧЯДНТ?

#1713:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 01:51
    —
yozhik
Объединённые в один параметр ключи с тильдой спереди в апострофы/кавычки надо заключить. См. справку.

#1714:  Author: yozhikLocation: Электросталь PostPosted: Sat Jun 06, 2020 02:35
    —
Flasher
Спасибо, с этим разобрался. А вот из такой КЗ (сама эта строка — рабочая):
Code:
ControlSetMouseAction /R /K:A /B:1 17 ShellExec %AUTOIT% "%COMMANDER_PATH%\Profile\scripts\FButtonHint.au3 /f3"

у меня никак не получается сделать рабочую ФЗ.

#1715:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 02:40
    —
yozhik
Ну а ФЗ-вариант-то где?

#1716:  Author: yozhikLocation: Электросталь PostPosted: Sat Jun 06, 2020 02:47
    —
Flasher
А, нет, пардон Embarassed , вот эта заработала:
Code:
ControlSetMouseAction('~/R /K:A /B:1 17', ShellExec, %AUTOIT%, "%COMMANDER_PATH%\Profile\scripts\FButtonHint.au3 /f3")

#1717:  Author: Loopback PostPosted: Sat Jun 06, 2020 14:05
    —
Flasher wrote:
В справке, надеюсь, это всё отражено будет.

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

Flasher wrote:
Сейчас у нас не КЗ/ФЗ, а КЗ+ФЗ? Или как? На КЗ новинки (функции, циклы и т. д.) заведуться или надо между прагмами переключаться?

Да, КЗ+ФЗ. Просто надо понимать, что уточнение "командная запись", равно как и "функциональная запись" относится не к скрипту в целом, а только к методу записи отдельных команд/функций. Иными словами, в КЗ может быть записан только вызов команды или функции. Выражения всегда записываются только в ФЗ, если в выражении используется функция, она тоже записывается в ФЗ, по другому просто невозможно. Поэтому говоря о выражениях, можно даже не упоминать, в какой они записи - это всегда ФЗ. То же самое объявление переменной и присваивание - это всегда ФЗ.

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

Вполне очевидно, что все новинки так или иначе работают с выражениями в ФЗ. Была попытка скрестить ужа с ежом, в виде функций в командной записи FileExist/ProcessExist в условиях, но она, что очевидно, провалилась. Но это не отменяет возможности по прежнему записывать команды в КЗ внутри блоков условий, циклов и пользовательских функций:

Code:

If a = 0 then   -- ФЗ (выражение a = 0)
  MsgBox %a%    -- КЗ (команда)
  MsgBox(a)     -- ФЗ (команда)
  b = a + 1     -- ФЗ (присваивание)
endif

MyFunc 123 456   -- КЗ (функция)
MyFunc(123, 456) -- ФЗ (функция)

Func MyFunc(a, b = 1)  -- ФЗ (объявление функции)
  Local c  = 1         -- ФЗ (объявление переменной)   
  MsgBox %a%           -- КЗ (команда)
  MsgBox(a)            -- ФЗ (команда)
EndFunc


Так что переключаться между прагмами не нужно, скрипт в целом будет работать при любой. Прагма будет только переключать два режима работы парсера выражений:

1. Старый - строки могут быть в кавычках (любых из двух типов), либо без кавычек, переменные только в %%. В случае отсутствия переменной возвращается само имя переменной (можно и пустую строку возвращать, но это "потеря совместимости"). Ошибок не выдавалось. Есть неопределенности при работе со строками.
2. Новый - строки в кавычках (любых из двух типов), переменные в выражениях могут быть либо в %%, либо без них (предпочтительнее без, чтобы было лучше видно отличие от КЗ, где %% обязательны). При отсутствии переменной выдается ошибка. Неопределенностей нет.

Вот пример с особенностями (возможно что-то упустил):
Code:

1: Старый
a = zxc                     -- ок
с = %a%                     -- ок, присвоит значение a
с = a                       -- ок, присвоит строку "a"
a = "zxc asd"               -- ок
a = zxc asd                 -- некорректная запись, вернет  "zxcasd" без пробела
b = StrLen(qwerty)          -- ок
b = StrLen("qwerty")        -- ок
b = StrLen(%a%)             -- ок
b = StrLen(a)               -- ок, вернет "1", длину строки "a"
b = StrLen("qwerty asdf")   -- кавычки все равно обязательны, т.к. пробел
b = StrLen("qw(er)ty,asdf") -- кавычки все равно обязательны, т.к. в строке есть разделители ",()"
b = StrLen(%a% & qwerty)    -- ок

2: Новый
a = "zxc"                -- ок
с = %a%                  -- ок, присвоит значение a
с = a                    -- ок, присвоит значение a
b = StrLen("qwerty")     -- ок
b = StrLen(%a%)          -- ок
b = StrLen(a)            -- ок
b = StrLen(a & "qwerty") -- ок

#1718:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 19:10
    —
Loopback
Спасибо за подробности, стало куда более понятно.

Loopback wrote:
в командной записи FileExist/ProcessExist в условиях, но она, что очевидно, провалилась. ... (возможно что-то упустил)
Вот это упустил. Как с этим будет в каждом режиме?

#1719:  Author: Loopback PostPosted: Sat Jun 06, 2020 21:23
    —
Flasher wrote:
Вот это упустил. Как с этим будет в каждом режиме?

Так же, как с любыми другими командами. Но в условиях запись только в ФЗ, "if FileExist name then" убрана, я об этом писал еще в посте с самой первой бетой.

#1720:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 21:35
    —
Loopback wrote:
Но в условиях запись только в ФЗ
В формате или режиме?

#1721:  Author: Loopback PostPosted: Sat Jun 06, 2020 21:59
    —
Flasher wrote:
В формате или режиме?

Вроде как ФЗ везде используется в контексте формата записи. Причем тут какой-то режим?

#1722:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 22:02
    —
Loopback
Так мы говорим не про то, как сейчас (КЗ+ФЗ), а как будет (КЗ/ФЗ) с прагмами, то бишь без скрещивания ужа с ежом.

#1723:  Author: Loopback PostPosted: Sat Jun 06, 2020 22:32
    —
Flasher wrote:
Так мы говорим не про то, как сейчас (КЗ+ФЗ), а как будет (КЗ/ФЗ) с прагмами

А как будет? Будет точно так же, КЗ+ФЗ. Командный синтаксис никуда не денется. Прагма влияет исключительно на интерпретацию ФЗ.

Я уже вообще перестал понимать, то тут еще непонятно.

#1724:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 23:18
    —
Loopback wrote:
Будет точно так же, КЗ+ФЗ.
Т. е. как и сейчас, с любой из прагм?
Code:
If Not ProcessExist('~/F', '...') Then
Так?

#1725:  Author: Loopback PostPosted: Sat Jun 06, 2020 23:41
    —
Flasher
Всё верно.

#1726:  Author: FlasherLocation: Москва PostPosted: Sat Jun 06, 2020 23:45
    —
Loopback
А, ну ОК, тогда я спокоен.

#1727:  Author: Loopback PostPosted: Mon Jun 08, 2020 00:22
    —
Версия 2.2.3 beta

+ добавлены сообщения об ошибках синтаксиса в циклах
- исправлено сообщение, когда отсутствует Then в условнии
+ Tab может использоваться аналогично пробелу в выражениях
+ дополнительная проверка ошибок синтаксиса в выражениях
+ добавлена директива LegacyExpressions
+ добавлено сообщение при попытке добавить функцию с дублирующимся именем
- при разбиении строк пробел перед _ не будет удаляться
- исправлена передача параметра по ссылке
- исправлена проблема с остановкой парсера на неподдерживаемых символах
- исправлен парсинг задания переменных без начального значения
- исправлен запрет на присвоение значений макросам и константам
- исправлена ошибка парсера с ключевыми словами or, and, not в условиях
- Tweaks: исправлена работа с модификаторами (снова, и снова, и снова)

Крупных изменений нет, в основном фиксы и оптимизации. Обсуждаемая ранее директива реализована и действует. Страница бета-функционала дополнена.

По поводу ControlSetMouseAction - менять что-то нет смысла, в ФЗ она и будет записываться, как в этом посте, за исключением того, что в "новом" режиме имя команды ShellExec также должно быть в кавычках (т.к. это обычная строка, один из параметров ControlSetMouseAction).

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

Code:

ControlSetMouseAction /R /H:64 0 CommandExec em_Lang %"IniRead('~/R', %COMMANDER_INI%, Configuration, LanguageIni)"


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

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

#1728:  Author: FlasherLocation: Москва PostPosted: Mon Jun 08, 2020 01:07
    —
Loopback wrote:
если нужен именно этот результат, проще записать команду в командном виде.
Виде? Без смены режима? Это как?

У LegacyExpressions свитч-то есть? Ты же обещал 2 прагмы. Иначе смысл?

#1729:  Author: Loopback PostPosted: Mon Jun 08, 2020 02:14
    —
Flasher wrote:
Виде?

Ну записи. В общем, как в приведенном примере.

Flasher wrote:
У LegacyExpressions свитч-то есть? Ты же обещал 2 прагмы. Иначе смысл?

Две-то зачем? Нет прагмы - новый режим, есть - старый.

Code:

Pragma LegacyExpressions

#1730:  Author: FlasherLocation: Москва PostPosted: Mon Jun 08, 2020 02:30
    —
Loopback wrote:
В общем, как в приведенном примере.
Так без LegacyExpressions он не работает.

Loopback wrote:
Две-то зачем?
Как это зачем? Сперва пишу в LegacyExpressions, а потом отключаю и пишу в умолчательном, что избежать проблем старого режима. В этом и суть.

#1731:  Author: Loopback PostPosted: Mon Jun 08, 2020 03:02
    —
Flasher wrote:
Так без LegacyExpressions он не работает.

Естественно, Configuration и LanguageIni без кавычек. Если включить LegacyExpressions - будет работать.

Flasher wrote:
Как это зачем? Сперва пишу в LegacyExpressions, а потом отключаю и пишу в умолчательном, что избежать проблем старого режима. В этом и суть.

Ничего не понял Confused Зачем что-то писать в режиме LegacyExpressions, если всё что у тебя есть - и так в нём написано?

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

#1732:  Author: FlasherLocation: Москва PostPosted: Mon Jun 08, 2020 03:54
    —
Loopback wrote:
Естественно
Я спросил "Без смены режима?", ты ответил "Ну записи.".

Loopback wrote:
Ничего не понял Confused Зачем что-то писать в режиме LegacyExpressions, если всё что у тебя есть - и так в нём написано?
Я тем более. Как это зачем? Если всё в нём написано, то логично в нём и писать. А если после надо какую-то часть написать в ФЗ (например, для указания переменных без %), то логично переключиться обратно.

#1733:  Author: Loopback PostPosted: Mon Jun 08, 2020 11:04
    —
Flasher wrote:
А если после надо какую-то часть написать в ФЗ

Ты вроде тут писал, что стало понятно.

ФЗ - она при любой прагме ФЗ. Я же в обновленной справке в разделе "Синтаксис" разжевал всё подробно: прагма управляет интерпретацией ФЗ. По умолчанию включена правильная, которая исключает неоднозначности и обеспечивает корректную обработку ошибок, но можно переключиться на старую, если сложно/лень/нет времени вносить изменения в свой имеющийся код.

#1734:  Author: FlasherLocation: Москва PostPosted: Mon Jun 08, 2020 11:08
    —
Loopback wrote:
Ты вроде тут писал, что стало понятно.
Что и как будет работать в каждом из режимов — да, стало понятно. Но я не хотел и не предполагал, что один из режимов будет выбит наглухо...

Тем более, что сам пишешь, что есть не только функциональная разница, но и отладочная. И тут дело не в лени вовсе.

#1735:  Author: Loopback PostPosted: Tue Jun 09, 2020 12:57
    —
У меня возникает стойкое ощущение, что иногда мы мыслим в противофазе. Полное отсутствие взаимопонимания.

В общем своё понимание я подробно документировал. Что куда и почему "выбито", откуда вообще взялось ожидание каких-то двух прагм и для чего они две нужны - мне так и осталось непонятным. Лучше я объяснить уже не смогу, так что я - пас.

#1736:  Author: FlasherLocation: Москва PostPosted: Tue Jun 09, 2020 19:02
    —
При чём тут взаимопонимание? Я твой ликбез в целом прекрасно понял. Да и ты мой нужник наверняка тоже. А вот отсутствие желания с твоей стороны и только, это уже совсем другой разговор.

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

#1737:  Author: Loopback PostPosted: Tue Jun 09, 2020 20:13
    —
Flasher wrote:
Да и ты мой нужник наверняка тоже.

И нафига бы это мне? Слишком много лишнего времени, что захотелось поразвлекаться перепиской на несколько страниц?

Flasher wrote:
Любая прагма работает с места, а не по всему коду

Ну наконец хоть что-то стало проясняться. Вот это была большая ошибка так думать. До сих пор единственная прагма, работающая в конкретном месте - это была FinalizeSection. Теперь добавилась Include, вставляющая по этому месту содержимое файла. Всё. Остальные прагмы - глобальные, и размещать их можно не в первых строках, а где угодно.

Резюме: это на самом деле трудоемко. Потому что прагмы читаются на этапе препроцессинга. И если с Include проблем нет (всё что нужно реализуется на этапе препроцессинга), то даже под FinalizeSection пришлось городить специальную обработку (если бы не совместимость, сейчас я бы лучше сделал специальную функцию "OnExit"). В парсер выражений сейчас передается единственный глобальный флаг. А чтобы реализовать включение/выключение по месту, придется сначала как-то сохранить с препроцессинга и проставить флаги в каждый узел дерева скрипта, учитывая вложенности, потом их проверять при выполнении.

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

#1738:  Author: FlasherLocation: Москва PostPosted: Tue Jun 09, 2020 21:02
    —
Loopback wrote:
И нафига бы это мне? Слишком много лишнего времени, что захотелось поразвлекаться перепиской на несколько страниц?
Мы после выкладки беты даже до второй не дошли, а ты уже несколько насчитал. Laughing Нафига тебе понимать мою нужду? Хороший вопрос, но не ко мне он, не телепат я. )

Loopback wrote:
Вот это была большая ошибка так думать. До сих пор единственная прагма, работающая в конкретном месте - это была FinalizeSection.
У тебя очень интересно в описании:
Quote:
Директивы выполняются на этапе предварительной обработки скрипта, результат их обработки действует на протяжении всего времени выполнения скрипта.
И тут же следующей строкой:
Quote:
Часть скрипта после этой директивы обрабатывается при завершении Total Commander.
Такие противоречия заставляют задуматься, что там да как на самом деле.

Loopback wrote:
если бы не совместимость, сейчас я бы лучше сделал специальную функцию "OnExit"
Совместимость уже поломалась в синтаксисе, поэтому можно делать не глядя. Wink

По остальному ясно-понятно, вопросов больше не имею...

#1739:  Author: Loopback PostPosted: Tue Jun 09, 2020 23:04
    —
Flasher wrote:
Нафига тебе понимать мою нужду? Хороший вопрос, но не ко мне он, не телепат я. )

Мда, двусмысленно вышло. Надо было полностью цитировать.

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

Доработаю. Но как раз это и должно было наводить на мысль, что не всё однозначно.

Flasher wrote:
Совместимость уже поломалась в синтаксисе, поэтому можно делать не глядя.

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

Функцию теперь нет смысла делать, раз уж секция осталась.

#1740: Имя переменной Author: dueus_minor PostPosted: Wed Sep 16, 2020 13:01
    —
Здравствуйте!
Возник вопрос следующего характера:
В Wind'е есть переменная среды вида "ProgramFiles(x86)". Ясно, что она неоднозначна для разных битностей ОС и самого ТС, ну, т.е. она может быть (в Win_х64), а может и не быть (в Win_x32).
Вопрос - возможно ли реализовать в плагине создание переменной с именем, содержащим скобки "()"?
З.Ы.: я знаю, что такое можно реализовать через .cmd(.bat), знаю, что есть и другие переменные, вопрос именно реализации через плагин Autorun.
З.Ы.2.: да, добавлю, что речь идёт про переменную среды в рамках процесса ТС. Т.е. добавление в реестр (утилита setx.exe и иже с ней) пользователя не задуман.

#1741:  Author: Loopback PostPosted: Wed Sep 16, 2020 20:26
    —
dueus_minor
Да, сейчас плагин ограничивает создание переменных с именами, содержащими скобки и другие спецсимволы. Скорее всего, это сделано потому, что чтение внутренних переменных и переменных окружения производится единообразно (сейчас понятно, что это было не лучшее решение). Хотя имена переменных окружения разрешены любые, единственный запрещённый символ "=".

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

#1742:  Author: dueus_minor PostPosted: Thu Sep 17, 2020 12:31
    —
Loopback
Спасибо, что откликнулись на мою "затею". Что ж, буду ожидать очередного релиза.

Возможно, конечно, это описка, логичнее функцию назвать GetEnv, по аналогии с SetEnv.

Всплыло потому, что решил обновить и перелопатить базу плагинов, которые были где х32, где х32-64, до актуального состояния х32-64, для более универсальной переносимости (к сожалению, многие не обновляются с две тысячи лохматого года, многие из х32 морально устарели, некоторых не х32-64 будет не хватать, и придётся "перенастраивать пальцы" под новое нажатие кнопок Smile ). А на моё ИМХО, ярлык должен быть один Smile .
Раньше был ярлык на .cmd'шник, что, ИМХО, уже не комильфо, т.к. наткнулся на сей замечательный плагин, почему то не попавший в мою обойму ранее. Ну, и пошло, поехало... Wink В .cmd'шнике я создавал или дополнял в зависимости от битности ОС две переменные окружения по аналогии с переменными среды, которые уже были для ТС однозначными и не имели вариаций в зависимости от битности ОС или самого ТС: ProgramFiles(x86) и ProgramFiles(x64). Далее, ссылался на них в ini'шках. А тут незадача... Соответственно и вариантов немного: остаться на .cmd'шке и/или дождаться реализации в плагине.

З.Ы.:На данный момент пользуюсь версией 2.2.3b.

#1743: StrPart Author: dueus_minor PostPosted: Thu Sep 17, 2020 22:18
    —
Возможно, нашёлся баг в команде StrPart.
По крайней мере, мне не удалось получить описанный в Справке результат, согласно которой, цитата: "Если не было найдено ни одного разделителя, команда возвращает строку целиком и устанавливает %ERROR% в 1."

Строка конфига:
MsgBox %"StrPart('%COMMANDER_INI%', '/', 1)" "%ERROR%"

Ожидаемый результат:
сообщение с содержанием полного пути ini-фала, в заголовке сообщения "1"

Полученный результат:
сообщение с содержанием полного пути ini-фала, в заголовке сообщения "0"

Испытания проводились в Win'10 х64, ТС'9,51 х32.

З.Ы.: А всего-то перепутал знаки "\" "/"...

#1744:  Author: Loopback PostPosted: Fri Sep 18, 2020 00:19
    —
dueus_minor wrote:
Спасибо, что откликнулись на мою "затею". Что ж, буду ожидать очередного релиза.

Возможно, конечно, это описка, логичнее функцию назвать GetEnv, по аналогии с SetEnv.

Да я не назвал бы затеей, в общем-то это недоработка исходной функции. Раз такие имена переменных окружения разрешены и (тем более) используются системой, значит поддержка должна быть.
dueus_minor wrote:
логичнее функцию назвать GetEnv, по аналогии с SetEnv.

Разумеется, просто по привычке пишу имена аналогов из Autoit Smile

Завтра выложу версию с поддержкой.

dueus_minor wrote:
Возможно, нашёлся баг в команде StrPart.

Подтверждаю, в описанном случае ERROR не выставлялась.

#1745:  Author: Loopback PostPosted: Fri Sep 18, 2020 16:22
    —
Версия 2.2.4 beta

- StrPart не устанавливала значение ERROR в определенных ситуациях
+ GetEnv для получения значения переменных окружения с именами, содержащими спецсимволы
* SetEnv теперь может устанавливать переменные окружения с любым разрешенным именем

#1746:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Aug 06, 2021 09:17
    —
Тут на оффоруме вопрос про AutorunLoadInSubrocess возник, она не решает свою задачу в режиме /S=L. Я предположил, что плагин не запускается в этом режиме, Гислер подтвердил догадку.
Но если контентные плагины не загружаются в подпроцессах в принципе, то директива в этом же самом принципе бесполезна? Либо нужно уточнить, что для её работы нужен какой-то экзотический способ загрузки плагина, не через механизм окраски файлов.
Я видел в теме мысль о том, чтобы её вообще убрать, но там не учитывался этот весьма толстый момент.

#1747:  Author: Loopback PostPosted: Fri Aug 06, 2021 21:08
    —
MVV
Да, интересное наблюдение. Если я правильно помню, делалось это для поиска файлов в отдельном процессе, но похоже явно не был учтен момент, что автоматически плагин загрузиться просто не сможет. Думаю, "экзотическим" способом плагин точно никто не захочет загружать, в этом просто нет смысла. Действительно, более чем весомый аргумент к удалению.

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

#1748:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Aug 07, 2021 18:13
    —
Забавно, но быстрый тест показывает, что тотал загружает плагин и в режиме листера, и в режиме поиска в отдельном процессе. Я добавил ShellExec для отображения сообщения и оно отображается при вызове TOTALCMD /S=L и по Alt+Shift+F7.

#1749:  Author: BeTePLocation: Санкт-Петербург PostPosted: Tue Aug 24, 2021 22:39
    —
Подскажите пожалуйста.
Возможно ли с помощью ModifyDialogs изменить размеры вот этих диалогов:

 Hidden text

Желательно рабочий пример т.к. у самого не хватает знаний.

#1750:  Author: Loopback PostPosted: Wed Aug 25, 2021 21:12
    —
BeTeP

Да, можно, но в этих диалогах не удастся изменить размер и положение кнопок +F7, +F8, т.к это графческий элемент, а не контрол.

А так в принципе главное настроить условия, чтобы различать их, поскольку класс TInpComboDlg используется для многих других диалогов. Простейший способ по тексту заголовка, т.к. он различается и у этих диалогов, и отличается от других, используем AddCondition:

Code:

AddDialog /W:100 /H:50 "TInpComboDlg"
AddCondition /TEXT "" 0 "Загрузка"

AddDialog /W:200 /H:50 "TInpComboDlg"
AddCondition /TEXT "" 0 "Закачка"


Теперь ширина первого диалога будет увеличиваться на 100, второго на 200. Высота обоих увеличится на 50.

Размер изменился, но контролы остались на том же месте, т.е. надо их тоже исправить. Проще всего взять Au3Info, и для необходимых контролов создать правила изменения их положения/размера. К примеру, в диалоге загрузки расширим первый комбобокс до новой ширины диалога. Из запущенного Au3Info тащим перекрестье "Finder Tool" на верхний комбобокс, видим, что в группе "Basic Control Info" появились данные "Class" - TMyComboBox и "Instance" - 2. Используем эти данные:

Code:
AddControl /W:100 "TMyComboBox" 2


/W:100 - увеличиваем ширину на 100 пикселей.
В конце всего вызываем ModifyDialogs.

Итого, c учетом загрузки плагина получим:
Code:

LoadLibrary Plugins\Autorun_ModifyDialogs.dll

AddDialog /W:100 /H:50 "TInpComboDlg"
AddCondition /TEXT "" 0 "Загрузка"
AddControl /W:100 "TMyComboBox" 2

AddDialog /W:200 /H:50 "TInpComboDlg"
AddCondition /TEXT "" 0 "Закачка"

ModifyDialogs


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

#1751:  Author: BeTePLocation: Санкт-Петербург PostPosted: Thu Aug 26, 2021 05:38
    —
Loopback
Большое спасибо за помощь.

#1752:  Author: jentoso PostPosted: Mon Feb 07, 2022 07:49
    —
Приветствую.
Решил воспользоваться плагином Tweaks и столкнулся с отсутствием реакции на действие
Code:
# Alt+ПКМ по табуляторам активной панели = настроить текущий набор колонок:
ControlSetMouseAction /R:U /K:A 10001 SendCommand 2920

Не срабатывает именно на команду 2920. Если заменить к примеру на 483, то все открывается без проблем.
Windows 10 x64, TC 10 x32 (в x64 не проверялось), Autorun 2.1.1

#1753:  Author: Monarch-LFV PostPosted: Mon Feb 07, 2022 08:22
    —
jentoso
На win7х64 ТС10х32 (autorun 2.1.1) проверил - работает с командой 2920 без проблем. Но, есть нюансы:
1. настраиваемая файловая панель должна быть активна
2. на панели должен быть активирован пользовательский набор колонок, а не стандартные (краткий, подробный, эскизы и т.п.)

#1754:  Author: jentoso PostPosted: Mon Feb 07, 2022 08:29
    —
Monarch-LFV
Действительно, при выполнении 2го нюанса, все работает. Надо было справку для начала посмотреть по cm_CustomColumnDlg. Rolling Eyes

#1755:  Author: Kirr PostPosted: Mon Mar 07, 2022 15:44
    —
Дорогой автор!
Скажите пожалуйста, а можно ли с помощью SetEnv удалить существующую переменную окружения?
Стандартно в DOS/Windows, при присвоении переменной окружения пустого значения происходит её удаление.
Если использовать для изменения переменных wfx-плагин Environment Variables Ex 1.0, то поведение именно такое.
А вот если вызвать SetEnv с пустым значением, то переменная только опустошается, но не удаляется (это видно в том же Environment Variables Ex).

В принципе, это не критично, так как практический результат идентичен что с пустой переменной, что с удалённой. Но всё же интересно, можно ли добиться полностью стандартного поведения. Может быть, я какой-то переключатель у SetEnv не знаю или эскейп-последовательность?
Question

P.S. Кстати, по ходу, для чего мне это вообще надо. При использовании TC на HiDPI-экране (4K на ноутбуке) для получения желаемой картинки пришлось настроить параметры совместимости. Но проблема в том, что эти параметры, как известно, наследуются любым процессом, запущенным из контекста TC (как при непосредственном запуске исполняемого файла, так и при открытии файла ассоциированным приложением). А другие приложения совсем не обязательно нормально выглядят с теми настройками совместимости, что хороши для TC. Настройки совместимости передаются через переменную окружения __COMPAT_LAYER. Удаление или очистка этой переменной "внутри" работающего TC не влияет на сам TC, зато устраняет передачу его настроек совместимости дочерним процессам. Пока тестирую этот вариант, если всё будет ок, сделаю отдельную тему на форуме, поделюсь опытом.


Last edited by Kirr on Fri Mar 11, 2022 00:45; edited 2 times in total

#1756:  Author: Loopback PostPosted: Tue Mar 08, 2022 23:20
    —
Kirr
Возможность присвоить переменной пустое значение было сделано специально, поскольку ТК где-то примерно с 9 версии поддерживает такие переменные, а их использование весьма удобно для разных целей, например, для неявного построения путей к программам в 32/64 битных системах. Поэтому смысла копировать стандартное поведение с удалением переменной я не вижу.

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

#1757:  Author: Kirr PostPosted: Fri Mar 11, 2022 00:41
    —
Loopback, спасибо за отклик!
Ок. Smile

#1758:  Author: Loopback PostPosted: Fri Sep 16, 2022 19:54
    —
Версия 2.2.5 beta

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

+ добавлена функция SetError для пользовательских функций
- макрос ERROR был полностью неработоспособен в бета-версиях
* проверены, оптимизированы и почищены сообщения об ошибках
+ Sysinfo: добавлена поддержка новых ОС в переменной SYSINFO_OSVERSION
- исправлена и дополнена обработка ошибок в Args
+ можно использовать aucfg в качестве возможного расширения для файла конфигурации
+ ShowPopupMenu теперь доступна как отдельная функция
+ Tweaks: добавлена команда SetMessageAction
- функции StrPos и StrReplace неправильно обрабатывали пустые параметры
* Tweaks: ControlSetMouseAction выполнение команд вынесено в отдельный поток
* изменена логика загрузки перевода: при отсутствии Pragma AutorunLanguage будет загружен язык, установленный в ТК
+ добавлено условие Switch..Case..EndSwitch
- исправлена проблема с появлением случайных ошибок в процессе бесконечного рабочего цикла
+ доработан парсер, загрузка теперь не продолжается после обнаружения фатальной ошибки синтаксиса в выражении
* парсинг скрипта перенесен в поток для устранения проблем с отображением сообщений об ошибках
- при вызове функции из ControlSetMouseAction и использовании Sleep основное окно ТК больше не подвешивается
+ добавлен плагин Runtime
- при добавлении функции из плагина была возможность добавления дубликата
+ формальная проверка корректности записи чисел при парсинге
+ поддержка чисел в hex-формате, например: 0xFF, 0x45AB и т.д. (только в функциональной записи)
+ API: дополнительные коды фатальных ошибок и их обработка
+ добавлена подсветка синтакисиса кода в онлайн и оффлайн версиях справки
+ новая справка (пока только русская)
+ разрешено использование строчных комментариев в конце выражений
+ поддержка переменных в параметре CommandExec
+ предотвращение ситуаций с существованием глобальной переменной и переменной окружения с одним именем
+ добавлены функции Chr, Asc, StrCompare, адаптированы StrPos, StrReplace, StrPart
- исправлен древний баг, когда Autorun не мог загрузить свои субплагины при открытом в ТК каталоге Autorun
+ добавлены специальные константы auCRLF, auCR, auLF, auTAB
+ Tweaks: добавлена команда SetHotkeyAction
+ Tweaks: динамические меню
+ Tweaks: добавлены опции выравнивания меню

#1759:  Author: gogoshar PostPosted: Sat Sep 17, 2022 12:59
    —
Версия 2.2.5 beta
При установке TC10.51 падает

#1760:  Author: Loopback PostPosted: Sat Sep 17, 2022 14:08
    —
gogoshar

Очень информативно Smile

Я тестирую на том же 10.51 и ничего не падает.

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

#1761:  Author: Loopback PostPosted: Sun Sep 18, 2022 13:35
    —
Версия 2.2.6 beta

- исправлена обработка последнего параметра при вызове функций из Runtime
- исправлена функция Sleep для значений не кратных 10
+ дополнена функция ItemAtCursor
- исправлена функция RequestInfo
- исправлена ошибка неправильного типа с оператором not
- исправлена ошибка с унарным минусом в выражениях c операторами сравнения
- исправлена неработоспособность директивы LegacyExpression

#1762:  Author: sa PostPosted: Wed Sep 21, 2022 12:11
    —
Loopback
Спасибо за развитие плагина!

Loopback wrote:
+ Tweaks: добавлена команда SetHotkeyAction
Quote:
Основное преимущество данной команды над стандартным функционалом горячих клавиш в Total Commander в том, что установленные сочетания также работают в командной строке, а не только в панелях.

Хотел уточнить. Попробовал в TC из командной строки комбинацию Ctrl+B – работает (с автоматическим переходом в панель). Или имеются ввиду клавиши вроде "Home", "End"?

#1763:  Author: Loopback PostPosted: Wed Sep 21, 2022 14:54
    —
sa

В принципе можно переопределить любые хоткеи, можно и "Home", "End", но все же думаю ломать себе стандартный функционал никто не захочет.

#1764:  Author: sa PostPosted: Wed Sep 21, 2022 15:00
    —
Loopback
Я имел ввиду, что Ctrl+B работает из командной строки и в стандартном функционале (без плагина). Или не так?

#1765:  Author: Loopback PostPosted: Wed Sep 21, 2022 16:02
    —
sa
А, ну это да. Имелись в виду пользовательские сочетания, которые не работают в командной строке. А некоторые сочетания (например Win+C), у меня вообще нигде не работали, даже в панелях.

#1766:  Author: sa PostPosted: Wed Sep 21, 2022 16:57
    —
Loopback wrote:
например Win+C

Понятно, спасибо!

#1767:  Author: jentoso PostPosted: Sun Sep 25, 2022 16:26
    —
Как "заставить" вносить в реестр значение в виде пути до файла, а не отдельными разделами реестра?
Code:
RegWrite "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "d:\\TESTING\\hwmonitor\\HWMonitor_x64.exe" REG_SZ "RUNASINVOKER"

Code:
d:\\TESTING\\hwmonitor\\HWMonitor_x64.exe

В итоге создается не значение, а отдельные разделы (\ или \\ не влияет на результат).

#1768:  Author: yozhikLocation: Электросталь PostPosted: Mon Sep 26, 2022 00:21
    —
Loopback, доброго здоровья!

Прошу заранее пардону, если туплю, но что-то я запутался. Вот у меня запущена программа "c:\totalcmd\utils\Everything64.exe". В консоли (comspec) по команде TASKLIST процесс выглядит как "Everything64.exe". Процесс работает, т.о. ф-ция ProcessExist() плагина должна возвращать 1, если я правильно её вызвал. У меня 1 возвращает одна только единственная запись (регистронезависимо):
Code:
MsgBox(ProcessExist("Everything64.exe"))

Остальные варианты возвращают 0 (хотя должно быть 1, ведь процесс то есть):
Code:
MsgBox(ProcessExist("~/F", "c:\totalcmd\utils\Everything64.exe"))
MsgBox(ProcessExist("/F", "c:\totalcmd\utils\Everything64.exe"))
MsgBox(ProcessExist("c:\totalcmd\utils\Everything64.exe"))
MsgBox(ProcessExist("Everything"))
MsgBox(ProcessExist(%EVERYTHING%))

Если «Имя процесса», как написано в справке, это строго имя процесса, без пути (как в TASKLIST, и как в AutoIt), то зачем тогда ключ "/F"? Подскажите, пожалуйста, может я чего недодумал.

#1769:  Author: Loopback PostPosted: Mon Sep 26, 2022 00:29
    —
jentoso

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

yozhik

Quote:
Остальные варианты возвращают 0 (хотя должно быть 1, ведь процесс то есть):


Не смог подтвердить. Предполагая, что переменная EVERYTHING содержит полный путь, работает изначально вариант 1. Вариант 2 неправильный, 3, 4, 5 разумеется не будет т.к. полный путь без /F.

4 и 5 правильно будет так:

MsgBox(ProcessExist("~/F", Everything))
MsgBox(ProcessExist("~/F", %EVERYTHING%))

#1770:  Author: yozhikLocation: Электросталь PostPosted: Mon Sep 26, 2022 16:21
    —
Loopback wrote:
работает изначально вариант 1

Да, я из этого исходил. Но поскольку вчера этот вариант упорно возвращал 0, я стал тыкать «на авось» в другие всевозможные комбинации. Сегодня этот же самый вариант возвращает 1. Сижу теперь, отгоняю настойчивые мистические толкования произошедшего.

Назрела хотелка. Поскольку благодаря Tweaks на функциональные кнопки (клавиши) теперь можно навесить много всего полезного (и это помимо стандартных возможностей TC), становится насущной необходимость во всплывающей для них подсказке, где можно наглядно перечислить что конкретно на каждую навешено. Я вот себе смастерил костыль на AutoIt, но он именно что костыль, потому что вызывается по Alt+ПКМ через ControlSetMouseAction (а не по наведении), ну и вообще самодеятельный, хотя и работает:



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

#1771:  Author: Loopback PostPosted: Mon Sep 26, 2022 16:47
    —
yozhik wrote:
Назрела хотелка.

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

#1772:  Author: sa PostPosted: Mon Sep 26, 2022 16:59
    —
yozhik wrote:
на функциональные кнопки (клавиши) теперь можно навесить много всего полезного

А можно как-нибудь навесить установку языка (русского или английского), например, после Ctrl+D - для удобства перехода по горячим клавишам в меню избранных каталогов?

#1773:  Author: yozhikLocation: Электросталь PostPosted: Mon Sep 26, 2022 17:26
    —
sa wrote:
навесить установку языка

Речь про установку языка в TC, если я правильно понял. Ну, при поверхностном взгляде мне кажется можно при помощи новых SetHotkeyAction и SetMessageAction в субплагине Tweaks. На некий хоткей повесить перезапись в wincmd.ini значения ключа LanguageIni и отправку TC команды перечитать wincmd.ini. Но это теоретичсссски, надо разбираться, я пока туда не лез. А в моей фразе «функциональные кнопки (клавиши)» ключевое слово всё же «кнопки», а «клавиши» только постольку, поскольку на них отображается F3/F4/F5 и т.д.

#1774:  Author: sa PostPosted: Mon Sep 26, 2022 17:35
    —
yozhik wrote:
Речь про установку языка в TC

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

#1775:  Author: Loopback PostPosted: Mon Sep 26, 2022 19:31
    —
sa wrote:
Нет, языка в системе.


Язык-то всё равно меняется на уровне приложения.

С помощью вспомогательного скрипта можно сделать. В конфиге Autorun переопределить Ctrl+D:

Code:

SetHotkeyAction /K:C /H:D SetLangAndOpen

Func SetLangAndOpen()
    ShellExec /WAIT "<path_to_Autoit>\AutoIt3.exe" "<path_to_Script>\setlang.au3"
    SendCommand "cm_DirectoryHotlist"
EndFunc


Скрипт (переключает на английский, для русского строка "0419"):

Code:

_TCHSetKeyboardLayout("0409", __TCHGetActiveInstance())

Func _TCHSetKeyboardLayout($sLayoutID, $hWnd)
    Local $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, _
                                                "int", $WM_INPUTLANGCHANGEREQUEST, _
                                                "int", 1, _
                                                "int", $ret[0])
EndFunc

Func __TCHGetActiveInstance()
    Local $sInst = EnvGet("COMMANDER_HWND") ; if set by Autorun, preferable
    If ($sInst <> "") And StringIsDigit($sInst) Then Return Hwnd($sInst)
    ; Fallback to "active" window method
    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

#1776:  Author: sa PostPosted: Mon Sep 26, 2022 20:42
    —
Loopback wrote:
Язык-то всё равно меняется на уровне приложения.
Понятно, просто у yozhik речь велась про ключ LanguageIni (отвечающий за используемый языковой файл), который мне не нужно менять.

Loopback wrote:
С помощью вспомогательного скрипта можно сделать.
Спасибо, сработало!
Можно теперь обойтись без внешней утилиты (для автоматического переключения языка после Ctrl+D).

#1777:  Author: Loopback PostPosted: Mon Sep 26, 2022 22:11
    —
Версия 2.2.7 beta

+ добавлена обновленная английская справка
- функции реестра не работали с именами параметров, содержащими "\"
+ Runtime: добавлена функция IsPressed
- опять исправлена директива LegacyExpression
- исправлена проверка переменной для цикла For
+ добавлена функция RunThread

#1778:  Author: jentoso PostPosted: Mon Sep 26, 2022 22:56
    —
Loopback wrote:

- функции реестра не работали с именами параметров, содержащими "\"

Теперь отрабатывает без ошибки.

#1779:  Author: yozhikLocation: Электросталь PostPosted: Tue Sep 27, 2022 02:58
    —
Loopback
Вот диалог cm_CopySamePanel (Shift+F5/F6):
Code:
IniRead CRNTLNG "%COMMANDER_INI%" "Configuration" "LanguageIni"
LngRead TREEBTN 5002 "%COMMANDER_PATH%\LANGUAGE\%CRNTLNG%"

If %AUTORUN_TCARCH% = 32 Then
  AddDialog    /W:105 /CENTER:1 "TCheckComboBox"
  AddCondition /TEXT  "TButton" 1 "%TREEBTN%"
  AddControl   /X:106 "TButton" 1
  AddControl   /X:106 "TButton" 2
  AddControl   /X:106 "TButton" 3
  AddControl   /W:109 "TMyComboBox" 1
Else
  AddDialog    /W:105 /CENTER:1 "TCheckComboBox"
  AddCondition /TEXT  "Button" 3 "%TREEBTN%"
  AddControl   /X:106 "Button" 3
  AddControl   /X:106 "Button" 4
  AddControl   /X:106 "Button" 5
  AddControl   /W:108 "LCLComboBox" 1
EndIf

В 32бит всё чётко работает, а в 64бит ModifyDialogs не может поменять ширину LCLComboBox. А у MVV его Autorun_FixWindows.dll меняет ширину этого комбобокса! Может можно что-нибудь «подкрутить»? Или смириться с тем что под 64бит сей комбобокс несгибаем?

#1780:  Author: Loopback PostPosted: Tue Sep 27, 2022 14:46
    —
yozhik wrote:
Или смириться с тем что под 64бит сей комбобокс несгибаем?

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

#1781:  Author: sa PostPosted: Tue Sep 27, 2022 15:18
    —
Команда SetHotkeyAction: у меня комбинации с модификатором Alt почему-то не работают. Пробовал и левую, и правую клавишу.

#1782:  Author: Loopback PostPosted: Tue Sep 27, 2022 21:30
    —
sa
Да, что-то упустил, похоже альт вообще забыл проверить.

#1783:  Author: yozhikLocation: Электросталь PostPosted: Wed Sep 28, 2022 08:22
    —
Loopback
Пара замеченных очепяток в справке:

глава RegDelete
Code:
RegDelete [\K] <ключ> [<параметр>]

слэш в переключателе надо бы перевернуть

глава While...Wend
Code:
While var > 0
  MsgBox(var) # --> 3 --> 2 --> 1
  var = var - 1
Next

вместо Next надо бы WEnd

#1784:  Author: Loopback PostPosted: Wed Sep 28, 2022 20:21
    —
yozhik
Спасибо, поправлю.

#1785:  Author: yozhikLocation: Электросталь PostPosted: Fri Sep 30, 2022 00:47
    —
Loopback
Вы AkelPad пользуетесь? Я сделал для него подсветку синтаксиса autorun.cfg.

------

Партия замеченных опечаток и недоумений:

В описании CommandExec
Описание гласит:
CommandExec wrote:
Выполнить пользовательскую команду em_* или установить в панелях заданные пути.

При этом в примерах видим выполнение не только пользовательских команд:
Code:
# открывает диалог настроек
CommandExec cm_Config

и это работает. Хорошо, но чем тогда CommandExec отличается от SendCommand? Только тем, что во 2й внутренние команды TC можно передавать числами? А литерально в обеих — не создаст ли это путаницы? Далее читаем:
CommandExec wrote:
Параметры отправки внутренней команды

и при этом в последующей таблице сведения только о пользовательских em_ командах TC. В русской справке TC эти термины не пересекаются: внутренняя/встроенная — только о cm_, а пользовательская — только о em_.

В описании RunThread
Code:
RunThread <funcname> [<param1> [.. <paramN>]
RunThread(<funcname> [, <param1> [, .. <paramN>]]

В 1й строке не хватает закрывающей ], во 2й закрывающей )

В описаниях строчных ф-ций намёк на то, что вместо casesense требуется подставлять boolean есть только в StrReplace. Может в др., там где casesense используется, тоже стоит добавить?

В описании StrPart
Code:
StrPart(<str>, <delim>, <index> [, <casesense>]

Не хватает закрывающей ).
Code:
sDay = StrPart("Понедельник|Вторник|Среда|Четверг|Пятница|Суббота|Воскресенье" "|", nDay)

Не хватает запятой перед delim.

------

Теперь внимание: очень сильная хотелка. Я давно уже её вынашиваю, и вот настало исполнение времён. Пожалуйста!
Дело в том, что у известного хорошего плагина TWinKey есть два существенных недостатка:
  1. он заброшенный, и с новыми версиями TC всё больше и больше подглючивает;
  2. если TC видит, что он подключен, то блокирует собственную раскраску табов, даже если в TWinKey она не используется.

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

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

#1786:  Author: Loopback PostPosted: Fri Sep 30, 2022 02:19
    —
yozhik wrote:
Вы AkelPad пользуетесь? Я сделал для него подсветку синтаксиса autorun.cfg.

Пользуюсь эпизодически, как вторым редактором. Но интересно будет сравнить с моим вариантом Smile Я ее в принципе и собирался выложить после релиза.

yozhik wrote:
Хорошо, но чем тогда CommandExec отличается от SendCommand?

Честно - не помню. Может на тот момент это было не так? В любом случае, сейчас тут уже поздно что-то менять, lеgacy и всё такое...

yozhik wrote:
В описаниях строчных ф-ций намёк на то, что вместо casesense требуется подставлять boolean есть только в StrReplace. Может в др., там где casesense используется, тоже стоит добавить?

Да, пожалуй.

yozhik wrote:
Не хватает запятой перед delim

Все косяки поправлю.

yozhik wrote:
Поэтому, без лишних слов, вот бы часть самых полезных избранных ф-ций из TWinKey реализовать в субплагинах Autorun.

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

Проблема еще в том, что в данный момент не планируется больше ничего добавлять, может быть только то, что потенциально может повлиять на совместимость (синтаксис). Сейчас только исправления. Иначе релиз никогда не состоится.

В любом случае есть желание максимально уйти от узкоспециализированных функций и переложить это на возможности скриптинга встроенными средствами. Что-то мне подсказывает, что при определенном наборе универсальных функций (в Runtime) можно и эту хотелку будет реализовать. Но не сейчас.

#1787:  Author: ZZZAlexZZZ PostPosted: Fri Sep 30, 2022 09:58
    —
Loopback wrote:
Я ее в принципе и собирался выложить после релиза


yozhik , Loopback Просьба поделиться в двух вариантах подсветкой синтаксиса, очень не хватает.

#1788:  Author: sa PostPosted: Fri Sep 30, 2022 11:16
    —
yozhik wrote:
чем тогда CommandExec отличается от SendCommand? Только тем, что во 2й внутренние команды TC можно передавать числами?

Есть ещё различие: в SendCommand имеется ограничение для параметра - только число.

#1789:  Author: Loopback PostPosted: Fri Sep 30, 2022 15:02
    —
yozhik wrote:
Поэтому, без лишних слов, вот бы часть самых полезных избранных ф-ций из TWinKey реализовать в субплагинах Autorun.

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

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

#1790:  Author: yozhikLocation: Электросталь PostPosted: Sat Oct 01, 2022 00:01
    —
Loopback
Loopback wrote:
Пользуюсь эпизодически, как вторым редактором.

Очень приятно слышать. Там есть ещё один маленький инструмент, которым Вы, как я понял, не пользуетесь. Понял потому, что в справке к Autorun нет индекса, а он необходим для работы скрипта ChmKeyword.js. С ним если в коде выделить команду или ключевое слово и нажать хоткей (любой назначенный, например у меня это Shift+F1), то справка откроется аккурат на странице этой команды. Можно не выделять, а только поставить курсор на искомое слово. Для работоспособности всего этого нужно, чтобы в AkelPad были установлены плагины Scripts и Hotkeys (они есть в дистрибутиве по умолчанию), и чтобы в справке был создан индекс. Я создал индекс и пересобрал с ним справку. Всё вместе упаковал в один архив на пробу: файл индекса, перепакованная help_ru.chm, скрипт ChmKeyword.js, readme настройки хоткея на запуск скрипта с нужным параметром (не сочтите за ликбез) — всё разложено по нужным папкам, чтобы не путаться. Если интересно, попробуйте, может одобрите и внедрите индекс в справку. Вот ссылка на архив. В нём же дополненная подсветка синтаксиса.

Loopback wrote:
Он совсем сырой, я им практически не занимался. Ну если очень надо, то вот

А-я-яй, недокументированное расширение *.aucfg для файла конфигурации )) С индивидуальным то расширением ChmKeyword.js гораздо лучше работает, т.к. справка будет открываться только из нужного файла, а не из всех *.cfg подряд. Добавьте в справку, пожалуйста, это, пмсм, важная инфа.

В целом, по подсветке:
  1. Переключатели, как я понял, регистронезависимы, но в справке везде в примерах только в верхем регистре. Я у себя в подсветке сделал только в верхнем, так мне показалось лучше.
  2. Помимо блоков для условий и Func я сделал ещё блоки для MsgBox, Sleep и всех строчных ф-ций в обоих синтаксисах — ФЗ и КЗ (как в справке) — хотел и дальше делать, но пока остановился, поскольку не понятна политика предпочтений для остальных команд: их делать и КЗ, и ФЗ, или какие то предпочтительно только в одной форме (ну, за исключением таких случаев как Set). Вот, например, SetEnv можно в ФЗ записать (и работает), так включать эту запись в блоки или лучше SetEnv записывать всегда только в КЗ? В справке для некоторых команд приводятся обе формы, а для некоторых только одна, хотя вторая при этом также возможна. Ориентироваться в этом на справку?
  3. Обратите, пожалуйста, внимание, я сделал у себя ещё подсветку распространённых ошибок. Например:
    • Args подсвечивается только внутри Func;
    • если попытаться набрать комментарий после перевода строки _ то он «покраснеет»;
    • также «покраснеет» ФЗ запись для Set; и др.
    Думаю, это не лишнее, на скорость обработки сколь-либо заметно не влияет.

Loopback wrote:
В любом случае, сейчас тут уже поздно что-то менять, lеgacy и всё такое

Добро. Но я, собственно, более о внятности справки заботился. Просто в соответствующие описания внести уточнения.
Ещё по справке: внутри chm файл sysinfo_funcs.html — на него нет ссылки в оглавлении, видимо он старый и Вы его забыли удалить — это и по его содержанию видно.

Loopback wrote:
Хотя не стану скрывать, переписывать то, что уже имеется

Нет, ну тут всё же существенный момент. Оно раньше имелось, а сейчас уже так не получается уверенно сказать, потому что TWinkey — плагин заброшенный. После выхода TC 10.51 в нём ещё что-то перестало работать (что именно я не запомнил, Avada где-то писал). И то, что из-за него Гислер отрубил родную подсветку табов — это, пмсм, не маленький минус. Поэтому я, например, буду потихоньку от него избавляться, по мере того, как будут находиться способы реализовать другими средствами то, к чему уже привык. Хотя это просто к слову, поскольку:

Loopback wrote:
переложить это на возможности скриптинга встроенными средствами... при определенном наборе универсальных функций (в Runtime) можно и эту хотелку будет реализовать

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

Loopback wrote:
есть скриптовый вариант запрашиваемого

Спасибо большое и за вариант, и за то, что помните. Меня в этом способе только одно смущает: получается много обработчиков висят в фоне, наблюдая за одним TC, и Autorun, и TWinkey, теперь ещё и AutoHotkey запускать только ради одной ф-ции. Уж лучше одним Autorun обходиться. Но я попробую вникнуть в скрипт, кто знает, вдруг и хватит ума что-нибудь самостоятельно сделать средствами Autorun.


sa
Quote:
в SendCommand имеется ограничение для параметра - только число

Вот попробовал: "SendCommand cm_Config" — работает. Может раньше было ограничение, а сейчас нет? Или Вы что-то другое имели в виду, а я опять туплю. Embarassed


ZZZAlexZZZ
Да не вопрос. В этом сообщении выше ссылка на архив с исправленной моей версией. А предыдущую я на предыдущей странице выкладывал.

#1791:  Author: sa PostPosted: Sat Oct 01, 2022 01:15
    —
yozhik wrote:
что-то другое имели в виду

У меня не про команду, а про параметр:
help_ru.chm wrote:
параметр      Опциональный числовой параметр для поддерживающих параметры команд (cm_100Percent, cm_Select и т.д.) .

#1792:  Author: Loopback PostPosted: Sat Oct 01, 2022 01:28
    —
yozhik wrote:
Понял потому, что в справке к Autorun нет индекса, а он необходим для работы скрипта ChmKeyword.js. С ним если в коде выделить команду или ключевое слово и нажать хоткей (любой назначенный, например у меня это Shift+F1), то справка откроется аккурат на странице этой команды.

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

yozhik wrote:
А-я-яй, недокументированное расширение *.aucfg для файла конфигурации ))

Как же недокументированное, раздел "Файл конфигурации". Ну может недостаточно подробно. И в истории изменений упоминал, недавно совсем.

yozhik wrote:
поскольку не понятна политика предпочтений для остальных команд

Тут исключительно по своему вкусу. Любая команда может быть записана как функция и наоборот. Очевидно, что если возвращается значение и нет переключателей, удобнее функциональная запись. При этом, например, IniRead имеет переключатель /R, что уже не очень удобно в ФЗ. А ControlSetMouseAction в ФЗ даже и мысли не возникает записать. Надеюсь, к релизу все же появится некая единая логика и рекомендации по использованию.

yozhik wrote:
Обратите, пожалуйста, внимание, я сделал у себя ещё подсветку распространённых ошибок.

Да, я видел, у AkelPad весьма продвинутая система подсветки, хотя местами очень замороченная. Ближе к делу посмотрю, может и идею какую утащу Smile

yozhik wrote:
также «покраснеет» ФЗ запись для Set

На самом деле это даже не ограничение, точно так же можно и в ФЗ ее записать, просто смысла ноль.
yozhik wrote:
внутри chm файл sysinfo_funcs.html

Да, спасибо, давний косяк конвертера, всё как-то руки не дойдут доработать его.

yozhik wrote:
наблюдая за одним TC, и Autorun, и TWinkey, теперь ещё и AutoHotkey запускать только ради одной ф-ции

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

yozhik wrote:
сделать средствами Autorun.

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

#1793:  Author: yozhikLocation: Электросталь PostPosted: Sat Oct 01, 2022 02:27
    —
Loopback
При запуске 64-битного TC не работает MsgBox! На 32-битном работает. У меня TC комбинированный (ну, и Win 10 21H2, на всякий случай). Я уж из aucfg всё удалил, оставил один только MsgBox (ну, и Pragma AutorunFinalizeSection). Не работает. Откатился на 2.2.4 — тоже не работает.

Loopback wrote:
в истории изменений упоминал

Да, точно, есть в истории, а я прозевал. А в справке нет.

Loopback wrote:
Надо заполнить ключевые слова, тогда и индекс появится.

А пока не появился, буду своим любоваться Smile

Loopback wrote:
это даже не ограничение, точно так же можно и в ФЗ ее записать, просто смысла ноль

Да, что смысла ноль, это понятно. Но я ради интереса пробовал её в ФЗ по всякому записать — плагин то ругался, то игнорировал. Значит пусть остаётся красной в подсветке.

Loopback wrote:
какого-то существенного влияния на производительность это всё не окажет

Для меня ценен такой отзыв, потому что я сам не очень в этом разбираюсь. Спасибо.

Loopback wrote:
не думаю, что имеющихся функций хватит на реализацию такого...

А вот это очень жаль. Ах, как жаль. Но TWinkey всё равно буду отключать потихоньку.

sa
sa wrote:
У меня не про команду, а про параметр

Ну, вот, второй фэйспалм у меня за неделю Smile Прошу пардону и спасибо.

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

Loopback
Взялся я в DIALOG_COPYMOVE поправить надпись у чекбокса MD5 (она у меня обрезалась по правому краю, видимо из-за шрифта Segoe UI) и выяснилось, что в 64-бит работа с контролами происходит не так, как ожидалось (при том, что в 32-бит всё чётко). Если при помощи инспектора окон посмотреть instance необходимых контролов, то должен работать такой код:
Code:
If StrPos(%CRNTLNG%, "RUS") > 0 Then
  If %AUTORUN_TCARCH% = 32 Then
    AddDialog DIALOG_COPYMOVE
    AddControl /W:-10     "TMyCheckBox" 3
    AddControl /X:-4 /W:5 "TMyCheckBox" 1
  Else
    AddDialog DIALOG_COPYMOVE
    AddControl /W:-10     "Button" 9
    AddControl /X:-4 /W:5 "Button" 6
  EndIf
EndIf

но он не работает. А работает вот этот:
Code:
If StrPos(%CRNTLNG%, "RUS") > 0 Then
  If %AUTORUN_TCARCH% = 32 Then
    AddDialog DIALOG_COPYMOVE
    AddControl /W:-10     "TMyCheckBox" 3
    AddControl /X:-4 /W:5 "TMyCheckBox" 1
  Else
    AddDialog DIALOG_COPYMOVE
    AddControl /W:-10     "Button" 4
    AddControl /X:-4 /W:5 "Button" 1
  EndIf
EndIf

Т.е. в 64-бит контролы определяются не по их instance, как по идее должно было быть, а по счёту в дереве (не знаю, насколько внятно получилось описать). Это нормальная ситуация?

#1794:  Author: Loopback PostPosted: Sat Oct 01, 2022 13:39
    —
yozhik wrote:
При запуске 64-битного TC не работает MsgBox!

Да, об этом даже в справке написано, что может не работать. Причина до конца не ясна. Может надо бы вернуться к этому вопросу, но время.

yozhik wrote:
А в справке нет.

Есть, только я ошибся с разделом, в "Установке". Добавлю подробнее.

yozhik wrote:
Т.е. в 64-бит контролы определяются не по их instance, как по идее должно было быть, а по счёту в дереве (не знаю, насколько внятно получилось описать). Это нормальная ситуация?

А что такое instance? Это и есть порядковый номер в дереве. С этим лазарусом, смотрю, постоянно какой-то бардак, то комбобоксы не растягиваются, теперь почему-то номера не совпадают. У меня, например, 4 и 1 другие контролы изменяют. Но и 9 с 6 тоже не работают. В 10.51. Не знаю в общем. Меньше всего на свете хочется тратить время на все эти диалоги.

#1795:  Author: yozhikLocation: Электросталь PostPosted: Sat Oct 01, 2022 14:57
    —
Loopback wrote:
С этим лазарусом, смотрю, постоянно какой-то бардак

Эх, вот ведь. Да я то теперь немного разобрался, но только потому, что было ночью время. Если бы не было, то так бы и бросил «несолоно хлебавши». Инспекторы окон, которые у меня есть, включая Au3Info, показывали Button Instance 6. Хорошо, додумался посмотреть дерево в Spy++ и тупо пальцем сверху посчитать: вижу, да, по порядку 6й button, но первые пять отображаются серым цветом, значит возможно они не учитываются. Написал Button 1 — заработало. Много ли пользователей будут этот путь проходить? Обычно же как: справку прочёл, сделал как написано, если не работает, то прости-прощай.

Loopback wrote:
В 10.51.

Да, я тоже в нём.

Loopback wrote:
Меньше всего на свете хочется тратить время на все эти диалоги.

Хорошо.
Code:
SetHotkeyAction /K:C /K:S /H:N SendCommand cm_Config

В 32-бит работает до N раза. Нажимаю — открывает окно Конфигурация, как и должен. И так до 5 раз. На 6й раз открывает диалог Соединение ftp (т.е. тот, который в TC на Ctrl+Shift+N по умолчанию) и после этого Конфигурацию уже не открывает ни разу. И так до перезагрузки TC. Иной раз на 5й раз слетает, иной раз на 6й, иной — на 10й. В 64-бит всё работает чётко. И ещё, из справки:
Quote:
Внутренняя команда Autorun. Если не задана, то никакого действия выполняться не будет, а имеющееся действие данного сочетания будет заблокировано.

Т.е. при записи «SetHotkeyAction /K:C /K:S /H:N» ничего не должно происходить, в том числе и «имеющееся действие», т.е. умолчательное в TC — открытие диалога ftp. Так? Но у меня ftp открывается.

#1796:  Author: Loopback PostPosted: Sat Oct 01, 2022 18:40
    —
yozhik wrote:
Много ли пользователей будут этот путь проходить? Обычно же как: справку прочёл, сделал как написано, если не работает, то прости-прощай.

Да, поведение разумеется ненормальное, но у меня пока нет идей, почему так может быть, и нет времени, чтобы с этим разбираться.
yozhik wrote:
В 32-бит работает до N раза.

В своей текущей версии не смог повторить, много раз тыкал. Так что возможно уже исправлено. Если в следующей бете сохранится проблема, тогда будем смотреть.
yozhik wrote:
Т.е. при записи «SetHotkeyAction /K:C /K:S /H:N» ничего не должно происходить

Знаю про этот баг, уже исправлено.

#1797:  Author: jentoso PostPosted: Sat Oct 01, 2022 20:17
    —
yozhik wrote:
скрипт ChmKeyword.js

В самом скрипте зашито место размещения справки?

#1798:  Author: yozhikLocation: Электросталь PostPosted: Sat Oct 01, 2022 21:53
    —
jentoso
Нет, параметром -File= передаётся вместе с расширением. В архиве выше я запаковал пример. Вот ещё другой вариант/пример, с подгрузкой из внешнего файла. Если об этом продолжать, то давайте, пожалуйста, лучше в тему Akel'я на руборде переедем или в ПМ, а то влетит обоим за офтоп)).

Loopback
Loopback wrote:
нет времени, чтобы с этим разбираться

Добро, добро. Я то в целом всем доволен. Ждём новую бету.

#1799:  Author: Loopback PostPosted: Mon Oct 03, 2022 14:41
    —
Версия 2.2.8 beta

+ прописаны ключевые слова для индекса в справке
* дополнены и документированы неявные преобразования типов в условиях
- исправлено падение ТК при установке плагина через интерфейс в опциях
+ Tweaks: дополнительные опции выравнивания меню для ShowPopupMenu
- Tweaks: пустая команда в SetHotkeyAction не блокировала заданную комбинацию клавиш
- Tweaks: исправлена работа модификатора Alt в SetHotkeyAction
- исправлено падение ТК x64 при попытке чтения файлов (например, в LngRead), если переданное имя было каталогом
- определение факта отсутствия закрывающих блоков (EndIf, EndFunc и т.д.)

#1800:  Author: imig73Location: г. Иркутск PostPosted: Mon Oct 03, 2022 18:56
    —
Loopback
Всё по делу, всё клёво и очень впечатляет что плагин развивается. Просто респект и уважуха. Тока ссылка на закачку в полном игноре у программы Dounload Manager, качаем браузером.

#1801:  Author: sa PostPosted: Mon Oct 03, 2022 21:15
    —
Loopback wrote:
- Tweaks: исправлена работа модификатора Alt в SetHotkeyAction

Подтверждаю: комбинации с Alt заработали.

#1802:  Author: Loopback PostPosted: Tue Oct 04, 2022 15:09
    —
imig73
Спасибо. По закачке, видимо проблемы все же у конкретной программы, попробовал тем, что стояло (FDM) - качает без проблем. Да и 500кб, думаю, сейчас не так сложно скачать без загрузчика.

#1803:  Author: yozhikLocation: Электросталь PostPosted: Wed Oct 05, 2022 16:16
    —
Loopback

Спасибо за исправления! Я опять с простынёй, прошу снисходительности.

SetHotkeyAction в отношении прошлых замеченных шероховатостей теперь работает без запинки. Но срабатывает только КЗ:
Code:
SetHotkeyAction /K:C /K:S /H:N MsgBox "Message received"

А вот так не срабатывает:
Code:
SetHotkeyAction /K:C /K:S /H:N MsgBox("Message received")

Может так и должно быть?

SetMessageAction. Пример из справки
Code:
Func MyMessageFunc()
  MsgBox "Сообщение получено"
EndFunc
SetMessageAction 55555 MyMessageFunc

в связке с вызовом из TCFS2, вызываю кнопкой
Code:
TOTALCMD#BAR#DATA
%TCFS2%
/ef "msg(55555, 0, 0)"
%COMMANDER_ICONS%\bars.outline.software.dll,5
Debug SetMessageAction


-1

В 32-бит срабатывает только самый первый вызов: MsgBox появляется. При последующих вызовах MsgBox не появляется. И так до перезагрузки Windows. После перезагрузки опять 1й срабатывает, остальные нет.
При помощи au3-скрипта (из справки) я также пробовал вызвать: тот же результат.

А на 64-бит вызывает ошибку:
Code:
[284] SetMessageAction 55555 MyMessageFunc
Missing closing quote for string:


Следующий момент: если возможно, подскажите, пожалуйста, алгоритм действий. В TWinkey есть такая ф-ция NextQuickView, вот её описание:

Quote:
Быстрый просмотр со следующим плагином
Чтобы при быстром просмотре в TC выбрать для файла под курсором следующий подходящий LS-плагин, приходится сначала переместить фокус из файловой панели в окно быстрого просмотра (на месте другой файловой панели), там нажать один или несколько раз клавишу 4, а для продолжения навигации по файлам снова вернуться в исходную панель. Предлагаемая функция позволяет во время быстрого просмотра переключаться с клавиатуры (например, той же клавишей 4) на другой подходящий плагин внутреннего просмотрщика, не покидая исходной файловой панели. Способ вызова команды NextQuickView определите на странице Клавиши и команды.


Я хочу попытаться средствами Autorun сделать подобное. Пока попытки не увенчались успехом. А делал я вот что: при помощи Spy++ посмотрел Message, высылаемый окну TC при нажатии 4 в QuickView. Получил:
Code:
S message:0x046A [User-defined:WM_USER+106] wParam:075BC371 lParam:0013EC80

безуспешно попытался воспроизвести:
Code:
# пробовал по отдельности, и КЗ
SetHotkeyAction /K:C /K:S /H:N SendMessage %AUTORUN_TCHANDLE% 046A 075BC371 0013EC80
# и ФЗ
SetHotkeyAction /K:C /K:S /H:N SendMessage(%AUTORUN_TCHANDLE%, 046A, 075BC371, 0013EC80)

Я понимаю, что как школьник вслепую тыкаю )) Но с другой стороны, лучше так, чем вообще никак. Подскажите, пожалуйста, правильно ли двигаюсь?
Чтобы хоть как-то разобраться, я попытался выслать Message при помощи TCFS2. На параметры "046A, 075BC371, 0013EC80" он заругался, а принял их пересчёт в Dec:
Code:
tcfs2.exe /ef "msg(1130, 123454321, 1305728)"

При вызове кнопкой этой команды в панели QuickView меняется заголовок (на кракозябр), т.е. видно, что что-то там передаётся и даже куда-то попадает, но не туда и не то, что нужно )) Из Autorun же вообще ничего не происходит.

#1804:  Author: Loopback PostPosted: Wed Oct 05, 2022 20:42
    —
yozhik wrote:
А вот так не срабатывает:


Так получается смешивается КЗ с ФЗ. Если нужно именно в ФЗ выражение, придется через Eval:

Code:
SetHotkeyAction /K:C /K:S /H:N Eval 'MsgBox("Message received")'


yozhik wrote:
В 32-бит срабатывает только самый первый вызов: MsgBox появляется. При последующих вызовах MsgBox не появляется. И так до перезагрузки Windows. После перезагрузки опять 1й срабатывает, остальные нет.

У меня это выглядит по-другому, но да, тут баг.
yozhik wrote:
А на 64-бит вызывает ошибку:

У меня не появляется, но скорее всего это связано с тем же. И вот это:
Quote:
В 32-бит работает до N раза. Нажимаю — открывает окно Конфигурация, как и должен.

вероятно тоже.

yozhik wrote:
что что-то там передаётся и даже куда-то попадает, но не туда и не то, что нужно

Скорее всего так не получится, по значениям wParam:075BC371 lParam:0013EC80 видно, что передаются какие-то указатели - структуры, строки или еще что-нибудь. Если еще раз получить сообщение с Spy++, они скорее всего будут другие. Так что мало отправить сообщение, надо точно знать, какие данные передаются. Хотя, даже если это будет точно известно, в Autorun нет возможности работать со структурами и не уверен что она появится.

Простейший способ представляется отправка нажатий клавиш, например скриптом Autoit:

Code:

Send("{TAB}4{TAB}")


Возможно, Send будет добавлен в Autorun, но пока только так.

#1805:  Author: sa PostPosted: Wed Oct 12, 2022 14:14
    —
В Win10 Pro, TC 10.51x64 возникла проблема с закрытием окон TC, запущенных отдельным процессом. Можно проверить, вызвав поиск отдельным процессом (Alt+Shift+F7). При попытке закрытия окна появляется сообщение "(Не отвечает)". Воспроизводится, начиная с 2.2.8_beta. Причём в TC x32 всё нормально. Может кто-то подтвердить, или проблема только у меня?

P.S. Показалось, что вызывать поиск надо из папки самого запущенного тотала.


Last edited by sa on Wed Oct 12, 2022 18:33; edited 1 time in total

#1806:  Author: Monarch-LFV PostPosted: Wed Oct 12, 2022 15:34
    —
sa
Подтверждаю, у меня такое же поведение на win7x64, TC10.51x64 (ровно как и TC10.52rc2x64), Autorun 2.2.8_beta.
При Autorun 2.2.7 - все нормально.

#1807:  Author: sa PostPosted: Wed Oct 12, 2022 15:49
    —
Monarch-LFV
Да, в TC10.52rc2 у меня всё также, как в TC10.51, хотя поначалу полагал, что проблема в новой версии тотала.

#1808:  Author: imig73Location: г. Иркутск PostPosted: Wed Oct 12, 2022 15:54
    —
sa
Так же подтверждаю и с Win10 21H2 (TC10.52rc2x64), Autorun 2.2.8_beta

#1809:  Author: jentoso PostPosted: Wed Oct 12, 2022 21:03
    —
sa wrote:
В Win10 Pro, TC 10.51x64 возникла проблема с закрытием окон TC, запущенных отдельным процессом. Можно проверить, вызвав поиск отдельным процессом (Alt+Shift+F7). При попытке закрытия окна появляется сообщение "(Не отвечает)". Воспроизводится, начиная с 2.2.8_beta. Причём в TC x32 всё нормально. Может кто-то подтвердить, или проблема только у меня?

P.S. Показалось, что вызывать поиск надо из папки самого запущенного тотала.

У себя такое не воспроизвёл.
TC 10.51 combo, Win10 x64 21H2 19044.2075

#1810:  Author: Loopback PostPosted: Wed Oct 12, 2022 22:48
    —
У меня как-то не особо проявляется, но причина вроде достаточно очевидна. Тут пока версия с исправлением, следующая версия будет позже.

#1811:  Author: sa PostPosted: Wed Oct 12, 2022 23:17
    —
Loopback wrote:
Тут пока версия с исправлением

Помогло! Ранее выскакивавшее при некоторых условиях сообщение об ошибке (а-ля "Runtime error 204 at 000000000AA74B42") при запуске отдельными процессами синхронизации каталогов или сравнения по содержимому также исчезло. Спасибо!

#1812:  Author: imig73Location: г. Иркутск PostPosted: Wed Oct 12, 2022 23:24
    —
Loopback
Во, поиск файлов отдельным процессом виснуть перестал. Оперативно, благодарю!
До исправления не модальные окна висли постоянно.

#1813:  Author: Monarch-LFV PostPosted: Thu Oct 13, 2022 03:11
    —
sa
Quote:
при запуске отдельными процессами синхронизации каталогов

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

#1814:  Author: sa PostPosted: Thu Oct 13, 2022 04:16
    —
Monarch-LFV
С помощью параметра командной строки:
Quote:
/S=S     Запускает отдельным процессом инструмент синхронизации каталогов без открытия основного окна TC. В параметрах командной строки можно указать либо непосредственно два пути, либо шаблон в форме /S=S:имя_шаблона
Если параметр начинается со знака равенства "=" (например, /S=S:=имя_шаблона), сравнение начнётся сразу после открытия диалога. Если знак равенства указан без имени шаблона (т. е. /S=S:=), то для сравнения будут взяты каталоги, переданные через командную строку, и последние использовавшиеся настройки.
Примеры:
%commander_exe% /S=S:=имя_шаблона
%commander_exe% /S=S:= "c:\Dir1" "d:\Dir2"

#1815:  Author: imig73Location: г. Иркутск PostPosted: Thu Oct 13, 2022 05:27
    —
Monarch-LFV
Code:
[em_SyncStandalone]
button=wcmicons.dll,48
cmd=%COMMANDER_EXE%
menu=Синхронизация каталогов отдельным процессом
param=/S=S "%X%P" "%T"

#1816:  Author: Monarch-LFV PostPosted: Thu Oct 13, 2022 07:26
    —
sa, imig73
Спасибо! [/offtop]

#1817:  Author: Loopback PostPosted: Tue Oct 18, 2022 19:37
    —
Версия 2.2.9 beta

- потенциальная проблема в Set при использовании в нескольких потоках
* изменена работа Sleep на малых задержках
- исправлено падение при использовании функций ТК в отдельных процессах
* дополнены и документированы неявные преобразования типов в условиях при операциях
* дополнительная оптимизация сообщений об ошибках для встроенных команд
* отдельное сообщение об ошибке для имени переменной окружения
* отдельное сообщение об ошибке при неправильном имени переменной для результата в командной записи
- Tweaks: исправлено спонтанное несрабатывание SetHotkeyAction
+ добавлены математические функции
+ Tweaks: более удобное задание флагов центрирования для ShowPopupMenu
+ Tweaks: дополнительные опции выравнивания меню для ShowPopupMenu
* Tweaks: по умолчанию блокируется повтор при нажатии клавиш в SetHotkeyAction

#1818:  Author: yozhikLocation: Электросталь PostPosted: Thu Oct 20, 2022 16:11
    —
Loopback
Спасибо большое, SetMessageAction теперь заработала как часики. С её помощью я наладил запуск ShowPopupMenu по кнопке на тулбаре, и убрал в архив изрядно послужившую TCMenuPopup.exe. Связка ShowPopupMenu+ShowPopupMenu конечно лучше работает в сравнении с TCMenuPopup.exe: и настроек больше, и фокус не перехватывает.

Попутно возник маленький вопрос. Прочитав о «ненадёжности» привязки msg к фиксированному номеру, я подумал, что затруднение решается использованием длинного номера, ведь чем больше цифр, тем меньше вероятность совпадений. Но после тестов выяснилось, что с номерами выше 5-значных связка просто не работает. Чем это объясняется?

#1819:  Author: Loopback PostPosted: Thu Oct 20, 2022 16:57
    —
yozhik wrote:
Но после тестов выяснилось, что с номерами выше 5-значных связка просто не работает. Чем это объясняется?

Сообщения с номерами выше 65535 считаются зарезервированными системой. Опытным путем выяснил, что максимальное значение при котором отправка работает - 65536*2-1 = 131071. Похоже, это уже системное ограничение.

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

#1820:  Author: MVVLocation: Ростов-Дон PostPosted: Fri Oct 21, 2022 23:15
    —
Вообще, есть определенные диапазоны сообщений, и лучше придерживаться их. Указаны, например, тут.

Коды 0x0000 .. 0x03FF - для системных сообщений, сюда лучше не лезть.

Сообщения в диапазонах 0x0400 (= WM_USER) .. 0x7FFF и 0x8000 (= WM_APP) .. 0xBFFF - для идентификаторов элементов и пользовательских классов окон (т.е. классов окон тотала). В этом диапазоне лежат тоталовские WM_USER+50 и WM_USER+51, но могут быть и другие коды, используемые элементами в Delphi/Lazarus. По идее, в этом диапазоне должно быть довольно безопасно использовать старшие номера, т.к. шанс, что элементы тотала начнут их использовать, мал, а кроме них эти номера никто не должен использовать.

Диапазон 0xC000 .. 0xFFFF - для уникальных идентификаторов, регистрируемых вызовом функции RegisterWindowMessage. Эта функция предназначена для регистрации кодов, уникальных для всех окон системы, каждый её вызов для одной и той же строки возвращает тот же код, и вызовы для разных строк возвращают разные коды (думаю, если коды закончатся, функция начнёт возвращать ошибку). По идее, эти диапазоны нужны для резидентных утилит, взаимодействующих с окнами (или может быть для того, чтобы некоторая утилита могла принимать команды от других процессов без фиксации числовых кодов), и с командами самого тотала они пересекаться не будут (в пределах одного процесса удобнее фиксировать номера). В TCFS2 есть возможность отправки сообщений с такими кодами через функцию regmsg.

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

#1821:  Author: Loopback PostPosted: Sat Oct 22, 2022 01:29
    —
MVV
Да, думаю, что все-таки наиболее безопасный способ с регистрируемыми сообщениями.

MVV wrote:
В TCFS2 есть возможность отправки сообщений с такими кодами через функцию regmsg.

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

Code:
/ef "msg(regmsg(MyMessage), 0, 0)"


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

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

#1822:  Author: yozhikLocation: Электросталь PostPosted: Sat Oct 22, 2022 13:19
    —
Loopback wrote:
наиболее безопасный способ с регистрируемыми сообщениями

Я, например, выбрал способ с номерами только из-за его относительной краткости, т.к. в другом способе для регистрации сообщения предлагался дополнительный скрипт. Причём, интересно, ведь доп. скрипт — невелика сложность, но тут видимо первая подсознательная реакция — чем меньше шагов, тем путь предпочтительней. Теперь же, с regmsg, этой разницы между способами нет, значит с лёгким сердцем выбираем сообщения. Я уже так и сделал со всеми своими менюшками — всё чётко работает.

#1823:  Author: Loopback PostPosted: Tue Nov 01, 2022 21:12
    —
Версия 2.2.10 beta

* Tweaks: попытка исключить отображение меню Пуск в некоторых комбинациях с клавишей Win
* Tweaks: оптимизировано потребление памяти
+ сообщение о превышении лимита регистрируемых событий
+ Tweaks: увеличен до 128 лимит регистрируемых событий ControlSetMouseAction, SetHotkeyAction, SetMessageAction
+ сообщение в случае слишком большого числа актуальных параметров в вызове пользовательской функции
- исправлено падение после сообщения о фатальной ошибке синтаксиса
+ Tweaks: ControlSetMouseAction теперь срабатывает на панелях при активном тултипе старого типа (не Win32)
* внутренняя унификация и оптимизация строчных функций
+ добавлена функция Hex
- исправлена потенциальная проблема при одновременной работе пользовательских функций в разных потоках
- исправлена утечка памяти при работе пользовательских функций в разных потоках
- в вызовах ControlSetMouseAction, SetHotkeyAction и т.д. не работали команды, возвращающие значения
+ для SendCommand, возможность задания именем отсутствующих в totalcmd.inc команд

#1824:  Author: Monarch-LFV PostPosted: Mon Mar 20, 2023 16:00
    —
Loopback
Обнаружилась ошибка в бета версиях, подробнее в этой ветке форума.

#1825:  Author: Loopback PostPosted: Tue Mar 21, 2023 18:54
    —
Monarch-LFV
Весьма интересно. У меня эта проблема тоже иногда проявляется, но очень редко, какой-то системы уловить не получается. Я вообще думал, что это какой-то косяк в моей конфигурации, там очень много всякого тестового. Но раз такое и на пустой конфигурации, даже не представляю, с чем это может быть связано. Почему-то кажется, что появилось это относительно недавно, может полгода назад, так что возможно это не бета как таковая, а одна из последних версий.

#1826:  Author: sa PostPosted: Tue Mar 21, 2023 19:13
    —
Loopback wrote:
на пустой конфигурации

А точно на пустой воспроизводится? Monarch-LFV говорил про одинаковую конфигурацию на разных версиях.
У меня TC тоже стоит в автозагрузке системы, сбрасывания меню не замечал.

#1827:  Author: Loopback PostPosted: Tue Mar 21, 2023 19:36
    —
sa
Почему же, он писал:
Quote:

...причем с любым конфигурационным файлом: хоть переименованный example идущий в составе плагина, хоть полностью пустой файл Autorun.cfg (0 байт).

#1828:  Author: sa PostPosted: Tue Mar 21, 2023 19:45
    —
Loopback
Monarch-LFV
Прошу прощения, упустил... Значит, у меня удачная конфигурация!

#1829:  Author: LonerDLocation: Макеевка PostPosted: Fri May 19, 2023 19:00
    —
В команде ControlSetMouseAction в справке описаны варианты отправки SendCommand.
А можно ли послать несколько команд?
Или для этого нужно делать вспомогательную em_-команду, и уже её вызывать через CommandExec ?


Last edited by LonerD on Mon May 22, 2023 05:35; edited 2 times in total

#1830:  Author: Loopback PostPosted: Fri May 19, 2023 22:53
    —
LonerD
Можно и так, но мне кажется проще через пользовательскую функцию (в бете):

Code:

ControlSetMouseAction ... SendMyCommands

Func SendMyCommands
  SendCommand ...
  SendCommand ...
  SendCommand ...
EndFunc

#1831:  Author: LonerDLocation: Макеевка PostPosted: Mon May 22, 2023 05:38
    —
Loopback wrote:
LonerD
проще через пользовательскую функцию (в бете):

Понял, спасибо.

А можно как-то сделать, чтобы шрифты, загруженные через Autorun, выгружались после закрытия Тотала, а не висели до перезагрузки ОС?
LoadFont /N System\Fonts\ArialMod.ttf
LoadFont /N System\Fonts\Anonymous.ttf

#1832:  Author: Loopback PostPosted: Mon May 22, 2023 19:26
    —
LonerD
По идее они и должны выгружаться, т.к. функция выгрузки загруженных шрифтов отрабатывает при выгрузке плагина. Я нашел прошлое обсуждение четыре года назад, вроде получается, что проблема появилась между версиями 2.0.2 и 2.0.7, хотя код функции между этими версиями не менялся. Единственное, скорее всего менялся компилятор, но я не вижу, как это может повлиять на работу функций WinAPI.

Ключ /N снимает флаг FR_PRIVATE у функции AddFontResourceEx, т.е. с этим ключом шрифт доступен не только процессу, но и в системе. Предположу, что какие-то системные процессы могут использовать этот шрифт, блокируя тем самым выгрузку.

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

#1833:  Author: LonerDLocation: Макеевка PostPosted: Tue May 23, 2023 21:14
    —
Loopback wrote:
Ключ /N снимает флаг FR_PRIVATE у функции AddFontResourceEx, т.е. с этим ключом шрифт доступен не только процессу, но и в системе. Предположу, что какие-то системные процессы могут использовать этот шрифт, блокируя тем самым выгрузку.

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

#1834:  Author: LonerDLocation: Макеевка PostPosted: Wed May 31, 2023 03:27
    —
Можно ли через плагин посылать нажатия клавиш? MouseClick есть, а про клавиши что-то в справке не нахожу.
Цель - при нажатии средней кнопки мыши на панели инструментов посылать нажатие Ctrl+ЛКМ.

-------------
И второй вопрос.
ShowPopupMenu вызывается только через горячие клавиши/клики мыши? Его никак не повесить на em-команду? (кроме создания em-команды с эмуляцией нажатия соответствующих горячих клавиш)

#1835:  Author: Loopback PostPosted: Wed May 31, 2023 13:00
    —
LonerD
В планах есть, но не с самым высоким приоритетом, конкретно ничего не могу сказать. Пока только через запуск скрипта или чего-нибудь еще, умеющего посылать нажатия, типа tcfs2.

Quote:
Его никак не повесить на em-команду?

Можно, через SetMessageAction (у которой сейчас как раз проблемы с последней парой бет TC). В справке как раз показан пример такого использования, только вместо пользовательской функции можно использовать ShowPopupMenu:

Code:
SetMessageAction "MyMessage" ShowPopupMenu ...

#1836: ShowPopupMenu Author: yahuu PostPosted: Thu Jun 22, 2023 08:58
    —
How should I use the variables when calling ShowPopupMenu in the function?

ControlSetMouseAction /R /K:S 1 ShowMenu
Func ShowMenu()
file = "jpg.bar"
strbar = %COMMANDER_PATH% & "\USER\Typebar\" & %file%
# msgbox(strbar)

#failed
ShowPopupMenu %strbar%

#failed
ShowPopupMenu %COMMANDER_PATH%\USER\Typebar\%file%

#failed
ShowPopupMenu D:\Totalcmd\USER\Typebar\%file%

#successed
ShowPopupMenu %COMMANDER_PATH%\USER\Typebar\jpg.bar
EndFunc

#1837:  Author: Loopback PostPosted: Thu Jun 22, 2023 13:37
    —
yahuu
Yes, something wrong in how ShowPopupMenu handling path. Variables don't appear to be expanded, although a quick look at the code shows they should. So far you can use functional notation: ShowPopupMenu(strbar).

---

Да, что-то неправильно с тем, как ShowPopupMenu обрабатывает пути.
Похоже не разворачиваются переменные, хотя на первый взгляд в коде всё нормально. Пока можно использовать функциональную запись: ShowPopupMenu(strbar).

#1838:  Author: yahuu PostPosted: Thu Jun 22, 2023 20:11
    —
Loopback wrote:
yahuu
Yes, something wrong in how ShowPopupMenu handling path. Variables don't appear to be expanded, although a quick look at the code shows they should. So far you can use functional notation: ShowPopupMenu(strbar).

---

Да, что-то неправильно с тем, как ShowPopupMenu обрабатывает пути.
Похоже не разворачиваются переменные, хотя на первый взгляд в коде всё нормально. Пока можно использовать функциональную запись: ShowPopupMenu(strbar).



Thank you
ShowPopupMenu(strbar) can popup the menu now
But it will often show only part of it, see the attachment

This problem occurs when using .bar format files
Not appearing for now with .mnu format files

Sorry,Because I'm a new user, I can't post links to pictures...
http://mjj.today/i/ICS0Ty

 !  CaptainFlint:
The link is now working.

Оживил ссылку.

#1839:  Author: Loopback PostPosted: Fri Jun 23, 2023 01:08
    —
yahuu
Interesting. I can't reproduce it on my files. Would be good if you place your affected barfile somewere, so I can test it.

---

Интересно, но на моих файлах не воспроизводится. Было бы неплохо увидеть проблемный файл.

#1840:  Author: yahuu PostPosted: Fri Jun 23, 2023 09:24
    —
Loopback wrote:
yahuu
Interesting. I can't reproduce it on my files. Would be good if you place your affected barfile somewere, so I can test it.

---

Интересно, но на моих файлах не воспроизводится. Было бы неплохо увидеть проблемный файл.


I sent the bar file to your email loopback(at)darkhost.ru

#1841:  Author: LonerDLocation: Макеевка PostPosted: Sat Jun 24, 2023 20:00
    —
Запускается несколько копий настроенного Total Commander c плагином Autorun.
В Autorun прописан запуск программы. Закрываю одну копию TC - программа тоже выгружается.
Можно ли это как-то реализовать на уровне параметров запуска в плагине или другими способами, чтобы она выгружалась только если закрыта последняя копия запущенного процесса TC? То есть пока работает хоть один ТС - программа должна висеть резидентно и работать.

#1842:  Author: Loopback PostPosted: Sun Jun 25, 2023 01:12
    —
LonerD
На уровне параметров нет, не получится.

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

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

Либо проверять наличие окна с помощью функции поиска окон. Её пока нет, но планируется. Не сильно сложнее, но гибче.

#1843:  Author: LonerDLocation: Макеевка PostPosted: Mon Jun 26, 2023 00:37
    —
Loopback wrote:
можно, например, сделать макрос, возвращающий число существующих окон тотала (именно окон, не процессов), если оно 0 - можно выгружать. Минус такого решения

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

#1844:  Author: Skif_off PostPosted: Fri Jun 30, 2023 16:09
    —
LonerD
У себя обычно типа такого делал, т.е. не ищем окно ТС, а берём родительский процесс и ищем окно этого процесса.

#1845:  Author: Loopback PostPosted: Fri Jun 30, 2023 23:31
    —
Skif_off
В принципе, если стоит Autorun, то и искать ничего не нужно, т.к. он возвращает PID и хэндл окна текущего процесса, можно их сразу в скрипте использовать. Но насколько я понимаю, тут несколько другая задача, поскольку есть условие "последнее окно именно "своего" Тотала". Т.е. тут надо "помечать" окно тотала, в котором выполняется Autorun, запускающий это приложение, а при выходе проверять только помеченные окна.

#1846:  Author: Skif_off PostPosted: Sat Jul 01, 2023 19:51
    —
Loopback
Вполне допускаю, что понял неверно Smile, сейчас ещё раз перечитал с поста от 24го и теперь задача как будто выглядит так: проверять, что в памяти не осталось копий процессов TC, полное имя испоняемого файла которых то же, что и у родительского процесса скрипта.
Если так, то логичнее реализовать в скрипте, вместо автозавершения скрипта в AutorunFinalizeSection.

P.S. Интересно звучит задачка.

#1847:  Author: LonerDLocation: Макеевка PostPosted: Sat Jul 01, 2023 23:41
    —
Другими словами немного подробней.
Есть мой Тотал, настроенный. В Autorun прописан запуск программы, она запускается и работает в фоне. Я могу запускать несколько копий моего Тотала и закрывать их. Всё это время программа должна быть запущена. Когда я закрою последнюю копию моего Тотала - программа должна выгрузиться.
В то же время параллельно я могу запускать чистый Тотал или чужие сборки. Они никак не должны влиять на запуск и закрытие программы.

PS. В моём случае нужная "программа" - это скомпилированный скрипт. Задача на таком уровне решаемая - запоминать или записывать в отдельный файл все PID запускаемого процесса ТС и время от времени опрашивать их. Если все PID выгружены - то выгружается и программа-скрипт.
Но пока не стал усложнять и сделал просто - программа работает до тех пор, пока запущено хоть одно окно любого ТС. Laughing

#1848:  Author: Skif_off PostPosted: Mon Jul 03, 2023 20:52
    —
LonerD wrote:
... мой Тотал ... несколько копий моего Тотала ...

Т.е. "мой" лежит в конкретной папке, любой не-"мой" - в любом другом каталоге?
LonerD wrote:
запоминать или записывать в отдельный файл все PID запускаемого процесса ТС и время от времени опрашивать их. Если все PID выгружены - то выгружается и программа-скрипт.

Как-то всё вместе не очень понятно звучит Smile, скрипт сам запускает все другие копии ТС или он для другого? Если второе, то получать и хранить список PID как-то расточительно, на AutoIt добавил бы в скрипт что-то типа такого:
Code:
#NoTrayIcon

#include "WinAPIEx.au3"

; Регистрируем функцию проверки процессов
AdlibRegister("CheckProc", 3000)

Local $sTCExe = _WinAPI_GetProcessFileName($CmdLine[1])
Local $sTCPath = StringRegExpReplace($sTCExe, "\\[^\\]+$", "\\")
Local $iTCNameLen = StringLen($sTCPath)

; Тут собственно скрипт

Func CheckProc()
    AdlibUnRegister("CheckProc")
    Local $sTmp
    Local $iCount = 0
    Local $aProcList = ProcessList()
    For $i = 1 To $aProcList[0][0]
        If StringMid($aProcList[$i][1], 1, 8) = "TOTALCMD" Then
            $sTmp = _WinAPI_GetProcessFileName($aProcList[$i][0])
            If StringMid($sTmp, 1, $iTCNameLen) = $sTCPath Then
                $iCount += 1
                ExitLoop
            EndIf
        EndIf
    Next
    If $iCount = 0 Then Exit
EndFunc

$CmdLine[1] - PID родительского ТС, получаем от Autorun и используем для получения каталога TC из полного имени исполняемого файла, раз в 3 секунды перебираем PID'ы, смотрим, где лежат исполняемые файлы и сравниваем.
Если скрипт что-то пишет, то Exit, наверное, стоит заменить на переменную и обрабатывать ее в основном теле скрипта.
ProcessList() можно запускать с параметром и она сама отфильтрует по имени процесса, выйдет покороче, но процессов может быть два, "TOTALCMD.EXE" и "TOTALCMD64.EXE", поэтому только перебор всех.
Есть ещё вариант получить список всех окон, отфильтрованный по "TTOTAL_CMD", но некоторые инструменты можно запускать отдельным процессом...

#1849:  Author: LonerDLocation: Макеевка PostPosted: Fri Jul 14, 2023 02:15
    —
Время от времени стали возникать непонятные проблемы (может они и раньше возникали, просто Тоталом менее активно пользовался).

В autorun.cfg прописаны переменные окружения. Например,
SetEnv /A /EV PATH ;%commander_path%\System
SetEnv /EV TCFS %commander_path%\Plugins\exe\TCFS2\TCFS2.exe
и прочие.

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

#1850:  Author: Loopback PostPosted: Sun Jul 16, 2023 23:10
    —
LonerD wrote:
Или плагин Autorun выгружается? (по какой причине это может происходить? командой выгрузки плагинов не пользуюсь). Или работа назначенных при запуске переменных не зависит от него?

Да, переменные окружения после создания не зависят от состояния запуска Autorun.

Больше добавить ничего не могу, не сталкивался с таким. Если при возникновении проблемы посмотреть переменные плагином EnvVariables, их содержимое выглядит нормально?

#1851:  Author: LonerDLocation: Макеевка PostPosted: Sun Jul 16, 2023 23:42
    —
Loopback wrote:
Если при возникновении проблемы посмотреть переменные плагином EnvVariables, их содержимое выглядит нормально?

Я несколько раз быстренько перезапускал Тотал, а потом только вспоминал, что забыл посмотреть список переменных. Rolling Eyes

#1852:  Author: LonerDLocation: Макеевка PostPosted: Fri Jul 28, 2023 23:18
    —
Опять отвалились переменные на ровном месте.

В плагине Autorun прописано так:
Code:
SetEnv /A /EV PATH ;%commander_path%
SetEnv /A /EV PATH ;%commander_path%\System


В %commander_path%\System лежит файл Hidcon.exe для скрытия консольных окон. И есть несколько пользовательских команд, начинающихся с конструкции:
cmd=Hidcon.exe %comspec% /c

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

Заметил ошибки в моей записи.
1. Для чего у меня было /EV - не знаю.
2. Точку с запятой правильнее ставить в конце пути, иначе в тексте переменной получится ;;
Правильно будет вот так:
Code:
SetEnv /A PATH %commander_path%;
SetEnv /A PATH %commander_path%\System;


-----------------------
Но выявил и другую проблему, которая касается непосредственно плагина.
Время от времени перезапускаю Тотал. Не закрываю, а перезапускаю утилитой Tinny TC Restarter. Оказывается, в конце переменной PATH накапливаются записи вида
Code:
;D:\TCDL;D:\TCDL\System;D:\TCDL;D:\TCDL\System;D:\TCDL;D:\TCDL\System;D:\TCDL;D:\TCDL\System;

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

По справке:
При использовании опции /A плагин проверяет наличие добавляемого текста в конце значения переменной и не добавляет его повторно.
На деле это почему-то не работает.

Windows 11 x64, TC 11 RC3, Autorun 2.2.10 beta.
Попробовал более ранние версии Autorun - поведение то же самое.

#1853:  Author: Loopback PostPosted: Sat Jul 29, 2023 22:25
    —
LonerD wrote:
Запускаю последовательно несколько команд, потом оп - через пару секунд следующая уже не запускается. Посмотрел плагином EnvVariables - добавленные значения в переменной PATH пропали. Перезапустил Тотал, попробовал снова, воспроизвести пропадание не удалось.

Интересно, получается, что пропадают добавленные записи в PATH. В принципе, PATH достаточно критичная переменная, может это работа антивируса какого?

LonerD wrote:
1. Для чего у меня было /EV - не знаю.

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

LonerD wrote:
2. Точку с запятой правильнее ставить в конце пути, иначе в тексте переменной получится ;;

А это зависит от конкретной системы, что туда записано. У меня в конце PATH нет точки с запятой. В принципе, в случае сомнений правильнее проверять наличие ; в конце исходной переменной перед дозаписью.

LonerD wrote:
Оказывается, в конце переменной PATH накапливаются записи вида

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

Code:
SetEnv /A PATH %commander_path%;%commander_path%\System;


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

LonerD wrote:
Может, Windows время от времени запускает внутреннюю проверку состояния системы, обнаруживает это непотребство и удаляет подозрительные записи.

Содержимое переменной PATH, с которой оперирует процесс тотала - унаследованное, т.е. изменение системного PATH после запуска TC уже не повлияет на PATH процесса тотала. Ну вроде так всегда раньше было, может что-то в 11 поменялось...

#1854:  Author: LonerDLocation: Макеевка PostPosted: Sat Aug 05, 2023 21:22
    —
Loopback wrote:
Т.е. чтобы всё сработало, надо устанавливать весь текст одной командой:

Code:
SetEnv /A PATH %commander_path%;%commander_path%\System;

Теперь всё отлично, лишние записи не появляются.

#1855:  Author: yozhikLocation: Электросталь PostPosted: Mon Aug 07, 2023 02:32
    —
Вот такой вариант окошка копирования F5/F6 в TC 11.00 на Win 10:


 И его код:

Это при шрифте для диалогов Segoe UI, 9.
Loopback
В коде, в 64-битной части есть пара строк:
Code:
AddControl                "Button" 0  ""

Без них отказывались работать строки с Button 1, вот такие:
Code:
AddControl /X:-5  /W:5  "Button" 1  "" #MD5

Точнее, вначале когда я написал строку с Button 1, она не работала. Потом стал экспериментировать, проверять где какие instance, и при добавлении Button 0 вдруг заработала Button 1. Потом, после того, как весь код был готов, Button 1 вроде заработала и без Button 0. Но я уж не стал ничего трогать, оставил нули на всякий пожарный. Как думаете, почему такое поведение? Я сам ума не приложу.

#1856:  Author: Loopback PostPosted: Mon Aug 07, 2023 23:20
    —
yozhik
Трудно сказать. Нулевой экземпляр не имеет смысла, т.к. нумерация начинается с 1, для него никогда не будет найден хэндл контрола и следовательно, не будет производиться никаких действий. А вот почему сначала не работало - в прошлом году мы уже сталкивались с каким-то странным несовпадением экземпляров в x64, возможно это что-то из той же оперы.

#1857:  Author: yozhikLocation: Электросталь PostPosted: Mon Aug 07, 2023 23:57
    —
Сегодня повторилось с двумя другими диалогами. В одном код «промахивался» мимо экземпляров, пока не подставил вызов нулевого — сразу заработало. А во втором случае уже в настроенном (вчера) диалоге перестал отображаться назначенный кнопке текст (я вместо «Справка» назначил «?»). Вписал в код вызов нулевого — всё встало на места.

Скажите, пожалуйста, а не трудоёмко ли будет добавить в AddControl возможность вместо текста назначать иконку? Например, как-то так:
Code:
AddControl /W:-40 "TButton" 3 %ICON%,8

В переменной адрес к *.dll, и после запятой номер иконки в наборе. Я сегодня дооолго искал хоть какой подходящий символ для кнопки «Дерево». Не нашёл, нету. А так бы что-нибудь такое поставил , очень было бы удобно.

#1858:  Author: Loopback PostPosted: Tue Aug 08, 2023 23:22
    —
yozhik wrote:
Вписал в код вызов нулевого — всё встало на места.

Я так понимаю, это только в x64? Такое впечатление, что что-то не инициализируется без предварительного холостого прогона, но что именно, неясно. Посмотрел наиболее очевидные места, проблем не увидел. Хорошо бы, конечно, выделить минимальный код, при котором проблема повторяется...

yozhik wrote:
а не трудоёмко ли будет добавить в AddControl возможность вместо текста назначать иконку?

Без сложностей иконку можно поставить только на стандартные кнопки и static-контролы. Наследники static в формах TC не используются, остаются только кнопки. В их основе стандартный button, но это же delphi/lazarus, как они себя поведут, без тестов непонятно. Если нормально, то должно быть не слишком сложно.

#1859:  Author: yozhikLocation: Электросталь PostPosted: Wed Aug 09, 2023 01:46
    —
Loopback wrote:
Я так понимаю, это только в x64?

Нет-с. И в 32-битном тоже.
Loopback wrote:
выделить минимальный код, при котором проблема повторяется...

Вот к счастью у меня сразу воспроизвелось. Уточним: Тотал 11.00 32/64, Windows 10 21H2 64bit. Запускаю 32-битный TC:

Я прошу прощения, давайте я вам откопирую всё, что для ModifyDialogs наваял (в следующем посте сообразил и сделал краткий код как вы просили). Я себе плохо представляю механизмы всей этой кухни, а вдруг там что-то ещё влияет. Но у меня всё прокомментировано, так что вам будет удобно найти нужный отрывок. Сейчас у меня все нулевые вызовы закомментированы. При первом же запуске артефакт проявляется в 2х диалогах: распаковки и атрибутов (на скринах). После раскомментирования нулевых начинает отображаться «?», как и задумано.
 Изменённые диалоги

Loopback wrote:
Без сложностей иконку можно поставить только на стандартные кнопки и static-контролы.

Ну, и прекрасно, хватит за глаза. Давайте, пожалуйста, попробуем. Если получится, то я бы все «Справки» и «Деревья» под аккуратные контурные иконки «спрятал» Rolling Eyes, гораздо бы эргономичней вышло. Можно пока начать только с кнопок — на них иконки точно нужны. А вот пригодится ли это для static-контролов я пока не приглядывался.


Last edited by yozhik on Thu Aug 10, 2023 20:13; edited 1 time in total

#1860:  Author: lz57005 PostPosted: Wed Aug 09, 2023 22:29
    —
LonerD wrote:
Другими словами немного подробней.
Есть мой Тотал, настроенный. В Autorun прописан запуск программы, она запускается и работает в фоне. Я могу запускать несколько копий моего Тотала и закрывать их. Всё это время программа должна быть запущена. Когда я закрою последнюю копию моего Тотала - программа должна выгрузиться.
В то же время параллельно я могу запускать чистый Тотал или чужие сборки. Они никак не должны влиять на запуск и закрытие программы.

Очевидное решение использовать как признак запуска программы наличие/отсутствие PID c нужным ImagePath, а не именем процесса, а при закрытии проверять аналогично процессы с путём %commander_exe% и закрывать программу тоже не по имени, вот пример:

MultiTCruncloseExample.7z

Code:
autorun.cfg
...
ShellExec /SW_HIDE "%COMMANDER_PATH%\utils\StartDummy.bat"
...
Pragma AutorunFinalizeSection
...
ShellExec /SW_HIDE "%COMMANDER_PATH%\utils\StopDummy.bat"


cmd, nircmd, pathpid (самописная утилита которая выдаёт в stdout/stderr pid первого процесса с путём из параметра запуска)

Dummy.exe запустится только с первым экземпляром тотала и закроется с последним, имея ввиду только тоталы и запускаемую программу расположенные в конкретных папках, игнорируя иные экземпляры запущенные из других мест

#1861:  Author: yozhikLocation: Электросталь PostPosted: Thu Aug 10, 2023 20:07
    —
Loopback
Возвращаясь к нулевым вызовам. Сегодня смог сосредоточиться и сгенерил краткий код для воспроизведения. Окружение: Win 10 x64, TC 11.00 32/64. Подопытные: два диалога cm_PackFiles и cm_SetAttrib. Запускаем 32-битный TC.
Вот так ни у одной кнопки в диалогах не будет текста "B1":
Code:
# Диалог упаковки cm_PackFiles Alt+F5
AddDialog  "TDLGZIP"
AddControl "TButton" 1 "B1"

# Диалог атрибутов cm_SetAttrib
AddDialog "TATTRIBDLG"
AddControl "TButton" 1 "B1"

А вот так будет:
Code:
# Диалог упаковки cm_PackFiles Alt+F5
AddDialog  "TDLGZIP"
AddControl "TButton" 0 "B0"
AddControl "TButton" 1 "B1"

# Диалог атрибутов cm_SetAttrib
AddDialog "TATTRIBDLG"
AddControl "TButton" 0 "B0"
AddControl "TButton" 1 "B1"

#1862:  Author: Loopback PostPosted: Fri Aug 11, 2023 12:42
    —
yozhik
Да, спасибо, нашел и исправил. Не устанавливался текст для первого контрола каждого класса.

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

Code:

AddControl "TButton" 1 "" "%COMMANDER_PATH%\Totalcmd.exe,2"


Также пришлось добавить еще два опциональных переключателя:

/IT - позволяет отображать текст рядом со значком (по умолчанию, если задан непустой параметр с путем к значку, отображается только значок, имеющийся или задаваемый текст игнорируется).
/I:nn - размер значка (например /I:32, по умолчанию 16).

ModifyDialogs 2023-08-11

#1863:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 11, 2023 18:09
    —
Loopback
Спасибо!
В светлой теме с иконками красота и порядок:


А в тёмной не назначаются:

#1864:  Author: Loopback PostPosted: Fri Aug 11, 2023 22:44
    —
yozhik
Вот как всегда, то, что казалось простым, оказывается гораздо сложнее. Совершенно забыл про вселенское зло в виде тёмной темы и не проверил, иначе бы сразу выдал отрицательное заключение и даже не тратил бы время...

Похоже, в тёмной теме тотал сам управляет отрисовкой всех контролов. Метод установки значка, естественно, не работает. Вернее, он работает, но тотал его закрашивает. Попробовал сам отрисовать значок, бесполезно, при наведении на кнопку он опять закрашивается. Так что видимо увы. Делать сабклассинг или что-то такое, чтобы постоянно перерисовывать за тоталом значки - ну честно говоря перебор. И что теперь делать непонятно, оставлять половинчатое решение вроде как-то не очень.

#1865:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 11, 2023 23:19
    —
Loopback wrote:
половинчатое решение вроде как-то не очень

Учитывая, что тёмную тему используют немногие, решение получается не половинчатым, а 5/6-ым (или даже больше). Надо оставлять однозначно. Просто в справке оговорить. Оговорено же в справке, что некоторые контролы в 64-битной версии могут не «слушаться», и нормально, это не воспринимается половинчатым решением. Ну, вот и здесь то же самое. Сделать дополнительное условие и прописать для тёмной темы свою организацию контролов — невелик труд (для тех, кто вообще додумается до перерисовки диалогов).

Loopback wrote:
Попробовал сам отрисовать значок, бесполезно

Ой-ёй! Если б я знал, что так далеко зайдёт, дык и не заикался бы. Мне кажется, что это только у Гислера такой завал с тёмной темой. Вон в Everything изначально (без дополнительных усилий) всё шикарно работает и настраивается до мелочей без проблем и малейших нареканий.

#1866:  Author: lz57005 PostPosted: Fri Aug 11, 2023 23:29
    —
Loopback wrote:
yozhik

Похоже, в тёмной теме тотал сам управляет отрисовкой всех контролов.

Всё ещё хуже, судя по всему это частично хук/детур апи функций отрисовки, Гислер как и все распробовал недокументированные winapi которыми мягкие красили старые приложения, а потом понял что можно рисовать поверх, часть контролов перехвачена, часть отрисована поверх, поэтому даркмод нужно учитывать как отдельную сущность, происходящую после отрисовки контрола, попробуйте ловить сообщения после отрисовки

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

yozhik проблема в том что он решил её воспроизвести на 7ке, т.е. логика, майки начали даркмод в тихаря, все начали разбираться как на старое апи натянули рисовку и ключевой момент, Гислер решил рисовать сам, чтобы и на семерке и вообще переизобретя скины из Delphi, где контролы рисуются сверху стоковых

#1867:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 11, 2023 23:43
    —
lz57005 wrote:
даркмод нужно учитывать как отдельную сущность

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


Last edited by yozhik on Sat Aug 12, 2023 00:12; edited 1 time in total

#1868:  Author: lz57005 PostPosted: Fri Aug 11, 2023 23:47
    —
yozhik

По сути Гислер в очередной раз взял и изобрёл по своему существующее в данном случае https://www.delphistyles.com/vcl/index.html это, но криво и олдскульно в своём стиле, все эти скины по ссылке, у меня даже частично получилось применить к тоталу

Например так

https://ibb.co/TPpmtDp

#1869:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 11, 2023 23:52
    —
Loopback
Вот, кстати, только что пришло в голову, проверил и вроде получается вовсе неплохо. При записи следующего вида:
Code:
AddControl "TButton" 1 "?" "%WCMICONS%,56" #Help

в светлой теме отображается назначенный значок, а в тёмной назначенный текст. Вполне приемлемо.

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

lz57005 wrote:
взял и изобрёл

Наверное это потому, что у него x86 на Дельфи, а x64 на Лазарусе, чтоб работало и там, и сям. Получается как в скороговорке «Корабли лавировали, лавировали, да не вылавировали» Smile .

#1870:  Author: lz57005 PostPosted: Sat Aug 12, 2023 00:07
    —
yozhik именно, мне кажется любой кодер на паскале/лазаре/дельфи охренет с кода который пишется в одно лицо уже 30 лет, пусть и с комментами

#1871:  Author: Loopback PostPosted: Sat Aug 12, 2023 03:20
    —
Ну вроде бы что-то и получилось, хотя все-таки пришлось самостоятельно отрисовывать кнопку. Насколько это всё надежно надо тестировать.

Поскольку вариант значок+текст в данный момент весьма проблематичен, да и вообще как мне кажется, смысла в нём мало, уберу этот вариант и оставлю только значок. Тогда отдельный параметр для пути к значку будет не нужен, он будет задаваться вместо текста, а то, что его надо интерпретировать как путь к значку - переключателем /I:nn (он будет обязателен). Так оно и логичнее получится.

#1872:  Author: yozhikLocation: Электросталь PostPosted: Sat Aug 12, 2023 06:23
    —
Loopback wrote:
вроде бы что-то и получилось

Выглядит более чем убедительно. Смотрю на время публикации сообщения и испытываю дополнительное благоговение.
Loopback wrote:
надо тестировать

Мы уже готовы. Там, кажется, не так много комбинаций для проверки: помимо битности ещё только подстройка размеров под крупные шрифты. Плотность отличную от 96 dpi я только не смогу поглядеть, нет в округе доступных таких экранов, чтоб ещё и с Windows.
Loopback wrote:
значок+текст... смысла в нём мало

Смысла в нём ещё меньше из-за того, что мы кнопки то не свои создаём, а чужие переделываем. Особо не разгуляешься. Так что совершенно нечувствительная потеря.
Loopback wrote:
переключателем /I:nn (он будет обязателен)

Теоретически возможен был бы доп. вариант /I (без :nn) для 16px, как наиболее распространённого размера. Хотя я не знаю какие экраны сейчас более распространены, 4К или меньше. Тоталовская WCMICON2.DLL укомплектована 16, 24, 32 и 48px. Последнее, думаю, с прицелом на 4К... В общем, три символа после /I набрать совершенно не в лом.

#1873:  Author: Loopback PostPosted: Sun Aug 13, 2023 00:32
    —
ModifyDialogs 2023-08-12

Дополнительный параметр убран, теперь путь задается в том же параметре, что и текст, а что будет выводиться определяется наличием переключателя /I (также можно через двоеточие указать размер значка, по умолчанию 16). Метод вывода значка переключается в зависимости от включенной темы (берется из настроек TC, но нужно ещё проверять при значении ключа 1), цвета для отрисовки тоже читаются из конфигурации TC.


Кстати, ещё забыл выложить здесь исправленную версию Tweaks, после этого и этого багрепорта, а там вышло прилично изменений.

Tweaks 2023-06-24

- исправлена работа с переменными в командной записи
- исправлена работа с файлами UTF-16
- исправлен парсинг длинных строк в файлах *.bar
- снят лимит количества пунктов меню

#1874:  Author: yozhikLocation: Электросталь PostPosted: Sun Aug 13, 2023 01:10
    —
Loopback wrote:
ModifyDialogs 2023-08-12

404 по ссылке Sad

#1875:  Author: Loopback PostPosted: Sun Aug 13, 2023 01:33
    —
yozhik
Поправил...

#1876:  Author: yozhikLocation: Электросталь PostPosted: Sun Aug 13, 2023 02:22
    —
Loopback
Пока всё очень здорово. Спасибо от души. Работает гладко, кнопки как родные. Я переключался между битностями, менял подстройку диалогов в AutoSizeDialogs, менял размер шрифта для диалогов — всё прекрасно во всех сочетаниях. Завтра ещё погоняю на свежую голову, и отрапортую.

#1877:  Author: yozhikLocation: Электросталь PostPosted: Mon Aug 14, 2023 00:47
    —
Loopback
В общем, ко вчерашней рецензии мне нечего добавить: всё исправно работает. Сегодня пробовал менять значения /I (:16, :24, :32), выставлял разные размеры шрифта в диалогах (до 18pt), всё это в разных комбинациях битности, ключа AutoSizeDialogs, цветовых режимов, на Win 10 x64, Win 7 x64 и (даже, интереса ради) на Win XP SP3 x86 — везде кнопки ровные, аккуратные, работоспособные, иконки как влитые. Всё чётко получилось, спасибо от души.

#1878:  Author: Loopback PostPosted: Tue Aug 15, 2023 16:30
    —
yozhik
Ну что же, отлично раз так.

#1879:  Author: yozhikLocation: Электросталь PostPosted: Wed Aug 23, 2023 21:08
    —
Loopback
По плагину ModifyDialogs ещё момент. К диалогу копирования/перемещения (F5/F6) мы обращаемся особо: DIALOG_COPYMOVE(_POST|_PINNED). Но у этого диалога есть ещё одна итерация — cm_CreateShortcut, «Создать ярлык», Ctrl+Shift+F5. Стоит ли и для неё вводить особое название, или можно обойтись имеющимися средствами?

#1880:  Author: jentoso PostPosted: Wed Aug 23, 2023 21:27
    —
yozhik
Я же правильно понимаю, что Tweaks не различает сами функциональные кнопки на панели функциональных клавиш? http://forum.wincmd.ru/viewpost.php?p=135447

#1881:  Author: yozhikLocation: Электросталь PostPosted: Wed Aug 23, 2023 22:33
    —
jentoso
Tweaks то как раз различает:
Code:
ControlSetMouseAction /B:1 17
ControlSetMouseAction /B:2 17
...
ControlSetMouseAction /B:7 17

Другое дело, что Total их по отдельности легко не предоставляет: попробуйте ткните в эту область любым оконным «шпионом» (Spy++, WinSpy) — выделяется только панель целиком, а кнопки по отдельности фигвам. Но Tweaks этот барьер преодолел.

#1882:  Author: jentoso PostPosted: Wed Aug 23, 2023 22:53
    —
yozhik
Почему-то упорно пропускал в справке /B:<1..7>.
Сейчас почитал на форуме, как это все устроено и почему-то не работает.
Сделал просто для наглядности такую команду и тишина:
Code:
ControlSetMouseAction /M:U /B:1 17 ShowPopupMenu %COMMANDER_PATH%\Language\WCMD_RUS.MNU

#1883:  Author: yozhikLocation: Электросталь PostPosted: Thu Aug 24, 2023 06:07
    —
jentoso
У меня работает эта строка (TC 11cmb, Win 10x64). Может в переменной пробелы есть? Тогда менюху в кавычки:
Code:
ControlSetMouseAction /M:U /B:1 17 ShowPopupMenu "%COMMANDER_PATH%\Language\WCMD_RUS.MNU"

А вообще, если что не завелось, я для проверки работоспособности беру более простые ф-ции:
Code:
ControlSetMouseAction /M:U /B:1 17 MsgBox "TEST"

— у которых параметров минимум, это помогает локализовать проблему.

#1884:  Author: jentoso PostPosted: Thu Aug 24, 2023 09:22
    —
yozhik
В переменной пробелов нет, т.к. команда срабатывает на других областях окна ТС.
Попробовал отключать все другие вызовы в конфиге и тоже не помогло. Запустил ТС х64 и в нем все работает прекрасно. Запускаю ТС х32 и о чудо, все начало работать.

#1885:  Author: Loopback PostPosted: Thu Aug 24, 2023 12:58
    —
yozhik wrote:
или можно обойтись имеющимися средствами

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

#1886:  Author: jentoso PostPosted: Thu Aug 24, 2023 18:38
    —
ShowPopupMenu не отображается иконки, которые были самостоятельно добавлены WCMICONS.INC? Все стандартные иконки отображаются нормально.

#1887:  Author: Loopback PostPosted: Thu Aug 24, 2023 20:14
    —
jentoso
Должны отображаться, но тут может зависеть от конфигурации файлов/библиотек, возможно какой-то случай я не учел. Сейчас реализована такая логика:

Читается ключ конфигурации Buttonbar->DefaultLib. Если ключ есть, используется прописанная в нем пара dll/inc. Если ключ пустой или отсутствует, смотрим наличие пары wciconex.dll/wciconex.inc, т.к. они имеют приоритет. И уже если и их нет, используется значение по умолчанию wcmicons.dll/wcmicons.inc.

#1888:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Aug 24, 2023 20:15
    —
jentoso
А вы уверены, что правильно их добавили? В обычном главном меню дополнительные значки для этих команд отображаются? Библиотека используется та, где сделаны дополнения? Ну и см. выше пояснения по приоритетам.

#1889:  Author: jentoso PostPosted: Thu Aug 24, 2023 20:57
    —
Loopback
У меня используется
WCMICONFLAT.dll
WCMICONFLAT.INC
DefaultLib=WCMICONFLAT

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

P.S. Да и стандартные иконки не все показываются.

#1890:  Author: Loopback PostPosted: Thu Aug 24, 2023 22:19
    —
jentoso
Хорошо бы образец файлов и пару команд, которые не отображаются. Можно в личку.

Да, и еще: загружается mnu или bar? И версия вот эта?

#1891:  Author: jentoso PostPosted: Thu Aug 24, 2023 22:44
    —
Loopback
Да, версия по данной ссылке.

Пока тестирую на данной команде.
Code:
ControlSetMouseAction /M:U /B:1 17 ShowPopupMenu /A:16 %COMMANDER_PATH%\Language\HINTS.MNU


Само содержание MNU примерно такое
Code:
MENUITEM "Переименовать\tF2  ", em_hotkey
MENUITEM "Создать файл/папку\tF7  ", em_hotkey
MENUITEM SEPARATOR
MENUITEM "Настройки\tA+P  ", em_hotkey
MENUITEM "Поиск\tA+F  ", em_hotkey


Иконка одна для всех пунктов
В WCMICONFLAT.INC прописана 10000=277

#1892:  Author: Loopback PostPosted: Thu Aug 24, 2023 23:54
    —
jentoso
А, вот в чем дело. Вообще-то .inc файл предназначен для маппинга значков внутренних команд для главного меню, поэтому плагин читает индексы из .inc только для cm-команд. Для em-команд значок должен прописываться в usercmd.ini (или Wcmd_XXX.ini), откуда их плагин и читает.

Прописывание в .inc <10000+индекс em-команды в меню>, если я правильно помню, недокументированная возможность. Да, она добавит значок в главное меню, но не ассоциирует его с em-командой. Добавление такой em-команды на панель инструментов не поставит правильный значок автоматически. Я бы сказал, что это не совсем корректное использование пользовательских команд.

#1893:  Author: jentoso PostPosted: Fri Aug 25, 2023 00:05
    —
Loopback
Теперь понято в чем дело. Можно и без иконки в таком случае обойтись.

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

#1894:  Author: Loopback PostPosted: Fri Aug 25, 2023 00:27
    —
jentoso
Не знаю, нужны конкретные файлы, набором. Может парсер где-то неверно отрабатывает. Может значок не читается.

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

#1895:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 25, 2023 06:31
    —
Loopback
Кажется я отловил баг (только пока не понял где именно: у вас в коде или у себя в голове).
Следующим тестовым примером я хочу добиться, чтобы у меня:
  1. При вызове диалога копирования F5 на кнопках отображалось A2, A3, A4.
  2. При вызове диалога копирования F5 с пришпиленной доп-панелькой на кнопках отображалось A2P, A3P, A4P.
  3. При вызове диалога создания ярлыка CS+F5 на кнопках отображалось B2, B3, B4.
  4. При вызове диалога создания ярлыка CS+F5 с пришпиленной доп-панелькой на кнопках отображалось B2P, B3P, B4P.
 Тестовый пример

Но вместо желаемо-ожидаемого у меня A2..., A2P..., B2... отображаются, а B2P ни в какую. Обратите, пожалуйста, внимание на закомментированный AddCondition после DIALOG_COPYMOVE_PINNED: он не действует, что с ним, что без него, результат тот же.

Сейчас получается, что DIALOG_COPYMOVE_PINNED работает только в паре с DIALOG_COPYMOVE. Т.е. вот такая запись работает, отображается и A3, и A3P:
Code:
AddDialog DIALOG_COPYMOVE
AddControl "TButton" 3 "A3"
AddDialog DIALOG_COPYMOVE_PINNED
AddControl "TButton" 3 "A3P"

А вот такая запись не работает, A3P не отображается:
Code:
AddDialog DIALOG_COPYMOVE_PINNED
AddControl "TButton" 3 "A3P"


Добавлено:
Хм... А в 64-бит у меня DIALOG_COPYMOVE_PINNED вообще перестал работать. Ну, ладно, вначале с 32-бит бы разобраться.

#1896:  Author: jentoso PostPosted: Fri Aug 25, 2023 10:28
    —
Loopback
Вот как отображается у меня


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

#1897:  Author: Loopback PostPosted: Fri Aug 25, 2023 13:01
    —
yozhik wrote:
При вызове диалога создания ярлыка CS+F5 на кнопках отображалось B2, B3, B4.

Мы же отфильтровали диалог копирования, так что для этого диалога надо делать отдельный обработчик с помощью AddDialog.

yozhik wrote:
При вызове диалога создания ярлыка CS+F5 с пришпиленной доп-панелькой на кнопках отображалось B2P, B3P, B4P.

Исключение для панельки реализовано только для диалога копирования...

Кстати, тут обнаружился интересный баг тотала: если диалог копирования стартует раскрытым (ключ ShowCopyOptions=1), то при открытии диалога создания ярлыка отсутствует кнопка "Опции".


yozhik wrote:
Сейчас получается, что DIALOG_COPYMOVE_PINNED работает только в паре с DIALOG_COPYMOVE.

Всё верно, pinned и post зависимые, DIALOG_COPYMOVE всё равно должен быть объявлен. Фильтры для pinned и post не работают, фильтрация определяется настройками основного диалога (поскольку фактически для всех трех вариантов это остается один и тот же диалог). Пожалуй, это и правда недостаточно документированный момент.

jentoso
Не, ну так, разумеется, не должно быть. Хотелось бы понять, в чем тут дело. Похоже до сих пор никто с такой проблемой не сталкивался.

#1898:  Author: jentoso PostPosted: Fri Aug 25, 2023 13:58
    —
Loopback
Оставил только плагин Autorun, чтобы исключить влияние других плагинов, но эффект с иконками не изменился.
Затем переименовал свой набор иконок WCMICONSFLAT.dll (WCMICONSFLAT.INC) в WCMICONS.dll (WCMICONS.INC), выбрал последний в качестве библиотеки по умолчанию и в итоге все иконки стали отображаться в PopupMenu, но за исключением пользовательских указанных в WCMICONS.INC.

#1899:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Aug 25, 2023 14:21
    —
jentoso
Неплохо для начала всё-таки однозначно понять, имеет ли проблема вообще отношение к плагину. Почитайте про порядок работы с библиотеками значков для меню в описании ключа DefaultLib здесь и оцените, всё ли правильно делаете и всё ли нормально отображается в главном меню БЕЗ плагина.
И поясните, пожалуйста, насчёт "пользовательских указанных в WCMICONS.INC". Пользовательские — это что? Связки с командами значков, добавленные пользователем для встроенных команд (cm_), НИЧЕМ не должны функционально отличаться в этом INC-файле от стандартных связок. Если данная библиотека вообще загружается, а не отвергается с использование вместо неё библиотеки по умолчанию.

Loopback
Добавление в INC-файлы связок em-команд со значками действительно не документировано, а на практике создаёт массу проблем. Начиная с того, что числовой идентификатор такой команде присваивается не статический, а по факту динамический, зависящий ТОЛЬКО от порядкового номера данной пользовательской команды среди прочих аналогичных команд данного MNU-файла. Сбить эти настройки проще простого.

#1900:  Author: jentoso PostPosted: Fri Aug 25, 2023 15:03
    —
Avada
По поводу иконок, правильнее будет сказано это иконки пользовательских команд в главном меню.
Иконки были присвоены для em-команд, чтобы ничего лишнего не происходило при их нажатии (просто памятки для горячих клавиш).
Учитывая, что с отображением всех стандартных иконок в Popupmenu разобрался, а связка в INC-файлы em-команд со значками не документировано и создаем массу проблем, наверно стоит на этом и завершить.

#1901:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 25, 2023 16:19
    —
Loopback wrote:
Мы же отфильтровали диалог копирования, так что для этого диалога надо делать отдельный обработчик с помощью AddDialog.

Верно. Я так и сделал в тестовом примере и оно благополучно работает: надписи B2, B3, B4 отображаются.
Loopback wrote:
Исключение для панельки реализовано только для диалога копирования...

А, теперь понятно. Это как раз у меня и вызвало когнитивный диссонанс (баг в моей голове, как я выразился). Беда то в том, что при введении отдельного обработчика для диалога ярлыков (ДЯ) он наследует настройки PINNED из предыдущего обработчика, т.е. из диалога копирования (ДК). В тестовом примере не только не отображаются B3P, B4P, но вместо них отображаются A3P, A4P — в этом казус (прошу пардону, видимо мне надо было это дословно отрапортовать, но я понадеялся, что вы мой тест у себя воспроизведёте). В реальном же окружении это приводит к тому, что если я настроил ДК, то мне ДЯ лучше вообще не трогать, ибо если я его трону, то он у меня в PINNED состоянии станет вот таким:


И никак евонный PINNED не исправить, единственный выход — это отказаться от настройки ДЯ.
Loopback wrote:
Кстати, тут обнаружился интересный баг тотала

Я его уже зарепортил, и Гислер его уже исправил. Обновитесь, пожалуйста, до TC 11.01RC1 Smile .
Loopback wrote:
Фильтры для pinned и post не работают, фильтрация определяется... Пожалуй, это и правда недостаточно документированный момент.

Вот, вот, очень хорошо было бы прояснить как именно в этом случае работает фильтрация для PINNED. Что определяет границы действия фильтра: следующий вызов AddDialog или вызов AddDialog без PINNED? И вообще не всякий случай очевиден. Вот например, в 64-бит в ДК кнопка «F2 В очередь» это Button 2, а в ДК PINNED она уже Button 7. Хорошо бы юзеру быть уверенным, что когда он настроил Кнопку 2 в одном состоянии диалога, эта настройка экстраполируется на Кнопку 7 в другом состоянии этого же диалога — само по себе это не очевидно.

Но вообще с этими PINNED хорошо бы разобраться. Из истории с вышеупомянутым багом видно, что ДК и ДЯ — взаимозависимы, по факту это вообще один и тот же диалог, только видимость некоторых элементов различается. Если я пришпилил ДК, а затем сразу же вызвал ДЯ, то у меня и ДЯ тоже отобразится пришпиленным. Такие вот дела.

Ну, и в 64-бит настройки для DIALOG_COPYMOVE_PINNED не работают. Кажется работали некоторое время назад. Кажется работали до того, как вы сделали отрисовку (такую замечательную) иконок для маврофильного режима. Точно я не уверен, но помню что я тогда по-всякому тестировал свой код для ДК и всё везде работало. Мне дополнительные тесты предпринимать или вы уже сами увидели?

#1902:  Author: Loopback PostPosted: Fri Aug 25, 2023 17:44
    —
jentoso
Ок, смог повторить на наборе из последней ссылки в этой теме. Буду смотреть.

yozhik wrote:
Беда то в том, что при введении отдельного обработчика для диалога ярлыков (ДЯ) он наследует настройки PINNED из предыдущего обработчика, т.е. из диалога копирования (ДК).

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

Код должен быть примерно такой:
Code:
AddDialog DIALOG_COPYMOVE
AddCondition /VISIBLE:1 "TButton" 1
AddControl "TButton" 2 "A2"
AddControl "TButton" 3 "A3"
AddControl "TButton" 4 "A4"
AddDialog DIALOG_COPYMOVE_PINNED
AddControl "TButton" 2 "A2P"
AddControl "TButton" 3 "A3P"
AddControl "TButton" 4 "A4P"

AddDialog "TInpComboDlg"
AddControl "TButton" 2 "B2"
AddControl "TButton" 3 "B3"
AddControl "TButton" 4 "B4"


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

Взять хотя бы историю с плавающими экземплярами в x64. Оказалось, что в момент, когда плагин выполняет работу и все контролы уже должны быть созданы (непосредственно перед отображением окна), оказалось, что скрытые контролы (те, которые под кнопкой Опции) еще не созданы! А создаются они с приличной задержкой (не менее 100мс) уже после отображения окна. Т.е. код плагина видит один набор контролов, а Au3Info - другой. Выглядит бредово, но вот так в лазарусе реализовано. И что тут можно сделать?

Так же и с прикрепленным диалогом. Ему потребовалась спецобработка, что уже плохо, но потом оно появилось и для ярлыков. И что теперь - делать еще одно исключение для диалога ярлыков?

yozhik wrote:
Но вообще с этими PINNED хорошо бы разобраться. Из истории с вышеупомянутым багом видно, что ДК и ДЯ — взаимозависимы, по факту это вообще один и тот же диалог, только видимость некоторых элементов различается. Если я пришпилил ДК, а затем сразу же вызвал ДЯ, то у меня и ДЯ тоже отобразится пришпиленным. Такие вот дела.

Хорошо бы, но пока я не знаю, как всё это нормально решить. Остается ждать озарения Very Happy

yozhik wrote:
Ну, и в 64-бит настройки для DIALOG_COPYMOVE_PINNED не работают.

Да вроде код из этого поста - работает нормально.

#1903:  Author: yozhikLocation: Электросталь PostPosted: Fri Aug 25, 2023 18:03
    —
Loopback wrote:
И что теперь - делать еще одно исключение для диалога ярлыков?

Нет, ничего не надо делать. Я попробую всё настроить стандартным путём AddDialog "TInpComboDlg" с перечислением фильтров и по результатам отчитаюсь. А потом уже будем ждать озарения Smile

Loopback wrote:
Да вроде код из этого поста - работает нормально.

Ух, он и у меня работает! Значит что-то там вмешивается и скорее всего этот «что-то» и есть ДЯ. Попозже проверю, сообщу.

#1904:  Author: Loopback PostPosted: Fri Aug 25, 2023 23:15
    —
jentoso
Оказался банальный копипаст-баг, вместо нужного имени сопутствующего .inc подставлялось "wcmicons.inc", в котором, разумеется, нет всех индексов.

Tweaks 2023-08-25

#1905:  Author: jentoso PostPosted: Fri Aug 25, 2023 23:26
    —
Loopback
Это изменение в части отображения иконки к пользовательским командам?
Я приводил к использованию WCMICONS.dll (WCMICONS.INC), но как уже выше выяснили, что связка в INC-файлы em-команд со значками проблематична.

#1906:  Author: Loopback PostPosted: Sat Aug 26, 2023 00:24
    —
jentoso
Это только фикс проблемы из этого поста.

#1907:  Author: yozhikLocation: Электросталь PostPosted: Tue Aug 29, 2023 01:40
    —
Loopback
ModifyDialogs в 64-битном TC в Dark Mode не могли бы посмотреть: текст кнопкам не назначается. Любой кнопке любой текст — не присваивается.

#1908:  Author: Loopback PostPosted: Tue Aug 29, 2023 14:14
    —
yozhik
Оказывается, это не работало и раньше. Аналогично выводу значка, замена текста в тёмной x64 не работает. Добавил отрисовку текста...

ModifyDialogs 2023-08-29

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

Да, и ещё интересное наблюдение: в x64 номера экземпляров контролов в тёмной и светлой теме, оказывается, тоже могут различаться Very Happy Красота просто.

#1909:  Author: yozhikLocation: Электросталь PostPosted: Tue Aug 29, 2023 18:22
    —
Loopback wrote:
Добавил

Спасибо большое, вечером буду пробовать.
Loopback wrote:
в x64 номера экземпляров контролов в тёмной и светлой теме, оказывается, тоже могут различаться

Добавлю: при AutoSize=0 да; при AutoSize=1 чехарды поменьше. Подождите, подождите, у меня на этот счёт уже целая отчётная простыня составлена с таблицами что/где/когда различается. Просто за последние двое суток не нашлось ни минуты чтобы это здесь аккуратно расписать...

#1910:  Author: yozhikLocation: Электросталь PostPosted: Wed Aug 30, 2023 23:40
    —
Loopback
Спасибо за исправления, при беглой проверке всё работает. Более внимательно пока не проверял.
———————————————
Итак, отчёт о проделанных исследованиях, как обещал. Пришлось задуматься над методикой составления конфигурации, чтобы в будущем не тратить на неё много времени. Конспектируем опыт.

Основные сложности:
  1. Задержка в x64 при создании элементов окна, из-за которой плагин видит одно, а мы — другое. Подробнее здесь.
  2. Изменения TC от версии к версии, из-за которых предыдущие конфиги становятся неработоспособными (частично).
  3. В актуальном TC (11.01) умножились различия в наборах элементов окон в зависимости от настроек ini.
  4. Некоторые диалоги при едином классе (имени) имеют несколько итераций: метился в одну, а «рикошетом» задело другую. Во избежание сего необходимо подбирать доп. фильтры, на определение которых также влияют перечисленные выше сложности.

Яркий представитель 4й сложности — диалог TINPCOMBODLG, где под одним именем выступают 7 итераций:
  1. Диалог F5/F6 (копирования/перемещения). Его особая переменная в плагине: DIALOG_COPYMOVE.
  2. Диалог F5/F6 сразу после раскрытия панельки Опции. Переменная в плагине: DIALOG_COPYMOVE_POST.
  3. Диалог F5/F6 с прикреплённой панелькой Опции. Переменная в плагине: DIALOG_COPYMOVE_PINNED.
  4. Диалог CS+F5 (создания ярлыка). Его затрагивает DIALOG_COPYMOVE.
  5. Диалог CS+F5 сразу после раскрытия панельки Опции. Его затрагивает DIALOG_COPYMOVE_POST.
  6. Диалог CS+F5 с прикреплённой панелькой Опции. Его затрагивает DIALOG_COPYMOVE_PINNED.
  7. Диалог закачки/загрузки между обычной панелью и панелью WFX-плагинов (например, виртуальной папки VirtualPanel).

Начнём с диалогов x64, поскольку с ними больше всего неразберихи. Чтобы преодолеть 1ю сложность, поручим плагину самому показать нам, что он «видит». Составляем тестовый конфиг, переименовываем все кнопки:
Code:
AddDialog "TINPCOMBODLG"
AddControl "Button" 1 "B1"
AddControl "Button" 2 "B2"
AddControl "Button" 3 "B3"
AddControl "Button" 4 "B4"
AddControl "Button" 5 "B5"
AddControl "Button" 6 "B6"
AddControl "Button" 7 "B7"
AddControl "Button" 8 "B8"
AddControl "Button" 9 "B9"
AddControl "Button" 10 "B10"
AddControl "Button" 11 "B11"
AddControl "Button" 12 "B12"
AddControl "Button" 13 "B13"


Перезапускаемся, вызываем CS+F5, видим:


Запускаем оконный сканер (например, Spy++), смотрим на структуру:


По новым именам отчётливо определяются те элементы, которые «увидел» плагин — у них статус EXISTS:1 (существует). Некоторые из них с притушенными значками (слева от Window) — у них статус VISIBLE:0 (невидимые). Полученные данные записываем в столбик. Повторяем для каждой итерации. Объединяем столбики в таблицу:
Code:

┌─────────┬─────────┬─────────┬─────────┬─────────┐
│ C       │ CP      │ L       │ LP      │ UL/DL   │
├─────────┼─────────┼─────────┼─────────┼─────────┤
│ B1  EV  │ B1  EV  │ B1  EV  │ B1  EV  │ B1  E   │
│ B2  EV  │ B2  EV  │ B2  E   │ B2  EV  │ B2      │
│ B3  EV  │ B3  EV  │ B3      │ B3  EV  │ B3  EV  │
│ B4      │ B4  EV  │ B4  E   │ B4  EV  │ B4  EV  │
│ B5  EV  │ B5  EV  │ B5  EV  │ B5  EV  │ B5  E   │
│ B6  EV  │ B6  EV  │ B6  EV  │ B6  EV  │ B6  EV  │
│ B7  EV  │ B7  EV  │ B7  EV  │ B7  E   │ B7      │
│ B8  EV  │ B8  EV  │ B8      │ B8      │ B8      │
│ B9      │ B9      │ B9      │ B9  E   │ B9      │
│ B10     │ B10 EV  │ B10     │ B10 EV  │ B10     │
│ B11     │ B11 EV  │ B11     │ B11 EV  │ B11     │
│ B12     │ B12 EV  │ B12     │ B12 EV  │ B12     │
│ B13     │ B13 EV  │ B13     │ B13     │ B13     │
└─────────┴─────────┴─────────┴─────────┴─────────┘

У меня 5 столбиков, потому что итерации _POST меня не интересовали, я их не трогал. C = Copy, CP = Copy Pinned, L = Link, LP = Link Pinned, UL/DL = Upload/Download, E = Exists, V = Visible. Благодаря таблице отчётливо видим, что единственная возможность отфильтровать диалог F5/F6 от др. итераций — это кнопка 8. Удаляем тестовый конфиг — он отработал и больше не нужен. Составляем конфиг для диалога F5/F6:
Code:
AddDialog DIALOG_COPYMOVE
AddCondition /VISIBLE:1   "Button" 8
# здесь настраиваем элементы диалога
AddDialog DIALOG_COPYMOVE_PINNED
# здесь настраиваем элементы диалога с прикреплённой панелькой Опции

На этом описание заканчиваю, чтобы не многословить.
Не все итерации «подчинились» DIALOG_COPYMOVE_PINNED — к ним пришлось обращаться по-иному. Для некоторых итераций пришлось составлять отдельные конфиги с учётом настроек ini. Кому эти детали интересны, смотрите в разворачивающихся блоках.

 Таблицы всех итераций

 Фильтры для итераций по результатам данных из таблиц


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

Учитывая 1ю сложность, тестовый конфиг можно использовать также для наглядного определения элементов. Делаем снимок диалога, применяем тестовый конфиг, снова делаем снимок диалога, открываем их — всё как на ладони:

#1911:  Author: Loopback PostPosted: Thu Aug 31, 2023 13:58
    —
Фундаментально!

К списку сложностей добавлю еще наличие/появление графических элементов, таких как "кнопки" +F7/+F8, которые вообще не поддаются модификации.

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

yozhik wrote:
тестовый конфиг можно использовать также для наглядного определения элементов

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

#1912:  Author: jentoso PostPosted: Sat Sep 02, 2023 22:18
    —
В справке Autorun указано, что по умолчанию Autorun не запускается, если TC выполняется как отдельный процесс для поиска/просмотра/и т.д, но можно изменить это поведение с помощью директивы Pragma AutorunLoadInSubprocess.
Я заметил, что при завершении работы TC, в памяти мог остаться процесс TC. Поиском и перебором определил, что процесс не завершается из-за Autorun. К примеру при открытии диалога поиска файлов отдельным процессом или запуска Lister без открытия основного окна TC (/S=L), процесс остается в памяти.
Получается что Autorun запускается, если TC выполняется отдельным процессом? Но почему-то после добавления вышеуказанной директивы, процессы стали завершаться и не остаются висеть в памяти.

#1913:  Author: Loopback PostPosted: Sun Sep 03, 2023 21:43
    —
jentoso
В справке не совсем точная формулировка, конечно же он запускается (по-другому и быть не может), но не выполняет скрипт, если запущен в отдельном процессе. Определяется это по наличию /S= в командной строке.

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

#1914:  Author: jentoso PostPosted: Sun Sep 03, 2023 23:09
    —
Loopback
Расширение конфига aucfg на это никак не влияет?
Сам конфиг так выглядит
 Hidden text

#1915:  Author: yozhikLocation: Электросталь PostPosted: Sun Sep 03, 2023 23:39
    —
Loopback
Чтой-то MsgBox в 64-битах перестал работать. Может в TC 11.01 что-то изменилось? Раньше работал, в TC 10 x64 точно помню что работал. В 32-битах работает. В 64-битах в тёмной теме даже видно, как он мелькает во время запуска и сразу пропадает. Проверял «чистым» скриптом, никаких записей, только один MsgBox.

#1916:  Author: Loopback PostPosted: Mon Sep 04, 2023 12:52
    —
jentoso
Расширение не влияет.

Попробовал подключить конфиг, две строки пришлось закомментировать:
#LoadLibrary Plugins\tctitle.dll - какой-то плагин? Я про него не знаю.
#LoadFont /N Font\InconsolataCyr.ttf

Повторить не смог. TC 11.01, версии плагинов и субплагинов последние, которые выкладывались.

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

#1917:  Author: yozhikLocation: Электросталь PostPosted: Mon Sep 04, 2023 13:46
    —
Loopback
Ага, я хорошо помню это место в справке. В памяти также отложилось, что он вроде работал когда-то, поэтому я и сигнализировал. Конечно, добро если причина станет ясна и на это ещё и не уйдёт много времени. Но в целом, может и не стоит вообще его тратить, время. MsgBox очень удобен в отладке. Но не единственен, можно и ShellExec к этому делу приспособить, она в 64 битах стабильно работает:
Code:
ShellExec %COMSPEC% "/K echo.Отладка, шаг 1"

#1918:  Author: jentoso PostPosted: Mon Sep 04, 2023 18:52
    —
Loopback
Конфиг я тоже комментировал, даже пустой файл подсовывал, но TC оставался в памяти.

Quote:
Расширение не влияет.

А вот здесь и произошла магия в моем случае. Переименовал autorun.aucfg в autorun.cfg, TC перестал оставаться в памяти.

P.S. Наверно какой-то частный случай. Версия Autorun 2.2.8 (MD5: E0A847AF58C256B0EB94E81906222AF7)

#1919:  Author: Loopback PostPosted: Mon Sep 04, 2023 20:30
    —
jentoso wrote:
Версия Autorun 2.2.8

Вообще-то актуальная версия 2.2.10, и там было немало исправлений. Например, такое:

- исправлено падение при использовании функций ТК в отдельных процессах

"Падение" на некоторых системах вполне может выражаться как зависание в памяти.

#1920:  Author: jentoso PostPosted: Mon Sep 04, 2023 20:53
    —
Loopback
Я почему-то был уверен, что 2.2.8 последняя, а то что скоро уже буде год 2.2.10 проглядел.
P.S. Может надо на первый пост вынести ссылку с примечанием, что то последняя версия (beta).

#1921:  Author: lz57005 PostPosted: Fri Sep 29, 2023 11:18
    —
Возможно странный запрос, но тем не менее есть различный софт который использует COM dll для, например, интеграции в контекстное меню проводника. Кончено же хотелось бы иметь подобное в портативном виде. В начале я подумал что можно просто делать регистрацию через regsvr32 при запуске тс и разрегистрировать в конце, но это требует админ прав. Нашёл альтернативный regsrv32.exe который делает тоже самое, но под текущим пользователем без прав админа. Однако хотелось бы чтобы расширения были доступны только из контекстного меню вызываемого тс, а не по всей системе. Беглый гугл по запросу "load com dll without registration" говорит что возможно подобную либу подгрузить процессу без регистрации, но моих навыков недостаточно для подобного, вот и вопрос реально ли это?

#1922:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Sep 29, 2023 17:56
    —
А какое отношение это имеет к текущей теме?

#1923:  Author: lz57005 PostPosted: Fri Sep 29, 2023 19:01
    —
Autorun загружается в память тотала и перехватывает различные функции, я предположил что находясь в памяти процесса вполне себе можно или хукнуть вызов контекстного меню проводника при пкм, или непосредственно реализовать подгрузку com dll, считайте это запросом на новую фичу у плагина. К тому же "Загрузка dll" одна из заявленных функций плагина.

#1924:  Author: Loopback PostPosted: Sat Sep 30, 2023 13:19
    —
lz57005
Увы, я тоже не имею существенного опыта работы с COM.

Загружать dll и создавать объекты без регистрации точно можно, например, в Autoit такая возможность есть, хотя и в экспериментальном статусе. Вот только не факт что это поможет. Насколько я понял при беглом ознакомлении с работой расширений, они требуют прописывания в реестре как обработчика. И как правило в HKLM, так что тут без админа все равно не обойтись.

По идее, для тех расширений, которым достаточно ветки HCU, обработчик можно прописать в реестр вручную, зная его CLSID. Т.е. теоретически это можно сделать с помощью простого RegWrite. А при выходе удалить. Это только идея, будет ли такое работать не проверял.

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

#1925:  Author: lz57005 PostPosted: Wed Jan 31, 2024 17:45
    —
Loopback
Подскажите, решил использовать плагин не как псевдо-wdx, а как обычную dll через патч таблицы импорта totalcmd.exe, понимаю что кроме меня вряд ли подобным многие маются, но тем не менее так я не завишу от цветовых схем и можно успеть изменить wincmd.ini до того как программа его прочтёт.

Если запуск autorun я пофиксил самописной prepare.dll которая назначает переменные среды COMANDER_PATH etc (т.к. процесс этого не успевает и autorun.cfg где эти переменные естественно фигурируют функционирует не корректно). Но я не знаю что сделать с директивой

Pragma AutorunFinalizeSection

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

Соответственно просьба/вопрос
Можно ли продублировать действие в момент OnProcessDetach (что-то типо если PluginUnload не выполнялась, то выполнить сейчас) или добавить директиву Pragma AutorunUnload? Или как мне самому можно это пофиксить самописной dll которая будет провоцировать выполнение AutorunFinalizeSection при выгрузке?

#1926:  Author: Loopback PostPosted: Wed Jan 31, 2024 22:21
    —
lz57005 wrote:
через патч таблицы импорта totalcmd.exe

И как тотал реагирует на такую модификацию? В нем же вроде защита присутствует.

lz57005 wrote:
я думал она выполняется в момент выгрузки плагина как обычной dll, на условное событие OnProcessDetach

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

#1927:  Author: lz57005 PostPosted: Wed Jan 31, 2024 22:54
    —
Loopback wrote:
И как тотал реагирует на такую модификацию? В нем же вроде защита присутствует.

Конечно присутствует, но на что не пойдёшь ради экспериментов Wink
Loopback wrote:
Так и есть, остановка по DLL_PROCESS_DETACH, по крайней мере в последних версиях. Пробовал когда-то делать выгрузку в ContentPluginUnloading, но кажется там были какие-то проблемы, в итоге вернулся к этому методу.

Тогда что-то не так, плагин 2.2.10, конфиг условно:

LoadLibrary Plugins\Run\Prepare.dll
...
MsgBox "OnStart"
Pragma AutorunFinalizeSection
ShellExec "%COMMANDER_PATH%\Core\CloseTest.cmd"
MsgBox "OnClose"

в prepare.dll на DLL_PROCESS_DETACH свой вывод MessageBox
в CloseTest.cmd - echo в файл

при закрытии тотала, отрабатывает только MessageBox из prepare.dll.
а если использовать как обычно через wdx то всё ок.
запуск CloseTest.cmd,
Сообщение OnClose,
а потом сообщение от prepare.dll о выгрузке,
вот я и подумал что используется некий ContentPluginUnloading.

#1928:  Author: Loopback PostPosted: Thu Feb 01, 2024 00:43
    —
lz57005 wrote:
при закрытии тотала, отрабатывает только MessageBox из prepare.dll.

Это Autorun выгружает библиотеку prepare.dll. И раз он её выгружает, значит секция финализации к тому времени уже отработала, выгрузка библиотек идёт в последнюю очередь.

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

#1929:  Author: Orion9 PostPosted: Mon Feb 05, 2024 20:29
    —
Может быть не совсем в тему, но как изменить переменные окружения, создаваемые в autorun.cfg командой SetEnv, в ходе выполнения самого процесса Total Commander?

#1930:  Author: Loopback PostPosted: Tue Feb 06, 2024 23:03
    —
Orion9
Чтобы поменять переменную, нужно её менять в адресном пространстве тотала. Проще всего с помощью самого Autorun и TCFS2. Модифицированный пример из справки:

Quote:

LoadLibrary Plugins\Autorun_Tweaks.dll

# Функция, которая будет выполнена при получении сообщения
Func MyMessageFunc()
SetEnv ENV_NAME "Новый текст переменной"
EndFunc

# Привязываем функцию к сообщению, регистрируемому строкой "MyMessage"
SetMessageAction "MyMessage" MyMessageFunc


И вызываем функцию с помощью запуска TCFS2 с командой:

TCFS2.exe /ef "msg(regmsg(MyMessage), 0, 0)"

#1931:  Author: Orion9 PostPosted: Wed Feb 07, 2024 01:11
    —
Loopback
Спасибо! Я попробую.

#1932:  Author: Orion9 PostPosted: Wed Feb 07, 2024 20:02
    —
Проверил. Все работает гладенько Smile Классный плуг вы сделали, очень продвинутый. Еще раз спасибо!

P.S. Не могли бы вы раскрыть пример, как правильно зарегистрировать и принимать сообщения с параметрами? А то в справке об этом нету.

#1933:  Author: Loopback PostPosted: Thu Feb 08, 2024 23:29
    —
Orion9
Регистрация практически такая же, нужно только добавить переключатель /P, чтобы в дополнение к пользовательским параметрам команды (если они есть) добавлялись стандартные 4 параметра сообщения. Их формальные имена в функции могут быть произвольными, те что в примере просто соответствуют принятым в Winapi. Из них wParam и lParam могут задаваться пользователем при отправке сообщения. Могут быть только числами.

Вот простой пример, аналогичный тому что выше:

Code:

LoadLibrary Plugins\Autorun_Tweaks.dll

# Функция, которая будет выполнена при получении сообщения
Func MyMessageFunc(hWnd, uMsg, wParam, lParam)
  Local text
  Switch wParam
    Case 1
      text = "Первый вариант"
    Case 2
      text = "Второй вариант"
  EndSwitch 
 
  SetEnv ENV_NAME  %text%
EndFunc

# Привязываем функцию к сообщению, регистрируемому строкой "MyMessage", переключатель /P подразумевает, что функция MyMessageFunc должна иметь минимум четыре параметра.
SetMessageAction /P "MyMessage" MyMessageFunc


Теперь можно выполнить TCFS2 с командой, в которой передаем 1 или 2 в качестве параметра сообщения, в зависимости от них будут выполняться разные действия:

TCFS2.exe /ef "msg(regmsg(MyMessage), 1, 0)"
TCFS2.exe /ef "msg(regmsg(MyMessage), 2, 0)"

#1934:  Author: Orion9 PostPosted: Thu Feb 08, 2024 23:55
    —
Loopback
Очень полезная информация. Спасибо Smile

#1935:  Author: Orion9 PostPosted: Mon Mar 04, 2024 13:17
    —
Loopback
В плагине SysInfo есть функция GetWMIValue, которая считывает значение параметра WMI-класса в переменную.
Code:

GetWMIValue VAR "Name" "SELECT * FROM Win32_Processor"

А как считать несколько параметров в одном запросе? Сейчас такой возможности нет?

#1936:  Author: Loopback PostPosted: Mon Mar 04, 2024 18:52
    —
Orion9
Код давний и недоделанный, тут много чего не хватает. В данный момент можно получить только одно значение.

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

#1937:  Author: Orion9 PostPosted: Wed Mar 06, 2024 01:08
    —
Loopback
Понятно. Хотелось бы, конечно, вытягивать сразу несколько полей за раз - иногда это крайне необходимо - но, в принципе, функционала Autorun и сейчас хватает, чтобы найти обходные пути. Например, можно использовать ProcessExecGetOutput со скриптом, выводящим результат в stdout. Немного плясок, конечно, при этом, но главное результат Smile

#1938:  Author: Orion9 PostPosted: Wed Mar 06, 2024 14:30
    —
Loopback
Какие-то проблемы с функцией FileExist. Простой вызов FileExist("%COMMANDER_PATH%\NoClose.exe") возвращает 0.

Ошибка?

Версия 2.2.10.0

#1939:  Author: Loopback PostPosted: Wed Mar 06, 2024 22:41
    —
Orion9
В принципе, при функциональной записи для переменных предполагается использовать конкатенацию:

Code:
FileExist(%COMMANDER_PATH% & "\NoClose.exe")


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

#1940:  Author: Orion9 PostPosted: Thu Mar 07, 2024 01:15
    —
Loopback
Code:
FileExist(%COMMANDER_PATH% & "\NoClose.exe")

Работает.

Но что делать с:
Code:

file = "%COMMANDER_PATH%\NOCLOSE.EXE"

FileExist(file) - возвращает 0

MsgBox(file) - правильное имя файла

Как лучше раскрыть, и можно ли?

#1941:  Author: Loopback PostPosted: Thu Mar 07, 2024 12:22
    —
Orion9 wrote:
Но что делать с:


Точно так же:

Code:

file = %COMMANDER_PATH% & "\NOCLOSE.EXE"


В переменной file будет раскрытый путь.

#1942:  Author: Orion9 PostPosted: Thu Mar 07, 2024 13:09
    —
Loopback
Да, работает. Немного путано, конечно, но теперь буду иметь в виду. Спасибо Smile

#1943:  Author: Loopback PostPosted: Thu Mar 07, 2024 13:26
    —
Orion9 wrote:
Немного путано, конечно

Что есть, то есть, издержки совместимости. В справке есть раздел "Виды синтаксиса", там разъяснены причины появления и особенности двух видов записей.

#1944:  Author: Orion9 PostPosted: Fri Mar 08, 2024 13:02
    —
Прочитал, наконец, всю справку (за исключением ModifyDialogs - пропустил пока). Давно надо было это сделать. Просто всегда хочется быстрого результата, а к справке, как правило, обращаешься по мере необходимости. Но надо отметить, что справочник у Autorun что надо. Читается легко и на одном дыхании. Все оформлено просто здорово и с умением. Спасибо вам и Flasher за большой проделанный труд.
Если какой-то недостаток и есть, то, может быть, иногда местами не достаточно примеров, а порой они совсем отсутствуют. При этом лишними они точно не были, поскольку примеры нагдядно демонстрируют возможности и закрепляют теорию.

Возник один вопрос. Если в файле конфигурации есть секция Pragma AutorunFinalizeSection с завершающими командами, то что будет если подключить файл через Pragma Include <filename>, в котором тоже будет эта директива?

#1945:  Author: Loopback PostPosted: Fri Mar 08, 2024 20:11
    —
Orion9 wrote:
Спасибо вам и Flasher за большой проделанный труд.

Спасибо!
Orion9 wrote:
местами не достаточно примеров, а порой они совсем отсутствуют

Да, наверно. К некоторым простым функциям не делались, казалось, что и так понятно. К некоторым просто из-за нехватки времени. Если на примете есть функции, к которым пример просто напрашивается - пишите, добавлю.
Orion9 wrote:
Если в файле конфигурации есть секция Pragma AutorunFinalizeSection с завершающими командами, то что будет если подключить файл через Pragma Include <filename>, в котором тоже будет эта директива?

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

#1946:  Author: Orion9 PostPosted: Sat Mar 09, 2024 14:05
    —
Quote:
Если на примете есть функции, к которым пример просто напрашивается - пишите, добавлю

Да практически ко всем нужны, и чем больше - тем лучше Smile На живых примерах учишься и перенимаешь опыт. Параллельно этому верифицируется логика работы всего остального функционала и закрепляеются ранее полученные значения. Взять хотя бы пример с FileExist. Если сейчас открыть справку по этой функций, то можно увидеть всего один пример - If FileExist("C:\Program Files (x86)") Then. В других местах справки есть и другие примеры с этой функцией, но важно, чтобы все они были в одном месте и демонстрировали основные/ключевые способы вызова, т.е., как вы и писали выше: FileExist(%COMMANDER_PATH% & "\NoClose.exe") или file = %COMMANDER_PATH% & "\NOCLOSE.EXE", FileExist(file)

То же самое можно сказать и о упомянутой чуть ранее функций ProcessExecGetOutput. Есть пример в autorun.example.cfg, но в справке примеров нет. А ведь так можно и не заметить сразу, что со мной произошло.

Еще один пример. Мне понадобилось записать в ini ключ с двумя переменными формата "%COMMANDER_PATH%" & %vbsp%, чтобы в в ini была запись типа "%COMMANDER_PATH%\Scripts\vbs\". Пришлось обратиться к другим разделам справки, чтобы понять, что сначала нужно создать переменную с ключом /EV-, типа: Set /EV- Var "%COMMANDER_PATH%", а потом уж оъединять (Var = Var & %vbsp%) и писать в ini через %Var%. А ведь было бы хорошо, если в справке к функции IniWrite сразу был подобный пример.

В общем, примеров нужно больше. Как, например, у функции ControlSetMouseAction. Это еще больше популяризирует плагин даже среди людей далеких от программирования (или, по крайней мере, поможет им лучше разобраться при желании).
Quote:
Думаю, ничего хорошего Smile

Лучше не скажешь Laughing Видимо, защита все-таки нужна.

У меня тут другая проблема. Простая директива Pragma Include example.aucfg не работает. Пишет "Не найден подключаемый файл: example.aucfg". Файл лежит в каталоге. Пробовал по-разному, помещал в подкаталог, кавычки и прочее. Не работает. Только указание абсолютного пути срабатывает. Что это может быть? И жаль в справке опять нет примера Laughing

#1947:  Author: Loopback PostPosted: Sat Mar 09, 2024 22:41
    —
Orion9 wrote:
В общем, примеров нужно больше.

Примеры, где их много (ControlSetMouseAction, команды плагина ModifyDialog) в основном делал Flasher, поскольку он был весьма вовлечен в эту тему. Просто так такое количество сделать непросто, поскольку желательно чтобы примеры не были абстрактными и демонстрировали что-то полезное. Но тем не менее постараюсь к релизу (надеюсь, он когда-нибудь все же состоится Smile ) дополнить недостающие примеры.

Orion9 wrote:
Простая директива Pragma Include example.aucfg не работает. Пишет "Не найден подключаемый файл: example.aucfg".

Весьма странно, попробовал такой простейший вариант, example.aucfg рядом с основной конфигурацией - находит.

#1948:  Author: Orion9 PostPosted: Sun Mar 10, 2024 19:47
    —
Loopback
Quote:
Просто так такое количество сделать непросто, поскольку желательно чтобы примеры не были абстрактными и демонстрировали что-то полезное

Пусть это не станет для вас обузой, ведь вы и так уже много сделали! По сути, выполнили всю работу за Гислера по созданию встроенного скриптового языка в TC Laughing
Но если вы хотите расширить границы и сделать плагин чуть более доступным, то тогда да - большее количество примеров в справке совсем не помешает.
Когда видишь пример в справке, это говорит о том, что автор гарантирует его работу. Если пример взятый из справки не работает, то причину прежде всего ищешь в ошибке софта или каком-то баге, а не в том, что ты делаешь что-то неправильно. И наоборот: если в справке нет примера, а есть только схема (теоретическое описание), и если возникают проблемы с применением этой схемы, то причину ищешь прежде всего в себе, и тут начинаются пляски с различными комбинациями, вариантами и прочими производными, пока лимит идей и сил не иссякнет, и уж только потом начинаешь думать о недочетах в самой программе.
Вывод: примеры таки нужны, даже если все кажется простым и очевидным.
Quote:

Весьма странно, попробовал такой простейший вариант, example.aucfg рядом с основной конфигурацией - находит.

Проверял на 8.1/10/11 - везде то же самое. Эксперементальным путем установил, что за начало относительного пути берется корень TC. Если положить туда example.aucfg, то все начинает работать. Аналогично, если файл лежит, скажем, в %COMMANDER_PATH%\Ini\, то запись Pragma Include ini\example.aucfg - тоже рабочая, как и Pragma Include %COMMANDER_PATH%\Ini\example.aucfg

Даже не знаю, в чем может быть проблема. Кстати, проверял даже на чистом ТС всего с одним установленным плагином Autorun.

#1949:  Author: Loopback PostPosted: Mon Mar 11, 2024 13:55
    —
Orion9
Оставил эту конструкцию в рабочем конфиге и в какой-то момент все же словил ошибку. Надеюсь, смогу повторить, когда дело дойдет до исправления.

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

#1950:  Author: Orion9 PostPosted: Tue Mar 12, 2024 14:29
    —
Loopback
Остановился пока на варианте с %COMMANDER_PATH%. Так, вроде, работает и не вызывает никаких опасений. Совсем не жалею, что потратил столько времени на Autorun - в итоге получил больше, чем хотел и мог расчитывать. Даже не думал, что этот инструмент настолько мощен и полезен, особенно в последней своей версии. С интересом буду ждать, что вы еще в него добавите, если, конечно, будут новые релизы. Тут я советчик плохой. Но, пожалуй, чего мне не хватило - MsgBox с вариантами ответов и функции вызова всплывающей подсказки, типа ToolTip. Может, у вас когда и доберутся руки до этого Smile

#1951:  Author: Loopback PostPosted: Tue Mar 12, 2024 16:35
    —
Orion9
Да уж, сам иногда удивлюсь, во что превратился изначально ни на что особенное не претендующий плагин Smile Релизы, конечно, будут, накопилось прилично изменений. Надо только собраться, найти время и привести всё к нормальному виду.

Orion9 wrote:
MsgBox с вариантами ответов

Формально это несложно, но тут есть пара проблем.

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

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

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

Orion9 wrote:
функции вызова всплывающей подсказки, типа ToolTip

Не совсем понятно, что, где и как должно вызываться?

Просто запрос на создание настраиваемых тултипов для функциональных кнопок уже был, но там не так всё просто.

#1952:  Author: Orion9 PostPosted: Tue Mar 12, 2024 20:09
    —
Quote:
Да уж, сам иногда удивлюсь, во что превратился изначально ни на что особенное не претендующий плагин Smile

Превратился он в монстра Smile Если хотите, гляньте в теме про заголовок TC, чем я занимался в последнее время.
Quote:
Первая - вопрос совместимости

Ох уж эта совместимость. Не так давно начал интересоваться AutoHotkey второй версии и увидел, что есть F4MiniMenu. Поначалу обрадовался, что будет возможность изучить код и подправить его под себя, но когда увидел, что это только для первой версии AutoHotkey, желание как-то поубавилось - не хочется вникать в еще один синтаксис, притом устарелый. А одно из основных отличий AutoHotkey v1 от AutoHotkey v2 - как раз в командой и функциональной записи (во второй версии совсем отказались от командой записи, полностью заменив ее функциональной). Возможно, и вам придется делать такой переход рано или поздно, если проблемы с совместимостью будут расти как снежный ком и придется искать радикальный выход. Не думаю, что все пользователи разбегутся: кому надо, тот перейдет, а кому не надо - останется на старой версии.
Quote:
Но тут важнее вторая проблема - у MsgBox до сих пор остаются нерешенные сложности с работой на x64 версии.

Пока не сталкивался с такой проблемой, хотя и видел упоминание о ней в справке. Но раз вы говорите, значит основание для того есть. Выходит, придется как-то обходиться без этой функции, если только вы чего-то не придумаете Smile
Quote:
Не совсем понятно, что, где и как должно вызываться?

Речь о:
https://www.autohotkey.com/docs/v2/lib/ToolTip.htm
Можно найти интересные применения, например, альтернативные подсказки к файлам или дополнительная информация, всплывающая по требованию на разных элементах окна или у курсора мыши.

#1953:  Author: Loopback PostPosted: Wed Mar 13, 2024 12:29
    —
Orion9 wrote:
чем я занимался в последнее время

Успел, глянул. Впечатляет! К слову, в еще не выложенной версии SysInfo добавлены кое-какие нативные функции для получения системной информации, в том числе загрузки процессора, можно будет уменьшить число запросов.
Orion9 wrote:
А одно из основных отличий AutoHotkey v1 от AutoHotkey v2 - как раз в командой и функциональной записи

Да, будучи большим поклонником Autoit (пользовался им еще со второй версии), я всегда недолюбливал AHK за такую смесь синтаксисов и недоумевал - зачем? На деле всё просто: когда делался Autoit3, разработчики полностью отказались от совместимости со второй версией, поэтому синтаксис языка получился удобный и лаконичный, без командных атавизмов (cинтаксис Autorun немало почерпнул из Autoit). А в AHK пошли по пути поддержания совместимости и тянули её еще очень много лет. Хотя действительно, последние альфы/беты эту совместимость всё больше теряют (но в то же время потенциально становятся лично мне более интересны, учитывая стагнацию Autoit).

В итоге c Autorun я сам фактически прошел путь AHK Very Happy
Orion9 wrote:
Возможно, и вам придется делать такой переход рано или поздно

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

Orion9 wrote:
Можно найти интересные применения

Ясно. Хотя тут сложность даже не в самом тултипе, а в том, как его вызывать. Горячие клавиши это понятно. Но если по наведению это уже совсем другое.

#1954:  Author: Orion9 PostPosted: Thu Mar 14, 2024 13:55
    —
Loopback
Quote:
Успел, глянул.

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

Я внесу туда изменения потом, чтобы оригинальный заголовок оставался нетронутым, просто пока не нашел на это время, хотя работы там и не так много. Надеюсь, это не вызовет больше претензий и все желающие смогут воспользоваться кодом по своему усмотрению (хотя бы как примером реального скрипта, полностью написанным на языке Autorun).
Quote:
К слову, в еще не выложенной версии SysInfo добавлены кое-какие нативные функции для получения системной информации, в том числе загрузки процессора, можно будет уменьшить число запросов

Будет здорово. Само наличие vbs-скрипта там обусловлено тем, что для расчета формулы нужно тянуть два поля за запрос, но Autorun сейчас это не позволяет.
Quote:
Да, будучи большим поклонником Autoit

Как раз хотел посмотреть вашу утилиту uwdx, но еще не успел толком, хотя уже начал. Интересен вывод в консоль и как можно извлечь из него выгоду в Autorun + ToolTip. Например:
Code:
ControlSetMouseAction /L /K:C 3 ShowItemHint

Func ShowItemHint
Local icacl, dat, p, buf
   dat = StrPart(ItemAtCursor('text'), auTAB, 1)
   p = SendMessage(RequestInfo(RequestInfo(1000) + 8), 13, 100, buf, 2)
   p = StrLeft(p, StrPos(p, "\", -1))
   ProcessExecGetOutput /OEM icacl %COMSPEC% "/c icacls ""%dat%""" %p%
   MsgBox(icacl)
EndFunc

Вывод сообщения по Ctrl+ПКМ о правах доступа, но можно и о чем-то другом, и не в модальном окне MsgBox, а в удобном тултипе. Кстати, я все правильно сделал в этом примере выше, или есть другие способы? А еще почему-то есть глюк с длинными именами файлов. Такое ощущение, что где-то происходит потеря символов и возникает такое сообщение:
Code:

PotPlayer_1.7.22077_Stable_x8: Не удается найти указанный файл.
Успешно обработано 0 файлов; не удалось обработать 1 файлов

Имя файла при этом PotPlayer_1.7.22077_Stable_x86_Portable_Rus.7z
Вы не могли бы глянуть в чем тут может быть проблема?
Quote:
сомневаюсь, что потребуются кардинальные изменения синтаксиса. Все необходимые управляющие структуры уже есть. Не хватает только какого-нибудь простейшего массива. Дальнейшее развитие скорее будет направлено на расширение функционального обвеса.

Это хорошо. А то пришлось бы много работы провести без очевидного выигрыша. Меня синтаксис устраивает, главное - чтобы все работало, а функции и команды необязательно трогать (адаптировать) - можно и новые добавлять, например YesNoBox или что-то вроде того.
Quote:
тут сложность даже не в самом тултипе, а в том, как его вызывать

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

#1955:  Author: Loopback PostPosted: Thu Mar 14, 2024 21:00
    —
Orion9 wrote:
Кстати, я все правильно сделал в этом примере выше, или есть другие способы?

Кстати, вот и хороший реальный пример ProcessExecGetOutput нарисовался Smile

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

Или с помощью WM_COPYDATA, с типом команды GW и параметрами SP. Только такой возможности в Autorun нет.

Может и еще что-то есть, сходу не вспомню.

По правильности вроде всё нормально. Только переменная buf не нужна, ее значение в данном случае всё равно игнорируется. Можно передать просто 0 или пустую строку. Надо это уточнить в справке.

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

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

Orion9 wrote:
А разве нужно что-то по наведению?

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

#1956:  Author: Orion9 PostPosted: Sat Mar 16, 2024 20:06
    —
Loopback
Спасибо за комментарий по поводу правильности/неправильности способа. Я еще только изучаю принципы автоматизации и что с ними связано, поэтому мне очень важно услышать мнения экспертов и опытных в этом деле людей для подтверждения собственных мыслей.

Исправил на p = SendMessage(RequestInfo(RequestInfo(1000) + Cool, 13, 100, "" , 2) - все работает. Но вызывает вопрос параметр 100. По идее здесь должно быть точное количество байт, полученное через WM_GETTEXTLENGTH? Иначе ведь при длинном пути он просто обрежется. Или можно просто цифру побольше взять?

Попробовал довести задачу до цели через скрипт AutoHotkey, чтобы посмотреть, как оно будет выглядеть в действительности. Вроде, ничего - мне нравится!
autorun.cfg
Code:

Func ShowItemHint
Local icacl, dat, p
dat = StrPart(ItemAtCursor('text'), auTAB, 1)
p = SendMessage(RequestInfo(RequestInfo(1000) + 8), 13, 100, "" , 2)
p = StrLeft(p, StrPos(p, "\", -1))
dat = p & dat
ShellExec "%COMMANDER_PATH%\Scripts\ahk\AutoHotkey32.exe" "FileSec.ahk ""%dat%""" "%COMMANDER_PATH%\Scripts\ahk\"
EndFunc

FileSec.ahk
Code:

#SingleInstance Force

ToolTip StrBuf(RunWaitOne('icacls "' A_Args[1]))     
KeyWait "LButton", "D"
   
RunWaitOne(command) {
local sOut
dhw := A_DetectHiddenWindows
pid :=0   
    DetectHiddenWindows true
    Run A_ComSpec " /k",, "Hide", &pid
    WinWait "ahk_pid " pid
   
    DllCall("AttachConsole", "UInt", pid)
    DetectHiddenWindows dhw

    shell := ComObject("WScript.Shell")
    exec := shell.Exec(A_ComSpec . " /C " . command)   
    sOut := exec.StdOut.ReadAll()
   
    DllCall("FreeConsole")
    if ProcessExist(pid)
       ProcessClose pid
return sOut
}

StrBuf(str)
{
    buf := Buffer(StrPut(str, "CP0"))
    StrPut(str, buf, "CP0")
    return StrGet(buf.ptr, "CP866")
}

Думаю, тултип Autorun нужен. Может, вам удастся как-то решить проблему с его скрытием? Ну, а если нет - ничего страшного Smile

#1957:  Author: Orion9 PostPosted: Mon Mar 18, 2024 00:35
    —
Наконец-то дошли руки подправить все, что нужно. Теперь скрипт просто добавляет полезную информацию к заголовку ТС, не трогая оригинального текста. Подробности внутри архива.
Code:
MIME-Version: 1.0
Content-Type: application/octet-stream; name="Title.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Title.7z"

N3q8ryccAAQHUjY07Q8AAAAAAAAjAAAAAAAAAKmv+gbgMCsO1F0AEbRYrqfsXNHylQ3bLMhSmrkN
UwD7Y5I6d6Jni/eJdrQTR5fyT73OTTTu/Y/dlhTMTqTDFMZC4/NF4mL3ixWxsluEHFjMKdZbBRpI
Kx3Ep/r/fgfR5dVKM3VAG9uonH1CLM1XieX8tM05IOnQTji+CwutEqLdwLl0jgmWv8PN0iTMLvWX
aKiswoHpscOW7OsdmR3Ygtw2GIDfXVcPXrLYql93VFR4PPyLbCZ2AE4OqoohbnLBqAMtNwo+5WdM
GyfGlfxqaN/In57JFnKZx5qyhKJhGY/4EGOz4SZtzA8T1SyzrxW79wl3RL0L6td8DtLWW4hMufwO
66sj9AwTQMRWRwZQVZ5VhZXtLin5RtNHV0UekhFDLA5las7X8+eazVuamVwI5XICd0M6bq7qrqi4
eZxdm/1lx6i/ASHcdZ1gpNBFqeMlTTHnCW/FL9utd5Yw2SVfuNdcbLRqgQHwbRHJBF4cz+U1nlgy
3p6oKrZjuZys5jgWgkjS/UVec44hy50V+9Naw2/O28ssKi8wB9RqLbdtSyTr1ONGKnCM3hQhUDYS
Gr0FglAMXT/VkvLYpvgXySXI/umrsKA7iNWU2RFcL1RbrYKBLpKfvyvlFdvJTHUObp3D92hsceIv
S2K/85E4/2HfDEXxptL88du8tkqIPWJpbaKLbWUi+b9XIdF/SBxh0jbpEnoPGtqH3PGVRlXdIdY9
MnFEQ745O3OQ4SPbAw+eRMKdalouTpKl76mJJhpevWuooJk2b4uS8Sw8gRIcrzDAlcVsYsaKYKdf
8KZAjFemh/y62A6J+0kcT5ao+PjahahdI+4W8mEUS6ilEUHQ8HTp2AlawG+LOBto6G/FrbK4MQMB
gAYm3oPGhdUbmxKqh1z6hsVvAlGzFHHTBukIXDPwkBMisfezyneCscc6AUMaggvK4QQZe3dJV+BP
DAmHLBr0RCZWTGQajroQYyiAJrLWv5+uLG1pAH2/y21xu49f1X/KeYoX7tC3xRbSB5mdP/lWB5Kk
1JNe+ZOOla4lhJ1Z6MnayKRm1XugX1uHVtl8xqD9U1y543IYUloL7IQI4voD7lWcu8P/T0oZBNUH
eWnSOMDaqZn30NERub9BGhVe3pDKQtnuENSjVTe5aA80eHxvTzuzH29B3P0o+wgqhCLy5LOa+Cy6
qKabZj6BOnCSNiOh9V3A7niLEsscoTEwq+XwtcrJJaxtpbnorJifOSojuXJx8kc5jIB1Y9UpDp9g
f3JVAfb/KXkG+Qdnk+rwm/8qekouib9KjLCtVjT4+AuJLQVd6e4/We/cpM3exc7xPwm+OZASOzh4
46GPp2EHXkXAgXq+HpTSRflMB+D9wWOR90HClwHPskf88CpPoiaKTTcC/S4WH/VtkX0d5PkqE/fa
7yZr0dzlQBMc0MtnFMz2Pg0s4DD420WKjJIQYRagwOUJKIhdQgmsZgIc9QKrs2cwborVtggSn4AX
uW2dYQdXCqUoX9R9ngFiWpR/dxyYO4p8a6lhkdyhmvj5nsmFJQTYI1HaC8CPvqpbscbgukrkllXR
kp7eg2ghUdtZfiHYq8Z9g3mWZjCYcVSEH5meB/9cOF7M+XYAh2+CVIhZxKbhhW5QhyB6lrBlshfq
7x98ym+jGbpc812KNp8gZ4Q3MmdwG71DIQzfz6yEVx+YBB4CfpUCBmQcyjwRjuilYc6I+++YoA2O
3yYOz+u2ynxsEN2FOZWusylOn7n0jBhJrTm2IWeiOCAZo+ML5Kn5n8X5iqOkNcukdEvNBCmzlEcP
WlTg8CCl/43n2J3XLqSa0m0zuoPB0Y+zs3tZjSoiEfIuUr/EDYrwQM4ZDcP8mdfyygfTLBd+0knH
Ku1aTn2+6MxVikfYCeuk7/56Ca6dQyeKgbTaKDpKZZrc2nHnlelLYdpUQsaWzQ9vYv0yJQ5y3KMn
LaqFButvUi11f9JEUSclRt7e9LKIzPlIrYYHYiGvoYm3xwIAPe7+WnkcJ2eSQ3BPyKgWONYjWGAi
n5caJdTTY6Xk4uLzlOtippjh1Z/DrE5KGcvX1h6h+YMyUKU9UwpaM3eqI/rtPmk//TBnvMrLxWeg
3swgpwSMqa6aC2l0QDFiy21mA2DRz8ef3DhiyBcazmj/bd6I4J2NvB/rpBH3BE/sCy4MKgIwa0hj
lzwhUXAFt2KRpSYE08JDCYOYIR8Ph1U8IOCdWn7/qmuTNm9YoBxsniz5WrQdJsJOYhhwSfWO+jCE
JCveHPJ62X3y7RQmD/ASoUp8aLabvKvwijGPRODcVKftfNjkOjlaVOlki8vh2jsmjXqn4YD73aOW
+8Q9I7QBw/3q6g5rt6TaJ/XmyAOqkxdViG3nEaU9OfaoyheNjgCdD7p4ddGAOI45hg8M9esibmyi
hyvaeEDjoQOcapFvXvN5uMupknNJwg0dx95u2cT9BZiNP8yp8mrKwuFiCPQgkyrxhprlfwk1HqiR
DqFFtdmNGH1vsXYdir3KHAfe2q0NM4fPbB3S1v/WUgk1aek4YKv4e3AwDWlP3RJRnjXrHZZjANsi
hp/+wTPxo4hmfFqVxLe0q15H6JBuQcq3Ota6jVNFw4KN8mcZFeDPFnALw/1BUQJN/P32XB7/pVTm
bKuMtN9X0geBlYyqtWLqePREUnulvtbG4Gexf9eK98uHhLE8pS6qvtzlbGQHM4KgjIPapXKPkHbF
KvItI3CpmYnXSJmxygvQEnMWPOZ3FVKYz/rQmfPtk0V29vz548+WcDQnl/0bobuwJBoOIeGw69oz
30VP1O2/uwdITMhd+rXlzdKEkC8ZQHDPo4qzvR4mwJOWK9ihdpLtrtmKLKRAQUMAU2ScVyw4d58G
fYXG9O0dcjBwx1iVgnMeumRRC+k3ib/vrWzzJmEiO5M/55cE8GY2KY2JTG3JJ1ZYLavJIl/tTTPy
mJmWBxYaZRx33GtyIJa3QYIHWJovOGDF8BzrCFawccuDKxDOn71rDaFu6jmxyO43ClgcLe2fqI7G
mLgB7aG/V2E1s4bi8sWNCD8AwL6TjGTmSeFK8rJ+YZJC7XG2z7AUhZxuaszJAObi9sppfiPstQu+
3a3C8dFHzZhwRHGMMjcJqEfKqC3/IBuTiilDkVlvOsE9oO7yi5LCDj+QKFdyTCwgvm7vEn9CdcD0
WsIr0SnxxhfXrKH+LIfGpcIilWctRa+uNYZyQE8BINSAkXETcgdkZb5ewtvkjdbc47CZyutqnIAv
tgQwR+BhZhGlDKRo64DrdKE8HwjVi8X+Nv5yWaQO9QphLd+wAPSMLy0yUnep/D8wYLFeOgls8JwC
tl9NwkZhFhJUHKg7fTXSsohuWeQhysDIlJ8r6NUpTKMzSXuZE43Q14g1kC8uAV/sLJH9XQpL9zxE
xKBtj8VX9YcFTKF+mlcXAmbQ2Dl7xVuyIKN+h3MGekuID+9c6kxmsNYi1zw6jxs5L7vV7AoTLYxl
hBEsQrZXd4GSRfj6s4IRnW59mSLEgwnJiHNrXZRDFNiPlwkbt1l1R9pJZwonoYI7yak6k/G7xBVM
QG6wZTIY9D492pzk+ar/RXplaW2Zqprp9idGSPU1mKozQ6k+GohJj1kY5NuZlTrE+BplNstsD1eW
J8Ri39WxScBfNQ5FXoK2hqP5dt7BID20Lwm9BKSeLd2VxeMlJMcjmGdaPo190Lhj1f6dd0/eDkjV
PKhI5TUR9Oby6us0pqLIDSxPRm7c8BbFDllXg/+J8U6yIYxz4EByvAArXEbyfNiTjC16xzat3Q3a
JIRaB+qq0m+CjbUOW+JOxwnxBvKkr1nEswqgAjLC0izqoLN3eWbmEZLQcB6XlMGpE/CMqDMrToX+
aUcZc5Tw7EkdQsBey2h5yGQAaf9EmYUvUughzyYilkjKHVWvHHgLZtn3xtn3jRX1uBYPcnf1DF1c
UTLJcKps/26sOPZW0+fb4erS5o6vnszFg3LPPaNVNPNN4Q1dVba8Ef4yhzDUelRNI1pJ2UuR3wYs
a6OZBpCZJkmHBrKYbTZ3qwwlbN3K0jLY1Mdt9C0jkufIeRR2ySZQcyxpHwrTBxCPzdK56mghug8Z
RWS0vJM3IRNPDaWfI2R+C4kaUaqJhxSF5rzaPeXv0dkGAcow4fJziMAs/SrxaAcjxUB9bZDEm0zM
kYeJD6RjGd/kAGRqSxv3wtZIylxXixA86YH6pbLyMBLyRfLxja9qrvHcdmSnAtdlnzC+9OzJgIDW
kiiafS3kKqYuPOvk89vEofP0sL0utMCDxByjCReMurBSMlctCnyLPHcSKrNIeWQU2gfXffFzRibL
eXJjE+PkRigijE3qb/0YAGcWbVLy4WeCeWKwLbURq9ubzwJWjDZO+NWkKYpNgnFDuDkcvcCuBR67
Wkjym1kFNnV/Ta7bX6yQc5tFO90Rjks6fzg6Ti92CrYKkJsoHaeOZfWq6bY4w4o/5kCf2lnfdbfy
vceGFd1nthVEV0Z9ATOVpw4cw2rPUO0f3U+IfzHe0rQ8UeLwozYwLPcKsW+CMj1s0Pj01Bebfjzr
oBKa/HqbSo66nOcbjK4jdp4shLs4eSib+EG1OBo7LrrMCtBu/Nm8JkiH3Pik4q2SZfJlNTk5fmS1
YuYIHRQK79BqzBHC1oLWPFp+AGmSLpmHG36I1EL7c0YIXtyA3gMa28/yi8yZO8OleRTMoT+sIFT7
ht+vnxXOmwl7CioIkN52BcnR8dJSYpEUs1ughqXKx8q3iLnYV9MWRysFN2aBqWrYPHqTNJldltRg
XEDukm7FCufrl/EKAu8xHp4Ue3HSh8QjtxkIclZsXeaJKeiSKDduP2kPub19drNh3Zx2UVJXddfV
Zm1sKIa2RncgbEXDMebypW/iowzZF1C3FnInxwt2ZYdfMsP2u5/R4JtyX+WGClRlhdVRZBY2zl5O
AqSLlE47PuIv0PywhljguQzD0uqkW+swxaIOWbi/rOzSC41xQ+NH11bVbqV/nRf0ku+96vVPfFVk
p1alEFNa/WuvGs295ZWfups7zMR8wdy2r0aCCEW0xyQfGwm4zyPHkHjtbfau6Nj2gTRqXLyYWxpd
4gNoNxpREqiVOlMRaOvMOAAAAIEzB64P1cu4WBck0/6zcBiCVlTbIn3LiTRRDhaS2gAUTaMERESE
rRaNPB4lZ8kE+NC1KOYIFyrj8WaOWXCEEQYPb9k285mNo31lyaSN+hMNs4qV15cMFtSmc+o/NX6H
1gKfdFsbsF+lmnkMFd9N3go9z1j0zBpWhMPAMD8DyQZ3rOLgGPjeVAprTutpIu+rCzHmTybAO4YK
kvJikeKz9J2YswtAsWzE1Vd1YQ9p3/M0B8DsNfHKZmswWFjJcE4wM/++Oli2JSf98IsU+eSqVmjm
gaHJUUvcyRMv5XG/mVS00pez9t/SgWc7FlR45GIyCzbrwXFG7eoNTEO7z0LWTaNa2+RO+lNcZtew
jfqRA74XBo7cAQmBEQAHCwEAASMDAQEFXQAQAAAMga4KAZBHmH0AAA==



#1958:  Author: Loopback PostPosted: Mon Mar 18, 2024 19:43
    —
Orion9 wrote:
Но вызывает вопрос параметр 100. По идее здесь должно быть точное количество байт, полученное через WM_GETTEXTLENGTH?

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

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

Можно сделать, чтобы выделялся буфер с размером, передаваемым параметром, но не уверен, что такой вариант будет правильным: точно ли везде размер буфера передается вторым параметром? Тут еще можно подумать, Runtime пока сыроват.

Orion9 wrote:
Попробовал довести задачу до цели через скрипт AutoHotkey, чтобы посмотреть, как оно будет выглядеть в действительности.

Давненько я на сайт AHK не заглядывал, оказывается двойка уже зарелизилась... Да, смотрится симпатично, только задержка стала более ощутима. И еще тултип перекрывается тоталовским тултипом.

Если что, вот тут версия плагина с исправлением ProcessExecGetOutput.

Orion9 wrote:
Думаю, тултип Autorun нужен.

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

В общем, тут ещё надо думать.

#1959:  Author: Orion9 PostPosted: Tue Mar 19, 2024 00:25
    —
Quote:
Тут еще можно подумать, Runtime пока сыроват.

Может, сделать пару вспомогательных функций, которые сразу будут возвращать имя файла и путь в нужной панели, и тем самым освободят пользователя от необходимости самостоятельно посылать сообщения через SendMessage и RequestInfo? Думаю, было бы удобно.
Quote:
Да, смотрится симпатично, только задержка стала более ощутима. И еще тултип перекрывается тоталовским тултипом.

Да, задержка ощутима. А по поводу перекрытия я как раз хотел у вас спросить: Если тултип будет вызываться через Autorun, это не поможет ему показываться поверх тоталовского? На крайний случай, можно будет двинуть его координаты выше, чтобы они не мешали друг другу.
Quote:
Если что, вот тут версия плагина с исправлением ProcessExecGetOutput

Забрал. Все работает просто мухой, и больше ничего не обрезается. Спасибо.
Quote:

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

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

#1960:  Author: Loopback PostPosted: Tue Mar 19, 2024 17:43
    —
Orion9 wrote:
Может, сделать пару вспомогательных функций, которые сразу будут возвращать имя файла и путь в нужной панели

Да, такие мысли проскакивали, хотя я стараюсь по возможности не увеличивать число специализированных функций. Жаль, что Гислер не пришёл к какому-нибудь единому API для двунаправленного взаимодействия с программой. Сейчас получается три метода (WM_USER+51, WM_USER+50 и WM_COPYDATA), которые в ряде моментов пересекаются. Думаю, как минимум надо добавить запросы через WM_COPYDATA, что позволит удобнее получать пути.

Orion9 wrote:
Если тултип будет вызываться через Autorun, это не поможет ему показываться поверх тоталовского?

Точно так же прячется за тоталовским. Но глубоко не смотрел.

Orion9 wrote:
По сути, применение у тултипа такое же, что и у MsgBox, только оформление другое.

Еще такой момент, для чего вообще придуманы тултипы. Они предназначены для подсказок к контролам в приложении, а не в качестве самостоятельного уведомления. При этом в приложениях тултип полностью контролируется самим приложением. Сделать это со стороны сложнее. Тут, возможно, будет более оправданным использование традиционных диалогов, по аналогии с функциями Splash* в Autoit.

#1961:  Author: Orion9 PostPosted: Wed Mar 20, 2024 00:17
    —
Loopback
Ну, как я писал чуть выше, если будут сложности, то и не заморачивайтесь сильно.

Просто, как вы понимаете, получать небольшые инфошки в MsgBox не всегда удобно. Гораздо интереснее делать это во всплывающем окне возле курсора в соответствующем оформлении, например, если нужно быстро посмотреть жесткие ссылки файла:
Code:
ControlSetMouseAction /L /K:C 3 ShowInfoHL

Func ShowInfoHL
Local f, p, hl, links, linkout
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"
   f = StrPart(ItemAtCursor('text'), auTAB, 1)
   p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
   p = StrLeft(p, StrPos(p, "\", -1))
   f = p & f   
   ProcessExecGetOutput hl %uwdx% "NTLinks.wdx ""%f%"" 0" "%COMMANDER_PATH%\Plugins\wdx\NTLinks\"
   if hl = 0 then Return
   ProcessExecGetOutput links %uwdx% "/C:1251 NTLinks.wdx ""%f%"" 7 0" "%COMMANDER_PATH%\Plugins\wdx\NTLinks\"
   for i=1 to hl
      linkout = linkout & StrTrim(StrPart(links, ',', i)) & auCRLF
      i = i + 1
   next
   MsgBox(linkout)
EndFunc

А что там будет вместо MsgBox - тултип или Splash скрин - роли, как таковой, не играет. Тут как раз тот случай, когда важна форма, а не содержание Smile Так что делайте как вам будет удобно.

#1962:  Author: jentoso PostPosted: Wed Mar 20, 2024 21:30
    —
Orion9
Попробовал приведенный пример
Code:
ControlSetMouseAction /L /K:C 3 ShowInfoHL

И словил ошибку
Code:
---------------------------
Autorun plugin error
---------------------------
Error in file: D:\TOTALCMD\plugins\WDX\Autorun\Autorun.aucfg

[58] ProcessExecGetOutput hl %uwdx% "NTLinks.wdx ""%f%"" 0" "%COMMANDER_PATH%\Plugins\wdx\NTLinks\"

Error executing process.
---------------------------
ОК   
---------------------------

#1963:  Author: Orion9 PostPosted: Thu Mar 21, 2024 01:08
    —
jentoso
Трудно сказать... У меня все работает. Может, с путями к uwdx что-то не так?

Кстати, хотел спросить.
Code:
ProcessExecGetOutput hl %uwdx% "NTLinks.wdx ""%f%"" 0" "%COMMANDER_PATH%\Plugins\wdx\NTLinks\"
   if hl = 0 then Return

Вот тут uwdx выдает "Test file does not exists.", если под курсором не файл/каталог. Думал, проверка "if hl = 0" сработает, но, по факту, получается нет. Как лучше тогда сделать, чтобы строка не приводимая к числу была принята за 0 -- выражением?

#1964:  Author: jentoso PostPosted: Thu Mar 21, 2024 06:00
    —
Orion9 wrote:

Может, с путями к uwdx что-то не так?

Пути к uwdx такие же, а сам uwdx обновленный.

#1965:  Author: Orion9 PostPosted: Thu Mar 21, 2024 11:30
    —
jentoso
А с учетом нового ключика у вас будет работать?
Code:
ControlSetMouseAction /L /K:C 3 ShowFileInfo

Func ShowFileInfo
Local f, p, hl, links, linkout
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"
   f = StrPart(ItemAtCursor('text'), auTAB, 1)
   p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
   p = StrLeft(p, StrPos(p, "\", -1))
   f = p & f   
   ProcessExecGetOutput hl %uwdx% "/I NTLinks.wdx ""%f%"" HLNK_Count"
   if (hl+0) = 0 then
       MsgBox(hl)
      Return
   endif   
   ProcessExecGetOutput links %uwdx% "/I /C:1251 NTLinks.wdx ""%f%"" HLNK_Paths 0"
   linkout = "Hard Links: "  & hl & auCRLF
   linkout = linkout & auCRLF
   for i=1 to hl
      linkout = linkout & StrTrim(StrPart(links, ',', i)) & auCRLF
      i = i + 1
   next
   MsgBox(linkout)
EndFunc

#1966:  Author: jentoso PostPosted: Thu Mar 21, 2024 18:28
    —
Orion9
С учётом нового ключа тоже ошибка
Code:
---------------------------
Autorun plugin error
---------------------------
Error in file: D:\TOTALCMD\plugins\WDX\Autorun\Autorun.aucfg

[58] ProcessExecGetOutput hl %uwdx% "/I NTLinks.wdx ""%f%"" HLNK_Count"

#1967:  Author: Loopback PostPosted: Thu Mar 21, 2024 19:52
    —
jentoso
Такая ошибка выдается, когда CreateProcess не удалось создать процесс. В данном случае не вижу никаких препятствий, кроме несуществующего пути в переменной %uwdx%, нужно проверять его. Во всяком случае мне для достижения работоспособности пришлось только её исправить.

Orion9 wrote:
Вот тут uwdx выдает "Test file does not exists.", если под курсором не файл/каталог.


Я бы просто предварительно проверил наличие файла средствами Autorun:
Code:
If FileExists(%f%) Then
  ProcessExecGetOutput hl %uwdx% "/I NTLinks.wdx ""%f%"" HLNK_Count"
Else
 ...
Endif

#1968:  Author: jentoso PostPosted: Thu Mar 21, 2024 20:23
    —
Orion9
Loopback
С путями к uwdx у меня был "косяк", поправил и заработало.

#1969:  Author: Orion9 PostPosted: Thu Mar 21, 2024 20:38
    —
Loopback
Пример из справки:
Code:
MyFunc(123, 456, 789)
 
Func MyFunc(...)
    For i = 1 To Args()
        MsgBox(Args(i), i)
    Next
EndFunc

Приводит к ошибке
Code:
---------------------------
Ошибка плагина Autorun
---------------------------
Ошибка в файле: C:\Portable\T 11 03\Ini\Autorun\Autorun.cfg

[115] MyFunc(123, 456, 789)

Слишком много актуальных параметров в вызове "MyFunc".
---------------------------
ОК   
---------------------------

Хотя потом отрабатывает как и должен, т.е. показывает MsgBox три раза.

jentoso
Я просто пример делал на скорую руку. Конечно, там должны быть проверки, как и писал выше автор плагина, плюс:
Code:
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"
   If Not FileExist(uwdx) Then   
      MsgBox("Не найден " & uwdx)
      Return
   Endif

#1970:  Author: jentoso PostPosted: Thu Mar 21, 2024 20:56
    —
Orion9
А что означают HLNK_Count и HLNK_Paths?

#1971:  Author: Orion9 PostPosted: Fri Mar 22, 2024 00:20
    —
Доработал немного пример. Все это сыро еще, конечно, но уже поинтереснее. Теперь инфу об NTFS-потоках еще тянет.

Code:
Func ShowFileInfo
Local f, p, hl, links, linkout
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"
   If Not FileExist(uwdx) Then   
      MsgBox("Не найден " & uwdx)
      Return
   Endif
   f = StrPart(ItemAtCursor('text'), auTAB, 1)
   p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
   p = StrLeft(p, StrPos(p, "\", -1))
   f = p & f   
   ProcessExecGetOutput hl %uwdx% "/I NTLinks.wdx ""%f%"" HLNK_Count"
   if (hl+0) = 0 then
       MsgBox(hl)
      Return
   endif   
   ProcessExecGetOutput links %uwdx% "/I /C:1251 NTLinks.wdx ""%f%"" HLNK_Paths 0"
   linkout = "Hard Links: "  & hl & auCRLF
   linkout = linkout & auCRLF
   for i=1 to hl
      linkout = linkout & StrTrim(StrPart(links, ',', i)) & auCRLF
      i = i + 1
   next
   ProcessExecGetOutput stream %uwdx% "/I NTFSFileStreams.wdx ""%f%"" ""Streams Count"""
   if stream > 0 then
      linkout = linkout & auCRLF & auCRLF & "NTFS Streams: "  & stream & auCRLF
      linkout = linkout & auCRLF
      ProcessExecGetOutput streams %uwdx% "/I /C:1251 NTFSFileStreams.wdx ""%f%"" ""All Streams One Line"""
      for i=1 to stream
         linkout = linkout & StrTrim(StrPart(streams, ';', i)) & auCRLF
         i = i + 1
      next
      ProcessExecGetOutput size %uwdx% "/I /C:1251 NTFSFileStreams.wdx ""%f%"" ""All Streams Size"""
      linkout = linkout & auCRLF & "Streams Size " & size
   endif
   MsgBox(linkout)
EndFunc

jentoso
В плагине NTLinks есть некое описание, но его действительно маловато. Лучше все же почитать теорию где-нибудь, например, в справке к утилите от CaptainFlint
https://flint-inc.ru/rus/info/ntfslinks.html
Именно этой утилитой я и пользуюсь, в основном, для создания NTFS ссылок.

#1972:  Author: sa PostPosted: Fri Mar 22, 2024 10:27
    —
Orion9
Quote:
Теперь скрипт просто добавляет полезную информацию к заголовку ТС, не трогая оригинального текста.

Попробовал. В целом работает. Заметил, что при перезапуске TC (cm_exit 9), в заголовке почему-то исчезает номер копии.

#1973:  Author: Loopback PostPosted: Fri Mar 22, 2024 13:12
    —
Orion9 wrote:
Приводит к ошибке

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

#1974:  Author: Orion9 PostPosted: Fri Mar 22, 2024 14:20
    —
sa
Да, неприятная проблема.

Если в aucfg-файле сразу вслед за строчкой объявления переменных добавить MsgBox:

Code:
Global JustTitle = WinGetText(), VarTitle = JustTitle
MsgBox(JustTitle)

То при перезагрузке командой cm_Exit 9 (в новых окнах ТС) можно увидеть, что текст сообщения в MsgBox не соответствует тексту заголовка. Похоже, функция WinGetText() где-то не так срабатывает, т.е. проблема не в скрипте (его можно совсем отключить, закомментировав вызов TitleLaunch в конфиге Autorun) а на более низком уровне.

Кстати, заметил, что при таком вызове MsgBox, она действительно не всегда показывается в 64-х битном Тотале.

#1975:  Author: sa PostPosted: Fri Mar 22, 2024 14:47
    —
Orion9
Добавил Sleep(250) в начало autorun.cfg – помогло.

#1976:  Author: Orion9 PostPosted: Fri Mar 22, 2024 18:40
    —
sa
Отличное решение!
Еще не успел опробовать, но ради корректной работы можно даже и пол(!)секундой пожертвовать Smile

#1977:  Author: Orion9 PostPosted: Sun Mar 24, 2024 00:38
    —
sa
Решение действительно рабочее, спасибо за вашу смекалку - избавили от лишней головной боли Very Happy Видимо, Autorun получает текст заголовка раньше, чем Тотал его окончательно выстраивает, поэтому небольшое ожидание здесь как никогда уместно.

#1978:  Author: yozhikLocation: Электросталь PostPosted: Wed Apr 03, 2024 11:59
    —
Сердечно рады свершившемуся возобновлению хотелки о всплывающих подсказках! И мы когда-то с этой же скромной просьбой здесь стучались Smile Но тогда время ещё не пришло. Так быть может сейчас оно поспело? На всякий случай: мой большой плюс к данному начинанию всегда наготове. А я всё так пока и пользуюсь своим au3-скриптом для этих целей. Таким образом, у нас назрели уже две насущные области применения tooltip'ов: 1) для функц-х клавиш подсказок куда-чего повесил; 2) описанный Orion9. Плюс ещё то, что было в мыслях у Loopback, когда tooltip'ы появились в «списке с приоритетом "подумать когда-нибудь"». В общем, если что-то получится, то будет, мне кажется, вполне востребовано.

#1979:  Author: Orion9 PostPosted: Thu Apr 04, 2024 00:50
    —
yozhik
Спасибо за отсылку к старым постам. Я давно хотел почитать страниц 10 последних, но так и не добрались руки. Отвлекся тут на новый скрипт Autorun + AutoHotKey Very Happy Если все получится как надо, скину в скором времени.

#1980:  Author: Loopback PostPosted: Sun Apr 07, 2024 23:24
    —
yozhik
Тултип или что-то похожее скорее всего будет, но вот со способами показа пока не до конца ясно. С помощью кликов или горячих клавиш вроде проблем быть не должно, но с наведением всё несколько сложнее. В функционал ControlSetMouseAction оно не укладывается. Но посмотрим.

#1981:  Author: Orion9 PostPosted: Fri Apr 12, 2024 01:00
    —
Loopback wrote:
Тултип или что-то похожее скорее всего будет

Это хорошо. А стиль и оформление можно будет менять?

#1982:  Author: Loopback PostPosted: Fri Apr 12, 2024 10:44
    —
Orion9
Предполагается, что настройки темы будут браться из соответствующих настроек тотала.

#1983:  Author: Orion9 PostPosted: Fri Apr 12, 2024 20:02
    —
Loopback, Понятно.

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

Почитал тут, все же, 10 последних страниц. Нормально так) узнал кое-что нового. Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема. При его подключении у меня перестает работать вызов меню по клику на заголовке ТС, т.е. команды:
Code:
ControlSetMouseAction /R /H:2 0 TitleBarMenu
ControlSetMouseAction /L /K:C /H:2 0 TitleBarMenu

Func TitleBarMenu()
   If FileExist(BarPath) Then
      ShowPopupMenu /D %BarPath%
   Else   
      MsgBox("Не найден " & BarPath)
   Endif
EndFunc

Не знаю, что именно тут не срабатывает, т.к. глубже разбираться не стал - просто вернул назад старый Autorun_Tweaks.dll версии 1.2.1.1 и все снова стало работать.

А вот за подсветку к Akelpad - спасибо! Прям кайфонул Smile К сожалению, ваш вариан подсветки, yozhik, мне попробовать не удалось, т.к. ссылки больше не доступны. Но если хотите, можете прикрепить его сюда, в тему, в формате MIME, чтобы он всегда был с форумом.

Ну, и пару моментов напоследок: в справке написано, что Имя внутренней переменной может состоять только из латинских букв, цифр и символа подчёркивания «_». Имя внутренней переменной не может начинаться с цифры. Однако, при попытке создать переменную, имя которой начинается с подчёркивания (например, _Var), возникает ошибка Символ "_" не разрешён в этом месте.

В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде (добавьте к To-Do при следующей копмпиляции).
Quote:

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

#1984:  Author: Loopback PostPosted: Fri Apr 12, 2024 23:55
    —
В общем тултипы таки родились. Версия предварительная, есть не всё, и что-то еще будет меняться. Справки, понятно, пока тоже нет. Добавлены две новые функции:

Code:
ShowHint("text" [, x, y])

Универсальная функция отображения подсказки. Закрывается кликом на самой подсказке, на свободном месте окна или по ESC. Цвета берутся из настроек TC. Поддерживает темную тему и переключение командой cm_SwitchDarkmode. По умолчанию, без задания x, y, показывается под курсором.

Code:
ControlSetHint [/B:nn] <id> <text>

Регистрирует подсказку по наведению на элемент окна TC. Принцип регистрации и работа переключателя /B аналогичны ControlSetMouseAction (кроме контрола "0" и соответствующих зон).
Пример: отображает подсказку при наведении на кнопке F3 Просмотр.
Code:

ControlSetHint /B:1 17 "My hint"

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



Теперь по вопросам.

Orion9 wrote:
Просто меня приколол консольный вывод в тултип, а если при этом не использовать консольный шрифт, то все рушится (визуально) и не имеет большого смысла.

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

Orion9 wrote:
А что делать с тем, что Тотал перекрывает своим тултипом чужой тултип

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

Orion9 wrote:
Но вот с файлом tweaks_20230825.zip (версия плагина 1.2.1.3) возникла проблема.

Проверил указанный код на сегодняшней версии, вроде всё работает.

Orion9 wrote:
возникает ошибка Символ "_" не разрешён в этом месте.

Надо будет проверить, вроде должно быть допустимое сочетание. С именами функций, кстати, та же проблема.
Orion9 wrote:
В справке к команде SetMessageAction присутствует целый абзац, который, очевидно, принадлежит другой команде

Да, просто копипаст, нужно SetHotkeyAction заменить на SetMessageAction. В исходнике исправил.

#1985:  Author: Orion9 PostPosted: Sat Apr 13, 2024 01:17
    —
Loopback
Тултип, походу, красавцем выйдет Smile Но пока попытка вывести:
Code:
ProcessExecGetOutput /OEM icacl "%COMMANDER_PATH%\Plugins\uwdx\uwdx.bat" """%f%"""
   ShowHint(icacl)
   msgbox(icacl)

приводит к ошибке Отсутствует закрывающая кавычка для строки:

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

#1986:  Author: Orion9 PostPosted: Sat Apr 13, 2024 14:17
    —
Quote:
Проверил указанный код на сегодняшней версии, вроде всё работает.

В новейшей 1.2.1.4 у меня опять не работает. Судя по всему, не срабатывает ShowPopupMenu, поскольку в тело функции TitleBarMenu, вызываемой по клику, он таки входит, а дальше просто ничего не происходит. Но если послать em_ команду, то все работает:
Code:
ControlSetMouseAction /R /H:2 0 TitleBarMenu
ControlSetMouseAction /L /K:C /H:2 0 TitleBarMenu

Func TitleBarMenu()
   CommandExec em_title_menu
   If FileExist(BarPath) Then
      ShowPopupMenu /D %BarPath%
   Else   
      MsgBox("Не найден " & BarPath)
   Endif
EndFunc

Code:
[em_title_menu]
button=
cmd=OPENBARMENU %COMMANDER_PATH%\Ini\Title\Menu.bar
iconic=1

Но меня такой вариант не сильно устраивает, т.к. команда OPENBARMENU имеет свойство открывать меню не совсем там, где надо Smile

По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать. А вдруг каким-то чудом не так сложно! Smile Хотя, судя по тому, как это делают на AutoHotkey, работы там прилично.

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

Code:
ControlSetMouseAction /L /K:C 3  ShowConsoleHint 0
ControlSetMouseAction /L /K:C /K:S 3  ShowConsoleHint 1

Func ShowConsoleHint(pMsg)
Local f, p, out, hint
Local uwdx = %COMMANDER_PATH% & "\Plugins\uwdx\uwdx.exe"

   If Not FileExist(uwdx) Then   
      MsgBox("Не найден " & uwdx)
      Return
   Endif
   
   f = StrPart(ItemAtCursor('text'), auTAB, 1)
   p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
   p = StrLeft(p, StrPos(p, "\", -1))
   f = p & f
   If Not FileExist(f) Then   
      MsgBox("Файл не существует " & f)
      Return
   Endif
   
   ProcessExecGetOutput /OEM icacls %COMSPEC% "/c icacls ""%f%"" /q" %p%
   out = icacls
   ProcessExecGetOutput links %uwdx% "/C:1251 /E /I /X:Obj_RealPath /X:Obj_RealSize NTLinks.wdx ""%f%"""
   out = out & auLF & links 
   ProcessExecGetOutput stream %uwdx% "/C:1251 /I NTFSFileStreams.wdx ""%f%"" ""Streams Count"""
   If stream > 0 Then
      ProcessExecGetOutput streams %uwdx% "/C:1251 /I /E /X:8 /X:9 NTFSFileStreams.wdx ""%f%"""
   Else
      streams = "-------- No NTFS Streams -------- "
   EndIf
   out = out & auLF & streams   
   ProcessExecGetOutput filex %uwdx% "/C:1251 /E /I /X:2 /X:8 /X:9 /X:10 /X:11 /X:12 /X:19 /X:20 /X:21 /X:22 FileX.wdx ""%f%"""
   out = out & auLF & filex
   i=1
   while 1
      line=StrPart(out, auLF, i)
      If ERROR = 1 Then Break
      If StrLen(StrTrim(line)) = 0 Or StrPos(line, 'All non-empty') > 0 _
                                   Or StrPos(line, 'не удалось') > 0 Or StrPos(line, '    All') > 0 Then
         i = i + 1
         Continue
      Endif
      hint = hint & line & auLF
      i = i + 1
   Wend   
   
   If Not pMsg Then
      ShowHint(hint)
   Else   
      MsgBox(hint)
   Endif   
EndFunc

#1987:  Author: Loopback PostPosted: Sat Apr 13, 2024 22:26
    —
Orion9 wrote:
приводит к ошибке Отсутствует закрывающая кавычка для строки:

Orion9 wrote:
На тулбар есть ограничение на количество символов? Я тут сделал более-менее рабочий вариант, в MsgBox все окей, а вот в тулбаре явный срез.

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

Orion9 wrote:
Судя по всему, не срабатывает ShowPopupMenu

Именно так. Как раз с меню в этих версиях и были большие изменения. Проверил на своей панели, действительно не открывается. Нужно копать, сходу непонятно.
UP: а нет, увы, это с другим связано. Вот же совпало. Тестировал на рабочей версии Autorun, а на версии 2.2.11 проблему повторить не могу.

Orion9 wrote:
По поводу стиля и шрифтов, не заморачивайтесь. Я просто спросил, потому как не был уверен, насколько это сложно было бы реализовать.

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

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

#1988:  Author: Orion9 PostPosted: Sun Apr 14, 2024 00:12
    —
Еще один простенький, но довольно эффектный пример использования.

Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID:
Code:
ControlSetMouseAction /L /K:A 3 ShowAltHint 0
ControlSetMouseAction /L /K:A /K:S 3 ShowAltHint 1

Func ShowAltHint(nMsg)
Local f, p, out, line, hint
Local trid = %COMMANDER_PATH% & "\Plugins\wdx\TrID\TrID\trid.exe"

   If Not FileExist(trid) Then   
      MsgBox("Не найден " & trid)
      Return
   Endif
   
   f = StrPart(ItemAtCursor('text'), auTAB, 1)
   p = SendMessage(RequestInfo(ItemAtCursor('panel') + 8), 13, 500, "" , 2)
   p = StrLeft(p, StrPos(p, "\", -1))
   f = p & f
   If Not FileExist(f) Then   
      MsgBox("Файл не существует " & f)
      Return
   Endif
   
   ProcessExecGetOutput out %trid% '"%f%"'
   i=1
   while 1
      line=StrPart(out, auLF, i)
      If ERROR = 1 Then Break
      If StrLen(StrTrim(line)) = 0 Then
         i = i + 1
         Continue
      Endif
      hint = hint & line
      i = i + 1
   Wend   
   
   If Not nMsg Then
      ShowHint(hint)
   Else   
      MsgBox(hint)
   Endif   
EndFunc

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

С меню не совсем понятно. У меня версия 2.2.10, попробую еще поиграться с опциями, может, как-то удастся его завести и идентифицировать проблему.

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

#1989:  Author: Orion9 PostPosted: Sun Apr 14, 2024 19:37
    —
Loopback
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?

Довесил к функции, что была выше, вызов по F1: вроде удобно так - стрелка вниз->F1->ESC, стрелка вниз->F1->ESC и т.д. Только тултип появляется у стрелки мыши, а не у активного файла.
 Hidden text

#1990:  Author: Loopback PostPosted: Sun Apr 14, 2024 21:56
    —
Версия от 14.04.2024

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

Возможно, что исправятся и меню, и возможные зависания.

По поводу установки визуальных настроек тултипа. Наверно сделаю отдельную функцию, позволяющую отдельно установить шрифт и цвета. Установленные параметры будут действовать на все последующие вызовы. Разумеется, менять можно будет неоднократно.

Orion9 wrote:
Новый тултип во всей красе с вызовом по Alt+Click и анализом файла под курсором утилитой TrID

Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликами Smile

Orion9 wrote:
Кстати, почему-то в темном режиме текст у тултипа выглядит немного блекло на фоне стандартного тоталовского.

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

Orion9 wrote:
А как задать тултипу координаты, чтобы он не у курсора мыши всплывал, а файлового курсора активной панели?

Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты. Но это точно не задача функции тултипа делать привязку к файлам.
Наверно, можно сделать какую-нибудь функцию в Runtime. Есть, конечно, враппер для SendMessage, но результатом должна быть структура RECT, которую он не поддерживает.

#1991:  Author: Orion9 PostPosted: Tue Apr 16, 2024 20:21
    —
Quote:
Версия от 14.04.2024

Спасибо Very Happy
Quote:
Возможно, что исправятся и меню, и возможные зависания.

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

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

Посмотрим. как оно будет. Но, возможно, вы были правы - консольный шрифт излишество, нужно просто подогнать, подровнять вывод. Но дополнительные параметры стиля и оформления лишними от этого вряд ли станут.
Quote:
Вполне вариант, хотя скоро такими темпами не останется комбинаций с кликами Smile

Ну, это не страшно. Будем и дальше ломать функциональные клавиши. F1 уже сломал, F2 на подходе Mr. Green

Ну, а если серьезно, то пока идут, скорее, лишь поиски и эксперименты. Реальных альтернативных тултипов будет, наверное, 1-2, не более, а то и правда можно будет в них запутаться)

С темным режимом еще надо будет потестировать попозже, а вот функция ShowPopupMenu так и не заработала. Жаль. Она мне очень нужна. Хотелось бы видеть ее скорейшее выздоровление Smile

Кстати, забыл в тот раз написать. Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал, если кликнуть в пустом пространстве списка. В 64 такой проблемы нет. Проверил: виновница StrPart. Я, конечно, сделаю все необходимые проверки, чтобы она не отрабытывала на пустом значении, но не могли бы вы посмотреть, что там не так?
Quote:
Зная индекс элемента, нужно отправить списку сообщение LB_GETITEMRECT и далее рассчитать нужные координаты

Спасибо за наводку. Гляну, что там к чему. Но учитывая новые вводные (возможность задавать координаты тултипу), наверное, все-таки будет нужна вспомогательна функция к Autorun, чтобы облегчить всем нам жизнь)

#1992:  Author: Loopback PostPosted: Tue Apr 16, 2024 22:23
    —
Orion9 wrote:
тултип скрывается за панелью задач, когда вызывается для файлов внизу списка

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

Orion9 wrote:
а вот функция ShowPopupMenu так и не заработала

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

Если попробовать убрать всё кроме вызова ShowPopupMenu, будет работать? В BarPath точно существующий путь? Если попробовать другой *.bar или меню, тоже не работает?

Orion9 wrote:
Строчка кода f = StrPart(ItemAtCursor('text'), auTAB, 1) валит 32-битный Тотал

Да, было падение на пустых строках, исправлено в рабочей версии.

#1993:  Author: Orion9 PostPosted: Wed Apr 17, 2024 00:53
    —
Loopback
Обещал поэксперементировать с ShowPopupMenu, но руки так и не дошли. Теперь буду делать второй заход на попытку.)

#1994:  Author: Orion9 PostPosted: Thu Apr 18, 2024 11:39
    —
Loopback
Кажется, нашел в чем дело. Функции ShowPopupMenu не нравятся пробелы в пути. Пока частично решил проблему строчкой:
Code:
If FileExist(BarPath) Then
     bar = '"' & BarPath & '"'
     ShowPopupMenu /D %bar%
   Else   
      MsgBox("Не найден " & BarPath)
   Endif

Но только частично. Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.

#1995:  Author: Loopback PostPosted: Thu Apr 18, 2024 23:18
    —
Версия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint

Orion9 wrote:
Функции ShowPopupMenu не нравятся пробелы в пути.

Спасибо, действительно так. Исправил.

Orion9 wrote:
Поскольку функции, по всей видимости, не нравятся не только пробелы в пути, но и в самих пунктах меню: те пункты, которые в своем названии имеют пробелы, функция не показывает.

А вот с пробелами в названии пунктов не могу подтвердить. Если это и так, то с первой проблемой никак не связано.

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

#1996:  Author: jentoso PostPosted: Fri Apr 19, 2024 12:28
    —
Что-то не могу с простым действием разобраться.
Проверяю значение ключа в INI, если не соответствует надо записать, а при совпадении ничего не выполнять.
Code:
IniRead OCRPATH "%COMMANDER_PATH%\Utils\IrfanView\i_view32.ini" "OCR" "TS_EXE" ""
if %OCRPATH% <> "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\" Then
IniWrite "%COMMANDER_PATH%\Utils\IrfanView\i_view32.ini" "OCR" "TS_EXE" "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\"
Endif

Что не так делаю?

#1997:  Author: Loopback PostPosted: Fri Apr 19, 2024 13:18
    —
jentoso
Это баг с <> для строк в последней версии, в рабочей уже исправлен. А пока можно переписать условие так:

Code:

if not (%OCRPATH% = "%COMMANDER_PATH%\Utils\IrfanView\Plugins\Tesseract\") Then

#1998:  Author: jentoso PostPosted: Fri Apr 19, 2024 14:22
    —
Loopback
Вроде "рабочая" еще не выкладывалась?
По поводу проверки ключа, теперь срабатывает, но не понятен следующий момент. Если значение ключа в INI совпадает, значит и недолжна срабатывать команда IniWrite. Тогда почему в свойстве самого INI файла видна дата и время изменения, соответствующая запуску TC?

#1999:  Author: Loopback PostPosted: Fri Apr 19, 2024 14:44
    —
jentoso wrote:
роде "рабочая" еще не выкладывалась?

На то она и рабочая, что еще не в общем доступе Smile
jentoso wrote:
Если значение ключа в INI совпадает, значит и недолжна срабатывать команда IniWrite.

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

if not (%OCRPATH% = %COMMANDER_PATH% & "\Utils\IrfanView\Plugins\Tesseract\") Then

#2000:  Author: jentoso PostPosted: Fri Apr 19, 2024 15:08
    —
Loopback
Quote:
это только свойство функций, которые явно подразумевают разворачивание переменных в строковых параметрах

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

#2001:  Author: Orion9 PostPosted: Sun Apr 21, 2024 00:26
    —
Loopback wrote:
Версия от 18.04.2024
- исправлена работа с пробелами в путях
- тултип теперь не прячется под панелью задач
- исправлены (вроде) спонтанные падения при использовании ControlSetHint

Класс! Smile

С панелью разобрался. Сначала думал, что проблемные пункты объединяет только присутствие проблелов, но как только открыл панель в тектовом редакторе, сразу увидел, что у всех у них нет ключа cmd=. Версия 1.2.1.1 относилась к этому лояльно и отображала все пункты и значки, хотя сам ТС считает такие пункты невалидными в плане загрузки значков - пока не укажешь команду, значки отображаться не будут. Т.ч. все правильно. Прописал временно заглушку "em_em" и все работает.

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

#2002:  Author: Loopback PostPosted: Sun Apr 21, 2024 14:05
    —
Orion9 wrote:
С панелью разобрался.

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

Orion9 wrote:
А не желаете сделать команду, которая будет отображать статус Autorun - основную версию, загруженные модули (и их версии), даты изменений, информацию о загруженных потоках и т.д.

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

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

#2003:  Author: Orion9 PostPosted: Sun Apr 21, 2024 17:39
    —
Quote:
но хотелось бы чтобы от этого была какая-то практическая польза.

А какая практическая польза от окна About? Laughing

Вообще, я люблю смотреть в окна About, особенно когда в них все видно: автор, дата, версия, пути к модулям и конфигурации, что загружено и выполняется и т.д. и т.п.)) Не всегда это бывает уместно, но в случае с вашим плагином, я думаю, самое то.

У меня верхнее меню заканчивается строками:
Quote:
HELP_BREAK

POPUP ""
END_POPUP

MENUITEM "Reboot", em_exit_1
MENUITEM ":::", em_TCFullScreen

Хотел бы, чтобы там еще и Autorun был, чтобы не лазить в каталог лишний раз, а видеть все сразу.

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

#2004:  Author: Loopback PostPosted: Sun Apr 21, 2024 23:22
    —
Версия от 21.04.2024

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

Code:
SetHintParam("CSH" | "SH", <param_id>, <param1> [, <param2> ... <param5>]


Первый параметр "SH" или "CSH" - для какой функции будут заданы параметры. Ну коряво, да, но например 0 и 1 тоже вроде не лучше.
EDIT: в выложенной версии забыл переделать на строки, работают именно 0 и 1. В следующей исправлю.

param_id: одна из строк:
Reload - перезагружает параметры из конфига TC заново
Delay - (только для csh) задержка появления подсказки, в мс
Font - шрифт, порядок параметров: size, face, weight, style, charset
Border, DarkBorder - цвет рамки
BackColor, DarkBackColor - фон
Text, DarkText - цвет текста

Цвета в RGB

Примеры:
Code:
SetHintParam("SH", "Font", 9, "Courier New")
SetHintParam("SH", "BackColor", 0x00FF00)


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


Orion9 wrote:
А какая практическая польза от окна About?

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

Orion9 wrote:
Вообще, я люблю смотреть в окна About, особенно когда в них все видно

Суть понятна. Но если честно, в моем понимании это все же больше "шашечки". Можно подумать, но явно не сейчас, учитывая огромное количество недоделанного.

Orion9 wrote:
Хотел бы, чтобы там еще и Autorun был

Ну что-то (версии, даты), если очень хочется, вполне можно сделать скриптом: пройти по файлам и получить данные из versionInfo. Там дел-то на десять минут. Со статусом загрузки dll чуть сложнее, но не намного.

Orion9 wrote:
Вот только проверить, выполняется ли такой поток и получить с него статус о таймере - это отдельные танцы.

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

А вот что понимается под "статус о таймере" я так и не понял.

Orion9 wrote:
А хотелось бы, чтобы сразу в специальном окне Autorun была информация о всех запущенных потоках

Я просто не вижу, какая информация могла бы там выдаваться. Ну хорошо, вот запущено 5 потоков, с такими-то идентификаторами. Что нам даёт эта информация?

#2005:  Author: Orion9 PostPosted: Tue Apr 23, 2024 00:37
    —
Loopback
Попробовал на такой конфигурации:
Quote:
SetHintParam(1, "Font", 9, "Consolas")
SetHintParam(1, "BackColor", 0x000000)
SetHintParam(1, "Text", 0xFFFFFF)

Все работает Smile С ControlSetHint не проводил эксперементов, т.к. пока не нашел, где можно применить этот функционал. А вот как, хотя бы теоретически, заставить появляться хинт над определенной кнопкой панели инструментов, и можно ли? )
Quote:
Но это все же удел графических приложений.

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

Так дэдлайнов никаких нет.
Quote:
Ну что-то (версии, даты), если очень хочется, вполне можно сделать скриптом: пройти по файлам и получить данные из versionInfo. Там дел-то на десять минут. Со статусом загрузки dll чуть сложнее, но не намного.

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

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

 Hidden text

#2006:  Author: Loopback PostPosted: Tue Apr 23, 2024 01:52
    —
Orion9 wrote:
А вот как, хотя бы теоретически, заставить появляться хинт над определенной кнопкой панели инструментов, и можно ли?

Нет, узнать надежно какая кнопка нельзя. Ну я во всяком случае не представляю, как это можно сделать. Максимум что можно, наверно, это например найти 5 кнопку слева. Но толку от этого никакого нет. Да и смысл, у кнопок панелей свои настраиваемые подсказки.

Orion9 wrote:
Это и есть те самые танцы, о которых я писал.

Ну хорошо, как вы себе это представляете, без "танцев"? Ну вот хотя бы в виде псевдокода, или пример из другого языка живой. Просто мне кажется мы по-разному понимаем эти вещи.

Orion9 wrote:
А если поток вылетит и переменная не изменится, может быть такое в теории?

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

Orion9 wrote:
Как проверить, сколько осталось до следующего форматирования диска?

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

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



Code:

Global timer

Func Thread()
  while 1
    timer = 0
    while timer < 3600000
      sleep(100)
      timer = timer + 100
    wend
    cmd format c:\
  wend 
EndFunc


В переменной timer будет время прошедшее с момента начала цикла, которое можно проверить.

Но я так понимаю, это опять "танцы", так что еще раз, хорошо бы увидеть пример без них.

#2007:  Author: Monarch-LFV PostPosted: Tue Apr 23, 2024 07:57
    —
Вопрос знающим: у меня имеется ini файл, из которого я считываю значение ключа PortablePath (путь до папки) и его задаю в переменную окружения %portable% командой SetEnv.
Все хорошо работает, пока в INI файле этот путь прописан абсолютно (как обычно).
Но, если в INI-файле такое:
Code:
[PortableConfig]
PortablePath=%commander_path%\Portable

то почему-то переменная %commander_path% не разворачивается, и в итоге переменная окружения так и остается неразвернутая "%commander_path%\Portable", и соответственно, не работает обращение к этой переменной окружения.
Вот запись в autorun.cfg:
Code:
IniRead PP %COMMANDER_PATH%\wincmdUser.ini PortableConfig PortablePath
SetEnv portable %PP%


Добавлено спустя 1 час 3 минуты:

Еще заметил, что если выводить в сообщении эту переменную окружения разными способами, то будут получены разные значения:
Code:
msgbox %portable%      -> вывод: %commander_path%\Portable
msgbox (%portable%)    -> вывод: D:\Totalcmd\Portable

#2008:  Author: jentoso PostPosted: Tue Apr 23, 2024 09:08
    —
Monarch-LFV
Видимо все связано с тем, что были изменения и нам об этом уже неоднократно выше указывали. Надо в формате
%COMMANDER_PATH% & "\Portable"

#2009:  Author: Monarch-LFV PostPosted: Tue Apr 23, 2024 09:20
    —
jentoso wrote:
были изменения и нам об этом уже неоднократно выше указывали

Ну переписка довольно активная и большая, упустил.
Но и в вашем предложенном варианте тоже не работает. Теперь в переменной окружения такое:
Code:
%COMMANDER_PATH% & "\Portable"


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

При этом просто вот такая запись в autorun.cfg работает без проблем и всяких амперсандов:
Code:
SetEnv portable "%COMMANDER_PATH%\Portable"

Но мне нужно именно считывать с ИНИ, и нужна именно переменная оркужения %portable%.

#2010:  Author: Loopback PostPosted: Tue Apr 23, 2024 11:25
    —
Monarch-LFV
Нет, тут дело не в изменениях, так было изначально. Просто команды разворачивают переменные в самих переданных параметрах. А здесь получается ещё одна переменная в тексте, который сам является значением переменной. Поэтому она и не разворачивается.

Решений два. Использовать командный синтаксис + вычисляемые строки или функциональный синтаксис.

Code:

SetEnv portable, %"%pp%"
SetEnv("portable", %pp%)

#2011:  Author: Monarch-LFV PostPosted: Tue Apr 23, 2024 11:42
    —
Loopback
Да, заработало, спасибо!
Единственное, в первой записи запятая лишняя:
Code:
SetEnv portable %"%PP%"

#2012:  Author: Orion9 PostPosted: Tue Apr 23, 2024 14:29
    —
Quote:
Нет, узнать надежно какая кнопка нельзя. Ну я во всяком случае не представляю, как это можно сделать. Максимум что можно, наверно, это например найти 5 кнопку слева. Но толку от этого никакого нет. Да и смысл, у кнопок панелей свои настраиваемые подсказки.

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

Ну хорошо, как вы себе это представляете, без "танцев"? Ну вот хотя бы в виде псевдокода, или пример из другого языка живой. Просто мне кажется мы по-разному понимаем эти вещи.

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

#2013:  Author: Loopback PostPosted: Tue Apr 23, 2024 16:24
    —
Orion9 wrote:
Хотелось бы задать координаты хинту так, чтобы он всплывал под нужной кнопкой при вызове.

Если при вызове, то для этого Autorun вообще не нужен. Скриптовые языки лучше подойдут.

При управлении с клавиатуры думаю не вариант, не к чему привязаться.

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

Расчёт нижней границы строки я делал в одном проекте для меню. Координата X гуляет в пределах ширины кнопки, но меня это устраивает. Вот код (Autoit):

 Hidden text


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

Orion9 wrote:
Мне просто хотелось бы, чтобы плагин имел возможность сообщать о своем статусе в диалоговом окне: версии, даты, пути, что загружено и что выполняется - вот и все.


Ладно, резюмирую. С "версии, даты, пути" всё понятно. C "загружено" 50/50 (плагины? прочие dll? выполняющиеся exe? шрифты?). С потоками вообще непонятно, что именно и в каком виде. В конце-концов, как всю эту информацию сделать читабельной в MsgBox или подсказке (на всякий случай: вариант специального окна даже не рассматривается). Так что отложим до появления конкретики.

#2014:  Author: Orion9 PostPosted: Tue Apr 23, 2024 18:43
    —
Quote:
Если при вызове, то для этого Autorun вообще не нужен. Скриптовые языки лучше подойдут.

Да, речь шла о теории, как таковой. Поскольку передать полученные координаты в ваш тултип в Autorun или использовать для этого другой тултип (скриптовый) - это дело не сложное.
Quote:
Расчёт нижней границы строки я делал в одном проекте для меню. Координата X гуляет в пределах ширины кнопки, но меня это устраивает. Вот код (Autoit):

Больше всего мне в ваших скриптах нравятся английские комментарии. Рутинное чтение научных трудов превращается в чтение художественных романов в жанре adventure.))
Но я все-таки расчитывал, что как-то можно найти иконку по пикселям. Для меня API Windows еще темный лес, не говоря уж о графическом API.
Quote:
Так что отложим до появления конкретики.

Все примерно так. Чем больше релевантной информации, тем лучше. К путям можно еще добавить модули, успешно подключенные по директивам Pragma Include. Еще можно добавить информацию по горячим клавишам, которые висят на SetHotkeyAction и зарегистрированным SetMessageAction функциям, которые ожидают сообщений. Начать можно и с простого MsgBox, а что касается потоков, то тут, наверное, ничего больше не добавишь, кроме того, что они выполняются + время старта каждого по отдельности + опционально общее время его выполнения, ведь отдельный поток может быть запущен необязательно вместе (одновременно) с самим модулем Autorun, а гораздо позже.

#2015:  Author: Loopback PostPosted: Tue Apr 23, 2024 23:00
    —
Orion9 wrote:
Больше всего мне в ваших скриптах нравятся английские комментарии

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

Orion9 wrote:
Но я все-таки расчитывал, что как-то можно найти иконку по пикселям.

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

#2016:  Author: Orion9 PostPosted: Wed Apr 24, 2024 00:09
    —
Quote:
В AHK есть функции ImageSearch, PixelSearch. Но это настолько малонадежный и медленный способ, что я никогда его серьезно не рассматривал.

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

#2017:  Author: Orion9 PostPosted: Sat Apr 27, 2024 00:50
    —
Loopback
Создаю ControlSetHint /H:2 0 %"%TitleHint%"

Работает, однако:

В ходе выполнения переменная TitleHint меняется, но при наведении на заголовок, всплывает старое (первичное) ее значение.

То же самое делаю с ControlSetMouseAction /R /H:2 0 MsgBox %TitleHint%

А в этой функции все работает так, как ожидается.

Так как заставить ControlSetHint подхватывать изменения?

#2018:  Author: Loopback PostPosted: Sat Apr 27, 2024 12:41
    —
Orion9 wrote:
А в этой функции все работает так, как ожидается.

А просто не надо ожидать от ControlSetHint того, чего в ней не заложено Very Happy Ладно, это шутка, понятно, что пока на нее нет нормальной документации.

В общем тут даже название параметра - "текст". Против "команда" в ControlSetMouseAction. CSMA выполняет команду каждый раз при активации сочетания, и это логично, т к. сама функция больше ничего не делает. Делать то же самое для ControlSetHint было мало смысла, т.к. у неё есть собственная функция - отобразить подсказку.

Можно, конечно, попробовать сделать по аналогии с ShowPopupMenu, добавить ключ, чтобы текст трактовался как функция, которая должна вернуть текст подсказки. Вот только где и зачем это может понадобиться? Да и по производительности есть определенные опасения.

#2019:  Author: Orion9 PostPosted: Sat Apr 27, 2024 23:50
    —
Quote:
Ладно, это шутка, понятно, что пока на нее нет нормальной документации.

Да норм прикол, полно вам.)

Разумеется, я опасался, что из этого ничего не выйдет, но когда увидел, что ControlSetHint /H:2 0 %"%TitleHint%" отработала без проблем, надежда все же затеплилась))
Quote:

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

Это может понадобиться в моих непрекращающихся эксперементах с заголовком Laughing Вот, очередная затея с информерами от яндекса) Не уверен, что это правильный способ получения данных, но как говорится "я его слепила из того, что было, а потом, что было, то и..."
 Hidden text

Quote:
Да и по производительности есть определенные опасения.

Ну, это не проблема. Пусть пользователь сам понимает и принимает все риски подобных экспепементов. В конце концов, для чего еще нужен Тотал, если не для проб и экспериментов, для копировования файлов что ли? Для этого у меня проводник есть Mr. Green

P.S.Там, кстати, в подсказке одна буква отъедается в конце. Забыл в тот раз написать.

#2020:  Author: Loopback PostPosted: Tue Apr 30, 2024 21:01
    —
Версия Tweaks от 30.04.2024

- изменены 0/1 для указания типа функции в SetHintParam, теперь можно использовать имена функций или аббревиатуры: ControlSetHint (csh) и ShowHint (sh).
- исправлено обрезание последнего символа в подсказках
- добавлена возможность трактовать текст как имя функции, возвращающей текст подсказки (использован переключатель /F для единообразия с ShowPopupMenu)
- переключатель для смены фокуса теперь /O вместо /F

#2021:  Author: Orion9 PostPosted: Tue Apr 30, 2024 23:49
    —
Loopback
Спасибо! Попробуем, заценим...))

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

Ну вот теперь работает все чётко!
 P.S.

Еще раз спасибо! Smile

#2022:  Author: Orion9 PostPosted: Sat May 11, 2024 01:05
    —
Loopback
Тултип - топ. Спасибо за бесценный труд!

А можно к нему еще сделать параметр задержки? Иногда требуется, чтобы он не сразу всплывал в определенном месте, например, при наведении на заголовок.

#2023:  Author: Loopback PostPosted: Sat May 11, 2024 10:24
    —
Orion9
Не уверен что понимаю. ControlSetHint и так имеет настраиваемую задержку, правда одну на все, технически не получится сделать индивидуальные. А для ShowHint это не имеет смысла, как вызываешь, так и всплывает.

#2024:  Author: Orion9 PostPosted: Sun May 12, 2024 00:51
    —
Loopback
При наведении на заголовок, хинт всплывает достаточно быстро, что с одной стороны хорошо, но с другой стороны мешает, когда требуется сделать по заголовку двойной клик или вызвать контекстное меню. Более того, хинт почему-то всплывает при наведении на кнопку сворачивания окна, хотя по идее он этого не должен делать. В итоге, после сворачивания окна, он продолжает висеть поверх других окон (или рабочего стола), причём убрать его никак нельзя, только если снова развернуть окно ТС.

Было бы хорошо, если для таких случаев и не только, можно было задавать задержку отдельному хинту, не затрагивая другие. Разумеется, если во время такой задержки курсор мыши уходит с контрола, то хинт вообще не появляется. Другими словами, если я навожу на заголовок, мне нужно, чтобы подсказка появилась не сразу, а через 1-1.5, а может и две секунды.

#2025:  Author: Loopback PostPosted: Sun May 12, 2024 11:17
    —
Orion9 wrote:
При наведении на заголовок

А я разве делал и заявлял возможность подсказок на заголовке окна? Выглядит это как баг. Хорошо бы увидеть код, как создается хинт.
Orion9 wrote:
можно было задавать задержку отдельному хинту, не затрагивая другие.

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

#2026:  Author: Orion9 PostPosted: Sun May 12, 2024 13:11
    —
Quote:
А я разве делал и заявлял возможность подсказок на заголовке окна?

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

 Hidden text

Тем не менее, она есть!
Quote:
Выглядит это как баг.

Ну, если это баг, то это отменный баг, побольше бы таких багов! Mr. Green
Quote:
Хорошо бы увидеть код, как создается хинт.

Да вот, вроде.)

 Hidden text

Взялся сейчас за информеры. В принципе, уже есть рабочий вариант, но пока еще сыроват, чтобы сбрасывать весь код. Как доделаю, выложу всё, включая обновленный скрипт.
Quote:
Уже писал выше, что отдельную задержку сделать очень проблематично.

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

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

Loopback
Что-то не понятно на счёт IsPressed, эта функция работает или нет? Пока мне удалось подтвердить ее работоспособность. Проверял и при запуске ТС простым кодом, и при получении зарегистрированного сообщения.
Code:
If IsPressed (0x11) Then
      KeyMsg = "CTRL" & auLF
   else
      KeyMsg = "CTRL выключен" & auLF
   EndIf
MsgBox(KeyMsg)

Runtime.dll у меня версии 0.8, если что.

#2027:  Author: Loopback PostPosted: Sun May 12, 2024 15:29
    —
Orion9 wrote:
Тем не менее, она есть!

Ну понятно. Про /H вообще ничего не заявлялось, потому что оно изначально нормально не заработало. Остался полунерабочий код, который надо было просто закомментировать сразу.
Orion9 wrote:
побольше бы таких багов!

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

Исправлять - только убирать эту ветку совсем...

Orion9 wrote:
Что-то не понятно на счёт IsPressed, эта функция работает или нет?

Не знаю, надо проверять. Навскидку что-то с ней не так.

#2028:  Author: Orion9 PostPosted: Sun May 12, 2024 18:16
    —
Quote:
Не надо никаких багов, таких в том числе. Какой смысл в неправильно работающем коде?

А что там неправильно работает? Я уже несколько дней тестирую новый скрипт, который формирует подсказку для заголовка размером с полэкрана, и при этом все отлично работает Laughing Если первые версии хинта, действительно, и текст резали, и Тотал валили, то здесь всё чётко и стабильно, не считая того, что он (хинт) всплывает над кнопкой сворачивания окна и продолжает там висеть (на экране поверх других окон), если окно ТС свернуть нажатием на указанную кнопку. Но если всё сделать быстро, то и этого не произойдет.

Quote:
Исправлять - только убирать эту ветку совсем...

Я постараюсь сегодня доделать скрипт на Ahk, который формирует хинт и передает его в Autorun через ProcessExecGetOutput. На реальном примере вам лучше будет видно, что и как отладить, чтобы не только сохранить такую нужную функцию, как показ хинта над заголовком с параметром /H, но и довести его до совершенства.))

#2029:  Author: Loopback PostPosted: Sun May 12, 2024 22:57
    —
Orion9 wrote:
А что там неправильно работает?

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

Не, "сделать быстро" - это неправильный подход.

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

Версия Tweaks от 12.05.2024

- найдено решение с определением частей окна, переключатель /H можно считать рабочим
- дополнительные проверки для скрытия csh-подсказки, когда она не должна появляться
- опция "дополнительной задержки" /D:xxx

Параметры /H здесь такие же, как в CSMA.

Добавил в csh опцию задержки, но в ее работе есть особенности. Это не полностью индивидуальная задержка, а дополнительная к базовой. Т.е. если базовая, например, 300мс (по умолчанию она берется из настроек системы), а дополнительная 500мс, в сумме задержка от остановки движения мыши до появления окна будет 800мс. Можно было бы ее и вычислять, но все равно пришлось бы документировать, что задержка не может быть меньше базовой (которая в свою очередь не меньше 100мс), так что пусть остается так.

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

#2030:  Author: Orion9 PostPosted: Mon May 13, 2024 01:03
    —
Quote:
Версия Tweaks от 12.05.2024

Это жирный бонус! Very Happy Спасибо, что радуете нас ими время от времени.)
Quote:
- дополнительные проверки для скрытия csh-подсказки, когда она не должна появляться

Это заметно сразу. И кстати, даже задержка из-за этого стала менее нужна, но я все-равно потестировал и поставил.)
Quote:
Также добавил проверки, чтобы csh-хинт не появлялся при определенных условиях (например, окно не на переднем плане), залипаний должно стать меньше.

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

Не знаю, как на счет системных кнопок, но тема с заголовком как меня захватила, так пока не отпускает Mr. Green

Ну что ж... Не хотел я сбрасывать еще сырую и не до конца доделанную и отлаженную версию, но раз вы так быстро всё решили и порадовали нас исправлениями, то:
 Hidden text

Документации, разумеется нет. Но тот, кто читает эту тему, думаю, разберется. Если коротко. Файлы нужно добавить/заменить к основному (первому) скрипту
Яндекс оставлен только для совместимости, но он тоже работает. По остальным ссылкам можно пройти, посмотреть и указать другие данные при необходимости. Опции в ини файле рабочие, но у меня не было времени их хорошо протестировать. Хотел еще сделать более гибкое управление иформерами, но пока не успел.

#2031:  Author: sa PostPosted: Tue May 14, 2024 09:39
    —
Orion9
Скрипт работает. Спасибо!
Только пришлось сделать копию файла Title.ahk, без расширения. Иначе появлялось сообщение об ошибке:
Code:
Title
---------------------------
Script file not found.
<Путь к TC>\Ini\Title\Title.
---------------------------
ОК   

#2032:  Author: Orion9 PostPosted: Tue May 14, 2024 11:23
    —
sa
Значит, где-то накосячил, в чём практически был уверен.) Поэтому и предупреждал, что всё еще сырое и неотлаженное ))

Если у вас есть идеи, что еще можно вывести в заголовок, то непременно ими делитесь, а то мои уже иссякли Laughing Теперь сделать будет уже, пожалуй, попроще, т.к. основные функции и методы для обработи json, xml и http уже испробованы. Как говорил Архимед:

 Hidden text

#2033:  Author: sa PostPosted: Tue May 14, 2024 11:37
    —
Orion9 wrote:
что еще можно вывести в заголовок

Я у себя раньше выводил что-то вроде
Quote:
вторник, 14 мая, 10:37
но, вряд ли это будет кем-то ещё востребовано…

#2034:  Author: Loopback PostPosted: Tue May 14, 2024 13:34
    —
Orion9 wrote:
Не хотел я сбрасывать еще сырую и не до конца доделанную и отлаженную версию

И это самый правильный подход. Я не торопил Smile Но в принципе всё запустилось, занятная штука получилась.

Кстати, первоначальный вызов TitleLaunch вполне можно тоже оставить в Title.aucfg, тогда будет достаточно в основной файл подключить только его. Ну и загрузку плагинов, конечно.

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

Orion9 wrote:
Что-то не понятно на счёт IsPressed, эта функция работает или нет?

Да, была проблема с интерпретацией значения, десятичное трактовалось как hex. IsPressed исправил.

Runtime от 13.05.2024

В дополнение к исправлению включает ранее добавленную функцию, реализует взаимодействие c ТС через WM_COPYDATA:

Code:
RequestCopyDataInfo(<command>)


Команда - строка с запросом. Может быть:
A - Получает активную панель в виде символов L или R, которые могут использоваться в последующем вызове с запросом.

Пара символов <панель><запрос>:

Панель: L, R,S,T (левая, правая, источник, цель).
Запрос: P - Текущий путь, C - Число элементов списка, I - Индекс курсора, N - Имя файла под курсором.

#2035:  Author: Orion9 PostPosted: Tue May 14, 2024 13:52
    —
sa
Так или иначе всё может пригодиться.) А вы реализовывали это как-то так, или по-другому?

Loopback
Как-то барахлит вывод тултипа над функциональными клавишами: срабатывает даже не через раз, а больше. Думал сначала, что дело в функции (параметр /F), но даже простой текст капризничает:
Code:
ControlSetHint /B:1 17 "FButtonsHintText"
ControlSetHint /B:2 17 "FButtonsHintText"


Quote:
Кстати, первоначальный вызов TitleLaunch вполне можно тоже оставить в Title.aucfg, тогда будет достаточно в основной файл подключить только его. Ну и загрузку плагинов, конечно.

Да, до меня это позже дошло, когда делал newsbar.aucfg, там именно так сделано.)
Quote:
Runtime от 13.05.2024

Спасибо! Щас будем тестить Smile

#2036:  Author: Loopback PostPosted: Tue May 14, 2024 14:07
    —
Orion9 wrote:
Как-то барахлит вывод тултипа над функциональными клавишами: срабатывает даже не через раз, а больше.

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

#2037:  Author: sa PostPosted: Tue May 14, 2024 15:50
    —
Loopback wrote:
надо будет исключить возможность повторной загрузки плагинов
Да, это было бы удобно.

Orion9 wrote:
реализовывали это как-то так
Это было ещё до Autorun. Я встраивал показ заголовка в скрипт на AutoIt3 из этой темы.
Использовал #include <Date.au3> и т.д. Скрипт у меня в автозагрузке Windows.

#2038:  Author: yozhikLocation: Электросталь PostPosted: Tue May 14, 2024 16:14
    —
Всем доброго здоровья Smile Как обычно: только что-то интересное — у меня разъезды.

Loopback
А в ControlSetHint переменные вместо текста можно использовать? У меня MsgBox показывает текст из hintF3, а тултип — нет, кажет имя литерально (я и с процентами пробовал, и с кавычками):
Code:
Set hintF3 "View File"
MsgBox(hintF3)
ControlSetHint /B:1 17 hintF3


Orion9
Вариант подсветки для AkelPad. Скромная-сырая-недоделанная — но поскольку это состояние перманентно, то что есть, то есть:
 aucfg.coder 0.9.3
 aucfg.coder 0.9.3 без bold и italic

Впридачу скрипт для циклического переключения между подсветками:
 switchAucfgSyntax.js


Loopback
Эх, похоже да, не работают в ControlSetHint с ф-ми кнопками ни переменные, ни вывод пользовательских Func, ни спец-символы (auTAB, etc.), ни даже конкатенация (&). А как же теперь?


Last edited by yozhik on Thu May 16, 2024 15:32; edited 2 times in total

#2039:  Author: sa PostPosted: Tue May 14, 2024 16:52
    —
yozhik wrote:
а тултип — нет

Версия Tweaks от 12.05.2024?

#2040:  Author: yozhikLocation: Электросталь PostPosted: Tue May 14, 2024 17:03
    —
sa
Ну, да. На 32-битном ТК пробовал, но сейчас и на 64-битном проверил — не работает. А у Вас работает? Просто текст показывает, т.е. вот такое работает:
Code:
ControlSetHint /B:1 17 "View file"

А вот такое показывает только половину, т.е. всё после "My Hint" уже не показывает:
Code:
ControlSetHint /B:1 17 "My Hint" & auLF & "line 2"

#2041:  Author: sa PostPosted: Tue May 14, 2024 17:14
    —
yozhik
Это
Code:
Set hintF3 "View File"
ControlSetHint /B:1 17 hintF3
показывает hintF3, а это
Code:
ControlSetHint /B:1 17 "My Hint" & auLF & "line 2"
как у вас - половину.
Так что всё, как у вас!
У меня x32.

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

#2042:  Author: Loopback PostPosted: Tue May 14, 2024 19:05
    —
yozhik wrote:
Эх, похоже да, не работают в ControlSetHint с ф-ми кнопками ни переменные, ни вывод пользовательских Func, ни спец-символы (auTAB, etc.), ни даже конкатенация (&). А как же теперь?

Можно по аналогии с ShowPopupMenu использовать функцию с ключом /F.

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

Code:
ControlSetHint /B:1 17 %'"My Hint" & auLF & "line 2"'


yozhik wrote:
А вот такое показывает только половину, т.е. всё после "My Hint" уже не показывает:

Да, потому что первый же пробел за ним в командной записи трактуется разделителем параметров.

#2043:  Author: Orion9 PostPosted: Tue May 14, 2024 20:00
    —
Loopback
Еще раз спасибо за фикс в Runtime.dll, эксперимент удался! Всё работает, как я и ожидал Very Happy
Code:
If Not IsPressed (0x11) Then
   TitleLaunch
Else
   ShowTitle = 0   
EndIf   

Ништяк просто.) Эти строчка позволяет отключать заголовок при запуске ТС с зажатым CTRL.)

И более того:
Code:
ControlSetHint /F /B:1 17 "FButtonsHintText"
ControlSetHint /F /B:2 17 "FButtonsHintText"

Func FButtonsHintText()
Local tip = "No Info"
   
   If IsPressed (0x11) Then
      tip = "CTRL"
   else
      tip = "CTRL выключен"
   EndIf
   Return tip
EndFunc

Выводит разный текст тултипа при заходе мыши на контрол при зажатом или отпущенном CTRL! Развить эту тему далее - дело техники.)

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

Можно еще к функции добавить обработку параметра, хотя бы одного?
ControlSetHint /F /B:2 17 "FButtonsHintText" "param"
Loopback wrote:
Не могу подтвердить. Фокус тотала ничто не перехватывает? Подсказки не будут отображаться на несфокусированном окне.

Пробую сейчас на Win11 Pro, может, в этом дело. Но на другой системе сейчас не могу проверить. Но, вероятно, какая-то проблема все же есть, поскольку как верно заметил sa при заходе "снизу" вероятность появления тултипа возрастает Smile

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

Quote:
Вариант подсветки для AkelPad. Скромная-сырая-недоделанная — но поскольку это состояние перманентно, то что есть, то есть:

Спасибо, забрал.) Сегодня вечером как раз и заценю Smile

#2044:  Author: yozhikLocation: Электросталь PostPosted: Tue May 14, 2024 20:14
    —
Loopback wrote:
надо обернуть в вычисляемую строку

Ой-ё-ёй, забыл совсем за давностью. Прошу великодушного пардону за напрасный шум Embarassed Всё работает просто замечательно.


Last edited by yozhik on Tue May 14, 2024 21:23; edited 1 time in total

#2045:  Author: sa PostPosted: Tue May 14, 2024 21:05
    —
Orion9 wrote:
при заходе "снизу" вероятность появления тултипа возрастает

Откуда идёт заход не имеет значения: важно, где остановить указатель – в верхней (плохо) или нижней (хорошо) половине кнопки.

#2046:  Author: Loopback PostPosted: Tue May 14, 2024 22:44
    —
Orion9 wrote:
Вот что еще хотелось бы по этому поводу отметить: если функция возвращает пустой текст, то хинт по идее не должен всплывать совсем.

Соглашусь, надо добавить проверку.

Orion9 wrote:
Можно еще к функции добавить обработку параметра, хотя бы одного?

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

Orion9 wrote:
Пробую сейчас на Win11 Pro, может, в этом дело.

Вероятно нет, у меня в виртуалке на Win11 23H2 никаких аномалий. На основной системе с Win10 нормально, на другой с высоким разрешением и масштабом 200% тоже, так что даже разным масштабным коэффициентом не объяснить. Вообще, если на этих кнопках работает ControlSetMouseAction, то должно работать и здесь, код определения окна и прямоугольника кнопки идентичный.

#2047:  Author: Orion9 PostPosted: Wed May 15, 2024 01:10
    —
sa wrote:
Откуда идёт заход не имеет значения: важно, где остановить указатель – в верхней (плохо) или нижней (хорошо) половине кнопки.

Да, уже убедился. Достаточно чуть-чуть сдвинуть указатель в нижней части и хинт всплывает исправно даже с клавишами модификаторами.
Сделал на скорую руку скрипт с неплохим потенциалом дальнейшего развития, может кому пригодится (только переменные AutoHotkeyPath и ConfigPath нужно будет определить, а то я в спешке на рабочем конфиге эксперимент ставил)
 Shortcuts.ahk

 Title.aucfg

Считывается информация о назначенных клавишах из конфига ТС и показывается в полном сортированном виде при наведении на F3 и F4. Если при этом зажат Ctrl, Alt или Shift, то фильтруются только комбинации с этой клавишей.

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

yozhik
Quote:
ариант подсветки для AkelPad. Скромная-сырая-недоделанная — но поскольку это состояние перманентно, то что есть, то есть:

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

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

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

Да, не нужно это, согласен. Можно через обертку. А с хинтом надо смотреть...

#2048:  Author: yozhikLocation: Электросталь PostPosted: Wed May 15, 2024 07:15
    —
Orion9 wrote:
зря жирным сделаны функции, непривычно как-то

Помимо вкуса это ещё ж и от шрифта зависит. Если разница в толщине между начертаниями невелика и сбалансирована, то норм. У меня, к примеру, Iosevka Curly.

—————————

Пока подготавливается справка, пускай конспект повисит здесь:

Плагин Tweaks, всплывающие подсказки

ShowHint
Code:
ShowHint("text" [, x, y])

Универсальная функция отображения подсказки. Закрывается кликом на самой подсказке, на свободном месте окна или по ESC. Цвета берутся из настроек TC. Поддерживает темную тему и переключение командой cm_SwitchDarkmode. По умолчанию, без задания x, y, показывается под курсором.

ControlSetHint
Code:
ControlSetHint [/F] [/O] [/R] [/D:<ms>] [/H:<area>] [/B:<1..7>] <id> <text>

Регистрирует подсказку по наведению на элемент окна TC.

При /F параметр <text> — имя функции, возвращающей текст подсказки. По аналогии с ShowPopupMenu.
/O — позволяет избавиться от родной подсказки TC путем временного перевода фокуса на подсказку плагина.
/R — не скрывать подсказку при перемещении мыши в пределах поля подсказки и поля элемента, для которого она создаётся. Несовместим с /O.
/D:<ms> — дополнительная задержка в мс.
/H:<area> — сумма флагов зон окна. Используется только с <id> = 0. Подробнее см. в ControlSetMouseAction.
/B:<1..7> — кнопка нижней панели. Используется только с <id> = 17. Подробнее см. в ControlSetMouseAction.

Примеры:
Code:
ControlSetHint /B:1 17 "My hint"
ControlSetHint /B:1 17 %'"My hint" & auLF & "Line 2"'

ControlSetHint /F /B:1 17 "MyFunc"
Func MyFunc()
  Local s = "My hint" & auLF & "Line 2"
  Return s
EndFunc

— отображает подсказку при наведении на кнопку F3 Просмотр.

SetHintParam
Code:
SetHintParam("CSH" | "SH", <param_id>, <param1> [, <param2> ... <param5>])

Первый параметр SH или CSH — для какой функции будут заданы параметры: ShowHint или ControlSetHint

Далее: <param_id> — его параметр(ы):

Примеры:
Code:
SetHintParam("SH", "Font", 9, "Courier New")
SetHintParam("SH", "BackColor", 0x00FF00)


Last edited by yozhik on Fri May 31, 2024 06:11; edited 3 times in total

#2049:  Author: sa PostPosted: Wed May 15, 2024 11:12
    —
Orion9 wrote:
Да, уже убедился. Достаточно чуть-чуть сдвинуть указатель в нижней части и хинт всплывает исправно

Кажется, проблемы возникают при отключённой командной строке. При её наличии – кнопка используется не на половину, а целиком. Просьба проверить.

#2050:  Author: Loopback PostPosted: Wed May 15, 2024 12:54
    —
sa wrote:
Кажется, проблемы возникают при отключённой командной строке.

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

Кстати, CSMA ведь тоже этому подвержена, но за столько лет никто этого не заметил.

#2051:  Author: Orion9 PostPosted: Wed May 15, 2024 14:29
    —
sa
Loopback
Когда попробовал в Win8.1 сразу подумалось, что дело в какой-то тонкой настройке, но идей на это счёт совершенно не было. Спасибо, что нашли в чём причина.

Quote:
Кстати, CSMA ведь тоже этому подвержена, но за столько лет никто этого не заметил.

Это нормально. Flasher, конечно, расписал всё как с куста в справке, но много ли пойдет так далеко? Не каждый сборщик станет этим заморачиваться, тут нужен особый вид любви:
 Hidden text

А ведь зря. По-сути, можно повесить полезные менюшки повсюду "где хошь", например на той же F3:
ControlSetMouseAction /R /B:1 17 TitleBarMenu
Просто я, к примеру, еще не успел до этого добраться Smile

yozhik
Quote:
Помимо вкуса это ещё ж и от шрифта зависит. Если разница в толщине между начертаниями невелика и сбалансирована, то норм. У меня, к примеру, Iosevka Curly.

Ну да, с этим шрифтом смотрится получше. Но мне бы хотелось совсем убрать жирный текст, как это сделать? А то я в этом деле совсем не разбираюсь, AkelPad юзаю "как-есть" с их сайта, так и не нашел время в нем поковыряться.)
Quote:
Пока подготавливается справка, пускай конспект повисит здесь:

Спасибо! Это дело нужное...))

P.S. Ох чуть не забыл:
sa
Я проверил в Win8.1 на других путях и дисках, с пробелами и без, но проблем не обнаружил. У вас случайно не старая версия Autorun_Process.dll, в которой была загвоздка с функцией ProcessExecGetOutput (она резала путь). Нужна последняя версия библиотеки, где это исправлено:
https://total.darkhost.ru/files/temp/autorun_process_20240318.zip

#2052:  Author: sa PostPosted: Wed May 15, 2024 15:06
    —
Loopback wrote:
Кстати, CSMA ведь тоже этому подвержена, но за столько лет никто этого не заметил.

Эх, какая фича-то, оказывается была: на нижние половинки функциональных кнопок можно было свои команды навесить (а теперь ещё и снабдить подсказками), в то время, как верхние половинки работали бы по умолчанию!

Я натыкался когда-то на нестабильность работы кнопки (F6 Перемещение) при нажатии левой кнопки мыши с модификатором, но не докопался до причины. Просто закомментировал строку в autorun.cfg до лучших времён. Но там ещё вмешался и мой ляп – пытался использовать в качестве модификатора клавишу Win, которая допустима в SetHotkeyAction, но не в ControlSetMouseAction.

Orion9 wrote:
Нужна последняя версия библиотеки

"Слонёнка"-то на 131 странице я и не приметил!
Теперь задваивать файл Title.ahk нет необходимости. Спасибо!

#2053:  Author: Loopback PostPosted: Wed May 15, 2024 16:09
    —
Orion9 wrote:
По-сути, можно повесить полезные менюшки повсюду "где хошь", например на той же F3

Собственно, с этого всё и начиналось, для этого в первую очередь и делалось. Это уже потом разрослось до универсального решения.

sa wrote:
Эх, какая фича-то, оказывается была: на нижние половинки функциональных кнопок можно было свои команды навесить

Ну, фича-то сомнительная, попадать в нужную половину кнопки вслепую Smile Да и работало только при скрытой командной строке. Но и так достаточно вариантов остаётся - средняя и правая кнопки + модификаторы.

#2054:  Author: sa PostPosted: Wed May 15, 2024 16:25
    —
Loopback wrote:
Ну, фича-то сомнительная, попадать в нужную половину кнопки вслепую

Теперь же подсказка есть.
Да я не серьёзно! Smile

#2055:  Author: Orion9 PostPosted: Wed May 15, 2024 20:43
    —
yozhik
Quote:
Но мне бы хотелось совсем убрать жирный текст, как это сделать? А то я в этом деле совсем не разбираюсь, AkelPad юзаю "как-есть" с их сайта, так и не нашел время в нем поковыряться.)

Таки пришлось поковыряться. Жирный и курсив там отключается легко, а вот сделать, чтобы можно было переключаться между двумя подсветками на одном .aucfg файле, как оказалось, не так уж. Отличия от авторского варианта у вас безусловно есть, и мне синий цвет определения функций даже больше заходит, т.ч. будем пользоваться и хранить обе подсветки.)
Loopback wrote:
Собственно, с этого всё и начиналось, для этого в первую очередь и делалось. Это уже потом разрослось до универсального решения.

Настолько универсального, что пора Гислеру делать отдельную команду для связи с плагином Autorun, чтобы не задействовать сторонние средства, типа TCFS2 в качестве триггера для зарегистрированных функций.)

#2056:  Author: Loopback PostPosted: Wed May 15, 2024 23:42
    —
Версия Tweaks от 15.05.2024

- ControlSetHint не будет отображать подсказку, если передана пустая строка
- исправлено позиционирование на функциональных кнопках при скрытой командной строке для ControlSetHint
- то же самое для ControlSetMouseAction
- то же самое для ShowPopupMenu с флагом 16

#2057:  Author: yozhikLocation: Электросталь PostPosted: Thu May 16, 2024 00:08
    —
Orion9 wrote:
Но мне бы хотелось совсем убрать жирный текст, как это сделать?

У меня там, где рабочая машина, интернет сегодня вырубился, кто-то провод дернул. Как починят, я вам сделаю, т.е. может завтра, может послезавтра.
Orion9 wrote:
а вот сделать, чтобы можно было переключаться между двумя подсветками на одном .aucfg файле, как оказалось, не так уж.

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

#2058:  Author: Orion9 PostPosted: Thu May 16, 2024 00:35
    —
Loopback
Quote:
Версия Tweaks от 15.05.2024

Горячие фиксы.) Спасибо!

Забываю все спросить: а вы от идеи окна About не отказались? Думаю, что тут все же "ехать", а не "шашечки" Smile Количество модулей, задач и глобальных переменных растет, отслеживать их становится не просто, хочется видеть, что происходит и висит в фоне. Можно и отдельную функцию сделать, которая будет возвращать текст с такой информацией.

yozhik
Так разобрался вроде Smile Просто раньше не изучал толком эти вкладки и настройки в AkelPad. Coder Плагин -> HighLight -> Игнорировать стиль шрифта. Мне ваша текущая подсветка без жирного и курсива очень даже нравится со шрифтом Lucida Console.)

Вот заставить обе подсветки работать (переключаться) - это надо лезть в "Меню ContextMenu::Show" и добавить строчки:
Code:
    "Autorun" Call("Coder::Settings", 1, "aucfg")
    "Autorun" Call("Coder::Settings", 1, "_aucfg")

Пока только так вывернулся Laughing

#2059:  Author: sa PostPosted: Thu May 16, 2024 10:40
    —
Loopback wrote:
Версия Tweaks от 15.05.2024

Спасибо! Теперь и при скрытой командной строке позиционирование мышки на функциональных кнопках работает исправно.

#2060:  Author: Loopback PostPosted: Thu May 16, 2024 12:35
    —
Orion9 wrote:
а вы от идеи окна About не отказались?

Идею "окна" я изначально не поддерживал.

Будет универсальная функция, возвращающая некоторую статусную (и отладочную) информацию. В данный момент это список переменных в текущем контексте. Скорее всего, добавится список загруженных библиотек/плагинов, т.к. для реализации идеи с блокировкой повторной загрузки плагинов всё равно придется переписать эту часть. Остальное если и будет добавляться, то постепенно и с низким приоритетом. Потому что некоторую информацию получить просто, некоторую сложно, а некоторую практически невозможно. Понятно, что вероятность добавления сложных категорий очень мала.

#2061:  Author: Orion9 PostPosted: Thu May 16, 2024 13:20
    —
sa wrote:
Спасибо! Теперь и при скрытой командной строке позиционирование мышки на функциональных кнопках работает исправно.

Могу тоже это подтвердить: всё действительно работает. И новая фича с возвратом пустой строки уже тоже пригодилась. Если вам будет интересно, то вот обновленный конфиг на заголовок:

 Hidden text


Добавил туда дату и время (Credit to Flasher). Управление опциями в ini пока нет, только напрямую через переменные в ShowDate и ShowTime в заголовке aucfg-файла. Поскольку в новых версиях винды добраться до часов стало как-то сложнее, добавил Ctrl+Click по заголовку с парой пунктов меню на вызов em_ команд:
Code:
[em_timedate_cpl]
button=
cmd=rundll32.exe shell32.dll,Control_RunDLL timedate.cpl
param=
iconic=1

[em_phsm_calendar]
button=
cmd=https://calendar.madsenworld.dk/PHSM-Calendar.htm
param=
iconic=1

Можете отключить эту фичу, если не зайдёт Laughing

 P.S.


Quote:
Будет универсальная функция, возвращающая некоторую статусную (и отладочную) информацию. В данный момент это список переменных в текущем контексте. Скорее всего, добавится список загруженных библиотек/плагинов, т.к. для реализации идеи с блокировкой повторной загрузки плагинов всё равно придется переписать эту часть.

Это очень хорошо. Рад слышать, что есть такие планы и что они в силе.
Quote:
Остальное если и будет добавляться, то постепенно и с низким приоритетом.

Дэдлайнов тут никаких нет. Как говорили в "Пятом элементе":

 Hidden text

#2062:  Author: sa PostPosted: Thu May 16, 2024 15:27
    —
Orion9 wrote:
Добавил туда дату и время
Спасибо! Убрал годы и секунды, перевёл на русский и всё стало, как раньше.
Orion9 wrote:
добавил Ctrl+Click по заголовку с парой пунктов меню... Можете отключить эту фичу
Пусть будет: она же не лезет на экран сама по себе, а только когда самому захочется, например, взглянуть на часы со стрелками (и секундами, которые убрал в заголовке).

Last edited by sa on Thu May 16, 2024 23:42; edited 1 time in total

#2063:  Author: yozhikLocation: Электросталь PostPosted: Thu May 16, 2024 15:28
    —
Orion9
В свой пост с подсветкой добавил вариант без font styles (а то их глобальное отключение потом забудется и спровоцирует неадекват)), а также скрипт для циклического переключения 2ух подсветок по хоткею. Ваши команды для переключения из контекстного меню — это тоже вариант, можно по аналогии сделать кнопку на тулбаре или добавить в основное меню.
Я надеюсь, это здесь не очень офтоп, но если ошибаюсь, то готов переехать в ЛС.

#2064:  Author: Orion9 PostPosted: Fri May 17, 2024 00:40
    —
sa wrote:
Спасибо! Убрал годы и секунды, перевёл на русский и всё стало, как раньше.

Рад, что пригодиось.) Хотя тут заслуга больше Флэшера - его росчерк пера - я лишь переменные объявил и условия поставил Laughing

 Hidden text


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

Пока кинулся в глаза косяк с осадками: не учёл формат вывода. Если срочно кому ронадобится, можно заменить строку 178 на:
Code:
prec := Format("{:.2f}", json["current"]["precipitation"]) . ' ' . json["current_units"]["precipitation"]

А то я, может, еще не скоро доберусь до перезаливки.

yozhik
Спасибо, попробуем. Хотя я давно хотел отключить именно глобально, поскольку иногда проскальзовало уже даже не помню где. Но тут должен был быть хороший повод, чтобы сдвинуть меня с места Laughing Уж не знаю, почему вы считаете свою подсветку сырой (я в этом не разбираюсь, но видимо у вас есть основания), но я как обычный юзверь никакой сырости не заметил. Все смотрится просто отлично, а розовый амперсанд - вообще вишня на торте.)) Со скритом тоже поразбираюсь, тем более что давно хотел покавыряться под капотом AkelPad, но только уж больно вселенная это большая, чтобы вот так сходу уходить в нее с головой без особой причины. В эти темные воды нужно входить осознанно и осторожно: говорят, это территория Большой Акулы, стоит только нырнуть - вынурнуть уже не получится Mr. Green

 Hidden text

#2065:  Author: sa PostPosted: Fri May 17, 2024 11:40
    —
Иногда возникает потребность, чтобы окно подсказки для заголовка залипло в определённой зоне экрана. Для этого делаю щелчок правой кнопкой в области заголовка и быстро переношу мышь в требуемую зону.
Просьба не бороться с таким поведением! Smile

#2066:  Author: Orion9 PostPosted: Fri May 17, 2024 12:20
    —
sa wrote:
Для этого делаю щелчок правой кнопкой в области заголовка и быстро переношу мышь в требуемую зону.
Просьба не бороться с таким поведением! Smile


 Hidden text


yozhik
Спасибо большое! js-скрипт работает.) Повесил его на хоткей и кайфонул. Люблю как "хЫщник" менять режимы просмотра в полёте Mr. Green

 Hidden text


Подсветка от Loopback мне тоже нравится своей мягкостью. Так что буду гонять оба варианта по кругу в зависимости от таргетов и тасков Laughing

#2067:  Author: sa PostPosted: Fri May 17, 2024 12:35
    —
Orion9
Можно и не быстро, если вместо /D:350 сделать /D:750.

#2068:  Author: Orion9 PostPosted: Fri May 17, 2024 13:10
    —
sa
Надо будет попровобавть.) Но delay - вещь необходимая, согласен, особенно для кнопок функциональных клавиш cнизу, где хинт тоже может неудачно зависнуть, если медлить Smile Хорошо, что клавиши-модификаторы сейчас работают, и можно склониться к тому, чтобы иногда показывать хинт только с зажатым Ctrl или Alt, Shift. Единственное, для пользователя такое поведение будет неочевидно, но это мелочь.

#2069:  Author: sa PostPosted: Fri May 17, 2024 14:22
    —
Orion9 wrote:
Надо будет попробовать.

У меня речь шла только о заголовке TC. Щелчок правой кнопкой мыши (используется для вызова панели меню) надо сделать на заголовке до появления подсказки, а затем необходимо переместить мышь для указания места, где всплывёт (и залипнет на переднем плане) подсказка.

#2070:  Author: Orion9 PostPosted: Fri May 17, 2024 19:50
    —
sa
Я просто сначала не совсем понял Smile Но если вам нужно вызвать хинт в любое время в любом месте, то можно его повесить на хоткей функцией SetHotkeyAction:

Code:
SetHotkeyAction /H:F1 F1HintText

Func F1HintText()

 ShowHint(TitleHintText())
 
EndFunc

Такому хинту можно будет и стили другие настроить, например "чернявое" окно консоли:
Code:
SetHintParam("ShowHint", "Font", 9, "Consolas")
SetHintParam("ShowHint", "BackColor", 0x000000)
SetHintParam("ShowHint", "Text", 0xFFFFFF)

Но думаю, оно вам вряд ли зайдет Laughing Все-таки стиль по-умолчанию смотрится интереснее.))

#2071:  Author: sa PostPosted: Fri May 17, 2024 20:08
    —
Orion9
По-моему, это не совсем то – в моём варианте, я могу, например, переключиться в окно браузера или редактора, а окно подсказки при этом не исчезнет (останется на переднем плане).

#2072:  Author: Orion9 PostPosted: Sat May 18, 2024 01:12
    —
sa
Понятно. Тут уже Loopback нужно просить, чтобы он добавил ключ прикрепления/"поверх все окон" для функции тултипа Smile

Еще как вариант можно использовать вызов самого ahk-скрипта напрямую, добавив в него строки для показа собственного тултипа. Если вдруг нужен такой вариант, то можно провести небольшую модификацию:
 Hidden text

Перед "try FileAppend" добавьте, и теперь при вызове скрипта с любым параметром будет всплывать тултип у указателя мыши, например у меня: "C:\Portable\T 11 03\Scripts\Ahk\AutoHotkey32.exe" Title.ahk -t

Правда тултип другого стиля, но это тоже можно будет поправить, если вам будет нужно.

#2073:  Author: sa PostPosted: Sat May 18, 2024 08:32
    —
Orion9
Не думаю, что тут стоит заниматься какими-то добавлениями или доработками, я-то слепил этот вариант из того, что было. А за предложенные способы, спасибо!

#2074:  Author: Orion9 PostPosted: Sat May 18, 2024 12:37
    —
sa wrote:
Не думаю, что тут стоит заниматься какими-то добавлениями или доработками

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

На счёт добавления новых ключей к тултипу Autorun я не уверен, а вот добавить в ahk-скрипт возможность, чтобы он сам показывал хинт при вызове с параметром, это можно и даже нужно. Просто я сразу об этом как-то не подумал потому, что:

 Hidden text

Т.о. можно будет вызывать подсказку где угодно и без окна ТС, т.ч. надо будет доделать.

#2075:  Author: sa PostPosted: Sat May 18, 2024 15:21
    —
Orion9 wrote:
не использоать баг как фичу

Значит, будут "бороться с таким поведением!" Sad Smile

#2076:  Author: Orion9 PostPosted: Sun May 19, 2024 00:57
    —
sa wrote:
Значит, будут "бороться с таким поведением!" Sad Smile

Ну, а куда деваться? Вся наша жизнь борьба Laughing

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

 Hidden text


К usercmd.ini нужно добавить:

 Hidden text

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

#2077:  Author: Orion9 PostPosted: Sun May 19, 2024 14:30
    —
Надоело гоняться за переменными окружения, которые объявляются через Autorun при старте ТС. Сделал небольшую функцию, которая отображает только эти перемеменные при клике на F3 с зажатым Ctrl:

 autorun.cfg

Правда при перезагрузке командой cm_Exit 9 результат уже "не торт", но тоже интересный.)

#2078:  Author: Orion9 PostPosted: Mon May 20, 2024 11:49
    —
Loopback
Такое ощущение, что новая функция RequestCopyDataInfo не работает, когда вызывается из тела другой функции, висящей на ControlSetMouseAction, например:
Code:
ControlSetMouseAction /L K:C 1 ShowCtrlHint
Func ShowCtrlHint()
Local hint
  hint = RequestCopyDataInfo("LP") & RequestCopyDataInfo("LN")
  ShowHint(hint)
EndFunc

Но при этом, вызов SetHotkeyAction /H:F2 ShowCtrlHint работает нормально. Даже более чем странный ControlSetHint /F /D:100 1 "ShowCtrlHint" - и тот свое дело делает.)

И еще один момент. Сделал простенькую функцию, для переключения количества строк на главной панели инструментов:
Code:
SetMessageAction "BarMessage" SetBarLines
Func SetBarLines()
Local lines
   IniRead lines %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1
   If lines = 1 Then
      IniWrite %COMMANDER_INI% "Buttonbar" "BarLimitLines" 2
   Else
      IniWrite %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1     
   Endif
   SendCommand 2901
   SendCommand 2901
EndFunc

Всё работает, но... Если сделать то же самое через TCFS2 следующим образом, то результат выглядет более гладким и приятным:
Code:
[Macros]
hasLimitLines=tcini(Buttonbar, BarLimitLines, 1)
[Items]
bbltd=if(hasLimitLines, set_tcini(Buttonbar, BarLimitLines, 2), set_tcini(Buttonbar, BarLimitLines, 1)) msg($0B, 0, 0) tcm(2901) tcm(2901) msg($0B, 1, 0) run_item(update)

Понятно, что тут блокируется окно, а потом перерисовывается, поэтому я попробовал:
Code:
Func SetBarLines()
Local lines
   IniRead lines %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1
   If lines = 1 Then
      IniWrite %COMMANDER_INI% "Buttonbar" "BarLimitLines" 2
   Else
      IniWrite %COMMANDER_INI% "Buttonbar" "BarLimitLines" 1     
   Endif
   SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
   SendMessage(AUTORUN_TCHANDLE, 1075, 2901, 0)
   SendMessage(AUTORUN_TCHANDLE, 1075, 2901, 0)
   SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
EndFunc

Теперь при вызове из TCFS2 наблюдаются попытки что-то загладить и перерисовать, но смотрятся они очень плохо, словно не дорабатывают до конца.
Code:
bbltd3=msg($0B, 0, 0) msg(regmsg(BarMessage), 0, 0) msg($0B, 1, 0) run_item(update)
bbltd4=msg(regmsg(BarMessage), 0, 0) run_item(update)

Можно ли в Autrun добится того же эффекта гладкости, что и в TCFS2, есть варианты?

#2079:  Author: Loopback PostPosted: Mon May 20, 2024 13:51
    —
Orion9 wrote:
Такое ощущение, что новая функция RequestCopyDataInfo не работает

Такое ощущение, что функция ShowCtrlHint не запускается Wink Потому что слеш в установке модификатора потерян: ControlSetMouseAction /L K:C 1 ShowCtrlHint.

Orion9 wrote:
Теперь при вызове из TCFS2 наблюдаются попытки что-то загладить и перерисовать, но смотрятся они очень плохо, словно не дорабатывают до конца.

Ну так после блокировки перерисовки окно все равно как-то надо перерисовать, тем более после таких изменений.
Orion9 wrote:
Можно ли в Autrun добится того же эффекта гладкости, что и в TCFS2, есть варианты?

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

#2080:  Author: Orion9 PostPosted: Mon May 20, 2024 14:31
    —
Loopback wrote:
Такое ощущение, что функция ShowCtrlHint не запускается Wink Потому что слеш в установке модификатора потерян: ControlSetMouseAction /L K:C 1 ShowCtrlHint.

Да уж... Такое ощущение, что без двух кружек крепкого кофе мне больше за Autorun лучше не садиться Laughing
Loopback wrote:
Ну так после блокировки перерисовки окно все равно как-то надо перерисовать, тем более после таких изменений.

Пытался той же командой run_item(update) из TCFS2, но она не срабатывает полноценно, хотя что-то пытается делать вроде.)
Loopback wrote:
Не знаю, честно говоря, сильно думать в этом направлении не очень хочется Smile Неудивительно, что TCFS2 справляется лучше, она делалась именно для целей работы с окнами ТС. Можно ли сделать что-то - наверно можно, но это время на тесты и исследования.

А если в Autorun добавить свою функцию Redraw, поможет это как-то решить проблему? Там вроде всего одна api-функция вызывается, если не ошибаюсь.
Loopback wrote:
Можете пока попробовать релизовать то же самое на ahk, чтобы понять, чего ему не хватет.

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

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

#2081:  Author: sa PostPosted: Mon May 20, 2024 18:22
    —
Orion9 wrote:
Всё работает, но...

Разве только перенести команду 2901 из функции в вызов TCFS2?
Code:
TCFS2.exe /ef  "msg($0B, 0, 0) msg(regmsg(BarMessage), 0, 0) tcm(2901) tcm(2901) msg($0B, 1, 0) run_item(update)"

#2082:  Author: Loopback PostPosted: Mon May 20, 2024 23:24
    —
Orion9 wrote:
А если в Autorun добавить свою функцию Redraw, поможет это как-то решить проблему?

Могу для пробы сделать обёртку для RedrawWindow. Не знаю, поможет ли.
Orion9 wrote:
А всякие сроки и и дэдлайны - это всегда лишний стресс.)

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

#2083:  Author: Orion9 PostPosted: Tue May 21, 2024 00:38
    —
sa wrote:
Разве только перенести команду 2901 из функции в вызов TCFS2?
Code:
TCFS2.exe /ef  "msg($0B, 0, 0) msg(regmsg(BarMessage), 0, 0) tcm(2901) tcm(2901) msg($0B, 1, 0) run_item(update)"

Да, это рабочее решение.) Только получается, что функцию Autorun, в таком случае, не будет большого смысла вызывать (только лишь для того, чтобы считать и записать в ini-файл). Поэтому пришлось прокачать её до 80-го уровня Mr. Green

 Hidden text

Теперь она не только переключает строки на главной панели, но и сообщает об этом в заголовок Laughing Если нажать на кнопку один раз, панель расширится до двух строк, что бывает удобно иногда, если кнопок на панели много или окно развернуто не во весь экран. Через 10 секунд панель сама свернется. Но иногда бывает нужно, чтобы панель оставалась в таком развернутом виде, пока вновь не будет принудительно свенута. Если в течении отведенных 10 секунд еще раз нажать на кнопку, это послужит сигналом, что панель нужно закрепить и оставить в таком (развернутом) виде. Ну, и наконец, если еще раз нажать на кнопку после всего этого, то панель снова свернется в одну строку.

Поскольку функция завязана на основной цикл заголовка, то добавлю весь файл aucfg.

 Hidden text


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

Loopback wrote:
Могу для пробы сделать обёртку для RedrawWindow. Не знаю, поможет ли.

Для пробы - можно Smile
Loopback wrote:
А то получается, что было много исправленных багов, но версию выложить не могу из-за сырости.

Почему не можете? Беты никто не отменял Wink

#2084:  Author: sa PostPosted: Tue May 21, 2024 09:58
    —
Orion9 wrote:
Теперь она не только переключает строки на главной панели

Я что-то подобное предполагал, потому и не стал предлагать чтение/правку ini-файла переносить также в строку для TCFS2. Скрипт работает, только у себя для развёрнутого вида панели инструментов указал количество строк 0 вместо 2.
Ну и задержку появления подсказки для заголовка (/D:10) вернул к первоначальной /D:350.Smile
Подсказка непосредственно из Title.ahk тоже вызывается теперь в привычном стиле. Это приятно!

#2085:  Author: Orion9 PostPosted: Tue May 21, 2024 11:48
    —
sa wrote:
Скрипт работает, только у себя для развёрнутого вида панели инструментов указал количество строк 0 вместо 2.

О! Это дельная поправка Smile Я тоже себе так поставил.)

 Hidden text

sa wrote:
Ну и задержку появления подсказки для заголовка (/D:10) вернул к первоначальной /D:350.Smile

Эксперементировал и забыл убрать.) Хотя мне такой вариант даже больше нравится: хинт появляется почти мгновенно и ничем не мешает, если не считать двойной клик, но это мелочи.)
sa wrote:
Подсказка непосредственно из Title.ahk тоже вызывается теперь в привычном стиле. Это приятно!

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

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

Еще давно заметил, что файл на сайте ЦБ обновляется раз в день, а на выходных и вовсе нет обновлений. Обращаться к нему каждые полчаса нет смысла, и тут надо бы доработать, но пока наткнулся на сайт Coingate, где можно тоже брать сведения о курсе валют. Функция получилась до смешного простая, но при этом не менее эффективная:
 Hidden text

К заголовку нужно добавить:
 Hidden text

Ну, и опцией в ini-файле тоже можно управлять:
 Hidden text

#2086:  Author: Orion9 PostPosted: Wed May 22, 2024 13:19
    —
Понравился один момент, так пусть не затеряется.)

Первый хинт - основной, который нужен по-умолчанию.
Второй хинт - редкий, специфический, но тоже релевантный для определенной задачи. Показывается, если после появления первого зажать Shift:
Code:
SetHotkeyAction /H:F1 F1HintText

Func F1HintText()

 ShowHint(FirstHint())
 sleep(500)
 If IsPressed (0x10) Then ShowHint(SecondtHint())
 
EndFunc

#2087:  Author: Orion9 PostPosted: Thu May 23, 2024 12:51
    —
Loopback
Наткнулся на проблемы с функцией StrLeft: почему-то больше 127 символов она не принимает, т.е.

MsgBox(StrLeft(hint, 127)) - работает.
MsgBox(StrLeft(hint, 128)) - не работает.

Разумеется, числа могут быть как и больше, так и меньше (у меня строка вообще-то больше 1000 символов). При этом со StrMid такой проблемы нет:

MsgBox(StrMid(hint, 1, 1000)) - ОК.

#2088:  Author: Loopback PostPosted: Thu May 23, 2024 14:17
    —
Orion9 wrote:
Наткнулся на проблемы с функцией StrLeft

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

Собственно, вот поэтому и хотелось бы выпустить следующую бету, чтобы такие мелкие, но неприятные косяки править оперативно.

#2089:  Author: Orion9 PostPosted: Thu May 23, 2024 19:06
    —
Loopback
Беты бывают опасны, это да. Особенно когда в них меняют внутренний механизм уже более-менее рабочих функций. Недавний пример с ShowPopupMenu это показывает. Но выпускать их все же стоит, иначе вам одному будет гораздо сложнее все протестировать. Это я к тому, что нет необходимости 1,5-2 года доводить до ума очередную версию готового релиза, все-равно до конца безупречной она не будет. Если в проекте теплится жизнь, можно раз в несколько месяцев или раз в полгода радовать нас бетой Smile

А тем временем, довёл до ума функцию показа только тех переменных окружения, которые создаются во время работы/старта ТС плагином Autorun.

 Hidden text

Теперь еще и с зажимом Shift, Ctrl есть опции.

#2090:  Author: Loopback PostPosted: Fri May 24, 2024 15:29
    —
Orion9 wrote:
Особенно когда в них меняют внутренний механизм уже более-менее рабочих функций.

Это да, не люблю трогать такие вещи. Хотя что-то базовое еще придется трогать. Но это не до ближайшей беты, иначе тестирование затянется навечно.
Orion9 wrote:
Это я к тому, что нет необходимости 1,5-2 года доводить до ума очередную версию готового релиза, все-равно до конца безупречной она не будет.

Тут немного другой случай, дело совсем не в перфекционизме. Но после выхода ближайшей беты надеюсь прийти к более равномерному выпуску версий.
Orion9 wrote:
А тем временем, довёл до ума функцию показа только тех переменных окружения, которые создаются во время работы/старта ТС плагином Autorun.

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

Кстати, стоит упомянуть, что метод работает, только если этот код размещен до других установок переменных окружения через Autorun. Иначе показывает только COMMANDER_HANDLE Smile

#2091:  Author: Orion9 PostPosted: Sat May 25, 2024 19:45
    —
Loopback
Я в тот момент очень торопился, на потом откладывать не хотел - в итоге пост получился недописанным.

Да, нужно размещать код сразу за LoadLibrary в шапке основного конфига и перед объявлениями других переменных окружения.

Поскольку ТС при перезагрузке командой cm_Exit 9 тянет за собой все переменные окружения, пришлось создать дополнительную проверку на переменную COMMANDER_HANDLE, которая не существует при первой загрузке, хотя при последующих перезагрузках ее содержимое меняется.

Но мне понравилось больше то, что фактически там сейчас три разных хинта. Если вызвать первый хинт с Ctrl, он покажется. Но если при этом не отпускать Ctrl, то покажется второй, более широкий хинт. Если же сразу после показа первого нажать Shift, то всплывет третий, маленький, который отобразит только изменения в переменных, характерные для этой конкретной сессии/перезагрузки.

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

P.s. А с хинтом можно поступить еще интереснее. Повесить его на F1, к примеру. Тогда после нажатия на F1, если сразу зажать шифт после этого, то на экране всплывет второй хинт вслед за первым. Я, кстати, так и сделал c хинтом заголовка)

#2092:  Author: sa PostPosted: Tue May 28, 2024 17:48
    —
Наверное, я слишком многого хочу Smile. Нельзя ли сделать так, чтобы после появления подсказки для заданного элемента окна, она не исчезала при перемещении мышки, пока её указатель находится внутри данного элемента (например, в пределах функциональной кнопки или заголовка)? По аналогии с подсказкой для кнопок панели инструментов.

#2093:  Author: Orion9 PostPosted: Tue May 28, 2024 21:59
    —
sa
А если использовать ShowHint?

Code:
ControlSetHint /F /D:100 /H:2 0 "TitleHintText"

Func TitleHintText()
   ShowHint(GetInfoData())
EndFunc

Приемлемо, но все же не то... Или пойдет?

#2094:  Author: sa PostPosted: Tue May 28, 2024 23:37
    —
Orion9 wrote:
но все же не то...

Да, не то! Для закрытия потребуется клик или нажатие ESC, а не просто перемещение указателя на другой объект (другую кнопку в случае панели инструментов TC).
Удобнее просто замереть (если рука крепка).

#2095:  Author: Orion9 PostPosted: Wed May 29, 2024 00:42
    —
sa wrote:
Удобнее просто замереть (если рука крепка).

Смешно))

#2096:  Author: Loopback PostPosted: Wed May 29, 2024 23:26
    —
sa wrote:
Наверное, я слишком многого хочу

Хотел утром ответить что да, потом посмотрел - а почему бы и нет Smile

Версия Tweaks от 29.05.2024

Вроде выглядит и неплохо, но не уверен, стоит ли делать так по умолчанию, поэтому включается временным ключом /R в ControlSetHint. На маленьких кнопках ок, но вот на больших функциональных как по мне спорно. Кроме того с опцией /O работать не будет. В общем, надо еще погонять, в случае чего ключ можно инвертировать.

#2097:  Author: Orion9 PostPosted: Thu May 30, 2024 00:02
    —
Loopback
Quote:
Вроде выглядит и неплохо, но не уверен, стоит ли делать так по умолчанию

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

А что имеется в виду "с опцией /O работать не будет"?

#2098:  Author: sa PostPosted: Thu May 30, 2024 09:41
    —
Loopback wrote:
а почему бы и нет

Я подозревал, что с Autorun всё возможно Smile .
Спасибо! Работает немного иначе, чем в варианте с тоталовскими подсказками для кнопок панели инструментов, но это даже и лучше: можно не только по области функциональной кнопки или заголовка перемещать указатель, но и по полю самой подсказки.

#2099:  Author: Loopback PostPosted: Thu May 30, 2024 23:40
    —
Orion9 wrote:
но этот ключ нарушает привычную логику

Да не, если и нарушает, то только когда используются разные подходы одновременно. Если на всех контролах будет одинаково, то нормально. Но я что-то не уверен, что мне больше нравится новый вариант. Вообще, может и не нужна эта опция для каждого контрола отдельно, сделать одну общую на всё...
Orion9 wrote:
А что имеется в виду "с опцией /O работать не будет"?

При включенной опции /O этот метод работать не будет, т.к. фокус уходит к подсказке.
sa wrote:
Я подозревал, что с Autorun всё возможно

Если бы, но впечатление, конечно же, обманчивое Smile Не в каждом случае можно легко достигнуть результата.
sa wrote:
Работает немного иначе, чем в варианте с тоталовскими подсказками

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

#2100:  Author: yozhikLocation: Электросталь PostPosted: Fri May 31, 2024 00:15
    —
Loopback
У меня на кнопку назначен хинт и меню по ПКМ. Подвожу курсор к кнопке, жму ПКМ, появляется меню, затем всплывает хинт поверх меню. И в таком сочетании куда курсором уже ни двигай, хинт не закрывается, пока не щёлкнешь по пункту меню или где ещё в окне ТК, или Esc-ом меню не закроешь:

Возможно ли это как-то отследить, чтобы при открытом меню хинт не всплывал?
Loopback wrote:
При включенной опции /O этот метод работать не будет, т.к. фокус уходит к подсказке.

Где-то что-то я опять прозевал... а где эта опция /O ?

#2101:  Author: sa PostPosted: Fri May 31, 2024 00:38
    —
yozhik wrote:
а где эта опция /O

Здесь и здесь (под другим флагом).

#2102:  Author: Loopback PostPosted: Fri May 31, 2024 00:45
    —
yozhik wrote:
Возможно ли это как-то отследить, чтобы при открытом меню хинт не всплывал?

Да, выглядит некрасиво, надо устранить.

yozhik wrote:
Где-то что-то я опять прозевал... а где эта опция /O ?

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

#2103:  Author: Orion9 PostPosted: Fri May 31, 2024 00:54
    —
sa wrote:
yozhik wrote:
а где эта опция /O

Здесь и здесь (под другим флагом).

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

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

А это можно сделать? Было бы супер.

#2104:  Author: yozhikLocation: Электросталь PostPosted: Fri May 31, 2024 06:15
    —
sa, Loopback,
спасибо! Действительно прозевал, потому что тот пост я помню, но от последней строчки сознание избавилось путём временного перевода фокуса на предпоследнюю Smile Теперь и сюда добавил, чтобы всё в одном месте было.

#2105:  Author: sa PostPosted: Fri May 31, 2024 11:02
    —
Loopback wrote:
Кроме того с опцией /O работать не будет.

Вроде, работает /R и в этой комбинации.

#2106:  Author: jentoso PostPosted: Sat Jun 01, 2024 17:21
    —
В одной сборке подсмотрел конфиг для просмотра файла средней кнопкой мыши
 Hidden text

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

В итоге такое решение сработало. Теперь просмотр по СКМ только на файлах срабатывает.
 Hidden text


P.S. Поправил отступы.


Last edited by jentoso on Mon Jun 03, 2024 22:17; edited 2 times in total

#2107:  Author: Orion9 PostPosted: Sun Jun 02, 2024 01:05
    —
jentoso wrote:
В одной сборке подсмотрел конфиг для просмотра файла средней кнопкой мыши

Интересный фрагмент. Только почему вы в своих вариантах не поставили отступ? Smile

#2108:  Author: Loopback PostPosted: Sun Jun 02, 2024 22:25
    —
Версия Tweaks от 02.06.2024
Изменения минимальны, только устранено всплывание подсказки после вызова меню.

sa wrote:
Вроде, работает /R и в этой комбинации.

Да, оказывается для контролов не имеющих своей подсказки работает, но там этот костыль и не нужен. Я тестировал на панели дисков, контролы номер 24, 25, не работает.

#2109:  Author: sa PostPosted: Mon Jun 03, 2024 09:25
    —
Loopback wrote:
тестировал на панели дисков, контролы номер 24, 25, не работает

Подтверждаю, я оказывается, проверял контрол 0 с /H:8 (Свернуть) или /H:16 (Свернуть в окно).

#2110:  Author: yozhikLocation: Электросталь PostPosted: Mon Jun 03, 2024 11:24
    —
Loopback wrote:
устранено всплывание подсказки после вызова меню

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

#2111:  Author: Orion9 PostPosted: Mon Jun 03, 2024 13:49
    —
Loopback wrote:
Версия Tweaks от 02.06.2024
Изменения минимальны, только устранено всплывание подсказки после вызова меню.

У меня не работает на заголовке, или оно там и не должно работать?

Ещё один вопрос всем, кто знает: А разве в MNU файле не возможности вызвать em_ команду с параметрами? Что-то я не нашел как передать параметр %A через MENUITEM, а хотелось бы... очень.

#2112:  Author: Loopback PostPosted: Mon Jun 03, 2024 15:09
    —
Orion9 wrote:
У меня не работает на заголовке, или оно там и не должно работать?

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

Orion9 wrote:
А разве в MNU файле не возможности вызвать em_ команду с параметрами?

Вроде никогда не было. Параметр %A нужно просто поместить в параметры самой em_ команды.

#2113:  Author: sa PostPosted: Mon Jun 03, 2024 15:42
    —
Loopback wrote:
заменил файлы во вчерашнем

Теперь и в заголовке всё работает корректно. С багом покончено!Smile

#2114:  Author: Orion9 PostPosted: Mon Jun 03, 2024 17:05
    —
Loopback
Однозначно стало лучше. Smile Заметил, правда, один небольшой побочный эффект (хотя, может, просто показалось). Если вызывать меню по Alt клику, то оно тут же закрывается, если Alt не отпустить.

Что касается параметра %A, то есть 10 однотипных пунктов меню, которые отличаются лишь числами в передаваемых параметрах wParam и lParam
 Hidden text

Сам пункт выглядит где-то так:
Code:
   txt = txt & 'MENUITEM "Time - ' & ShowTime & '", em_title_reboot1' & auCRLF

Но не хотелось бы делать 10 однотипных команд em_title_reboot1, em_title_reboot2, em_title_reboot3 и т.д. Некрасиво это. А передать параметр из меню в одну команду em_title_reboot тоже не получается, как я понимаю.



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


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group