Autorun

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

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

AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Надо проверить. Теоретически большой разницы не должно быть
И это удивительно, что в действительности в Autorun не работает. Если хотите, можно прямо в моей сборке и проверить. Я сейчас закончил скрипт на au3. Все получилось. Осталось причесать все. Если будете на моей сборке тестить, напишите. Я подготовлю сборку, подключу все нужное.
Orion9 писал(а):вопросы только к Loopback.
Дак нет его. Конечно очень хотелось-бы подключить его к решению проблемы.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

AkulaBig писал(а):Если будете на моей сборке тестить, напишите.
Нет у меня, к сожалению, сейчас такой возможности. Скорее всего придется совсем забыть о ТС на какое-то время, пока не решу все проблемы. Надеюсь, Loopback все же вернется и сделает финальную версию плагина или хотя бы очередную бету с последним функционалом WM_USER+50, который появился в новом ТС.

P.S. Вы, наверное, пропусти мои вчерашние ПМ. Если их сразу пропустить, напоминаний больше не будет (недостаток здешнего форума). Mrak_Tlen вам сообщение тоже висит в исходящих (не старое, а новое)
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а): Вы, наверное, пропусти мои вчерашние ПМ.
Ответил.
Orion9 писал(а):Нет у меня, к сожалению, сейчас такой возможности.
Ну и ладно. Будет время и интерес, сообщите. Мне-то сейчас все ясно. Причесываю новые пользовательские колонки с доками. Все работает. Да и тестировать с Autorun можно. Весь код в сборке есть. Просто самому подключать модули, создавать колонки.
Жалко, что ни автора, ни вас не будет какое-то время. Ну удачи вам в ваших делах.
yahuu
Сообщения: 40
Зарегистрирован: Чт июн 22, 2023 07:32

Сообщение yahuu »

Функция FileDelete в 64-битной версии TC приводит к краху и завершению работы TC.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

yahuu
Подтверждаю.
ZiabrevLV
Сообщения: 14
Зарегистрирован: Чт сен 15, 2022 11:22

Сообщение ZiabrevLV »

Прошу помочь с командой:

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

#Переключение значков файловых панелей
RegisterCommand 67001 "SwitchIcons"
Func SwitchIcons(lParam)
Local sIconLib

#Проверка наличия ключа IconLib в секции [Configuration] файла wincmd.ini
IniRead sIconLib  %COMMANDER_INI% "Configuration "IconLib" ""
If StrPossIconLib, "") Then

#Поквзывает собственные значки ТС 
  IniWrite  %COMMANDER_INI% "Configuration" "IconLib" "%COMMANDER_EXE%"

Else

#Поквзывает аматерные значки - Fileicons.dll
iniWrite  %COMMANDER_INI% "Configuration" "IconLib" "%COMMANDER_PATH%\Fileicons.dll"
EndIf

#Обновляетм значки файловых панелей
   CommandExec cm_ReloadFileIcons
EndFunc
Не работает - ошибка If StrPossIconLib, "" - параметр не определён.
Требуется поправить.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

If StrPossIconLib = "" Then или If StrPossIconLib <> ""
А вообще у меня такой модуль давно есть.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

yahuu писал(а):Функция FileDelete в 64-битной версии TC приводит к краху и завершению работы TC.
Да, было замечено.

Можно использовать ShellExec

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

ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%COMMANDER_PATH%\temp.txt"""
Или функцию сделать

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

Func FileDeleteShellExec(Target)
    If Not FileExist(Target) Then Return 0
    ShellExec("~/SW_HIDE /WAIT:2000", COMSPEC, '/c del /q "' & Target & '"')
    If FileExist(Target) Then Return -1
    Return 1
EndFunc

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

Local sTarget = COMMANDER_PATH & '\temp.txt'
If FileDeleteShellExec(sTarget) = -1 Then MsgBox("Error deleting " & sTarget)
ZiabrevLV писал(а):Не работает - ошибка If StrPossIconLib, "" - параметр не определён.
Похоже, что скобка потерялась

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

If StrPos(sIconLib, "") Then 
Хотя пустую строку можно сравнивнить If sIconLib = "", но если следовать логике функции , должно быть, наверное, так

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

If StrPos(sIconLib, "Fileicons.dll") Then
Значение ключа в ini будет каждый раз меняться.
ZiabrevLV
Сообщения: 14
Зарегистрирован: Чт сен 15, 2022 11:22

Сообщение ZiabrevLV »

AkulaBig
Я смотрел, там нумерация пришита.

Orion9
Да,так работает. Спасибо.
Только пишет в инишнике вместо переменной %COMMANDER_PATH%,
IconLib=абсолютный путь\Fileicons.dll, как-то можно и это поправить?
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Похоже, что скобка потерялась
Ну вы волшебник. Догадаться, что это функция StrPos, это высший пилотаж :)
Я тут за время вашего отсутствия такого накодил с ExifTool. И решил еще раз попробовать через Autorun. Но без использования ProcessExecGetOutput. Через ShellExec, выводящий результат в буфер. Вдруг такой вариант будет работать приемлемо по скорости. И как всегда встрял с кавычками. На au3 кавычки смог правильно поставить, на vbs. А на Autorun сколько бьюсь, не получается. Прошу помощи:

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

ShellExec("~/SW_HIDE", COMSPEC, '/c ' & util_ET & param & FileName & ' | clip')
Вот такая запись работает с путями без пробелов. Понятно, что надо FileName взять в кавычки. Но не получается. В vbs прекрасно работает:

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

objShell.Run "%COMSPEC% /c " & chr(34) & chr(34) & program & chr(34) & param & chr(34) & filename & chr(34) & " | clip" & chr(34), 0, True
ZiabrevLV
Сообщения: 14
Зарегистрирован: Чт сен 15, 2022 11:22

Сообщение ZiabrevLV »

Увидел:
/EV- В командной записи отключает использование переменных и переменных окружения в параметре value.
/R Функция будет учитывать наличие ключа RedirectSection в заданной секции и ключа AlternateUserIni в секции Configuration.

Всё работает.
Всем спасибо.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9
Ах тыж, блин. Сегодня совершенно случайно добавил /WAIT и все заработало. И все перестало шевелиться. А с путями без пробела в буфер заносилось без /WAIT. Похоже как-раз ProcessExecGetOutput и добавляет сам /WAIT.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

ZiabrevLV писал(а):Увидел:
/EV- В командной записи отключает использование переменных и переменных окружения в параметре value.
Так и есть. В командной записи переменные окружения раскрываются по умолчанию. Чтобы этого не происходило, необходимо использовать ключ /EV-, если он поддерживается. В функциональной записи все наоборот. Переменные окружения никогда не раскрываются, строка передается в функцию как есть. Если взять ваш пример, то две одинаковые записи будут вести себя по-разному

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

IniWrite  %COMMANDER_INI% "Configuration" "IconLib" "%COMMANDER_EXE%" 

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

IniWrite(COMMANDER_INI, "Configuration", "IconLib", "%COMMANDER_EXE%") 
В первом случае переменная раскроется, во втором случае нет.

[Важно] Если необходимо раскрыть переменную окружения в функциональной записи, нужно использовать Set(), это единственный предусмотренный для этого способ

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

IniWrite(COMMANDER_INI, "Configuration", "IconLib", Set("%COMMANDER_EXE%")) 
AkulaBig писал(а):Но без использования ProcessExecGetOutput. Через ShellExec, выводящий результат в буфер. Вдруг такой вариант будет работать приемлемо по скорости.
Если такой вариант быстрее ProcessExecGetOutput, то, вероятно, есть проблемы в механизмах внутренней реализации. Сам по себе WinScriptAdv + AutoIt не должен выигрывать у Autorun, поскольку AutoIt.exe запускается каждый раз с новым скриптом, что очень медленно и накладно. Если Autorun действительно проигрывает в скорости, хотелось бы услышать от автора причины этого.
AkulaBig писал(а):А на Autorun сколько бьюсь, не получается. Прошу помощи:
Вы уже вставляли кавычки здесь правильно. Какая может быть разница

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

ShellExec("~/SW_HIDE", COMSPEC, '/c ' & util_ET & param & '"' & FileName & '"' & ' | clip') 
Просто имя файла должно быть в кавычках, да и все.
ZiabrevLV
Сообщения: 14
Зарегистрирован: Чт сен 15, 2022 11:22

Сообщение ZiabrevLV »

Orion9
У меня сейчас так:

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

IniWrite /R /EV- %COMMANDER_INI% "Configuration" "IconLib" "%COMMANDER_EXE%"

Else

iniWrite /R /EV-  %COMMANDER_INI% "Configuration" "IconLib" "%COMMANDER_PATH%\Fileicons.dll"
Так же записывается в wincmd.ini.
И всё работает.
AkulaBig
Сообщения: 638
Зарегистрирован: Ср дек 03, 2008 11:48

Сообщение AkulaBig »

Orion9 писал(а):Вы уже вставляли кавычки здесь правильно. Какая может быть разница
Оказалось, что проблема намного сложнее. Я выше описал. Вся проблема была в /WAIT. С ней и с буфером обмена проблем нет. Это был мой следующий вопрос. Не хотел сразу все в кучу валить. Вместо /WAIT работает Sleep(), но не менее Sleep(500). Что совершенно не решает проблему. Панели ТС при этом практически перестают двигаться, а перед выводом инфы несколько секунд пауза. Зависит от количества файлов.
Orion9 писал(а):Если такой вариант быстрее ProcessExecGetOutput, то, вероятно, есть проблемы в механизмах внутренней реализации.
Да не. ProcessExecGetOutput не причем. Я проверил все варианты с Autorun. ProcessExecGetOutput, Plugin, uwdx. Везде одинаково. Думал через ShellExec заработает. Видимо все-же и в скриптах какая-то задержка есть, они не стремительно быстро работают, как плагин ExifToolWDX. Опять-же нельзя быть уверенным, что плагин не снизит скорость, если ему придется русскую перекодировку делать.
Ответить