Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 229, 230, 231, 232, 233, 234  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
FallenAngel



Joined: 30 Dec 2025
Posts: 35

Post (Separately) Posted: Thu Apr 30, 2026 10:58    Post subject: Reply with quote

Ничего себе Shocked
Я думал просто сменить три параметра в ini и перезапустить тотал.

Да и я [AllResolutions] использую.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Thu Apr 30, 2026 12:46    Post subject: Reply with quote

FallenAngel
Autorun не боится поставленных задач )

Попробовать сделать такое можно, но будет сложно, не смотря на то, что все необходимые инструменты для этого есть, включая макросы SYSINFO_DESKTOPWIDTH, SYSINFO_DESKTOPHEIGHT, SYSINFO_DESKTOPDPI.

Нечто подобное уже делалось при реализации Drag-And-Drop на панели инструментов (имеется в виду учитывание размера кнопок и параметров масштабирования экрана). Отсутствие этой фичи, кстати, до сих пор приводит в ярость пользователей ТС, как и меня в свое время ) Но как гласит один из лозунгов Autorun: «Гислер не может — Autorun поможет» Mr. Green

 Hidden text

 Hidden text

 Bars.aufg


По поводу отлова Shift + Click по заголовку Листера через GetRawInputData, вышла небольшая заминка с этим вариантом:
Code:
DllCall("RegisterRawInputDevices", "Ptr", Buff.Ptr, "UInt", 1, "UInt", 8 + auPtrSize)

# WM_INPUT
SetMessageAction /P 0x00FF "OnRawInput"

SetMessageAction не отлавливает сообщение WM_INPUT из-за каких-то ограничений Autorun. Было у меня предчувствие, что так просто не прокатит, пришлось делать отдельное окно перехватчик. Кажись, получилось. Чуть позже выложу этот вариант.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 35

Post (Separately) Posted: Thu Apr 30, 2026 15:44    Post subject: Reply with quote

Я все равно не понимаю, почему просто не сменить:
Code:
[Buttonbar]
Buttonheight=30 (37)
SmallIconSize=default (24)
[AllResolutions]
Iconsize32=16 (24)


...и потом зарестартить (если иначе никак) TotalCmd.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Thu Apr 30, 2026 19:39    Post subject: Reply with quote

FallenAngel
Я тут выше писал, что Autorun не боится поставленных задач, но правильнее было написать так: с тех пор, как Loopback добавил возможность работать с WinAPI через DllCall, Autorun вообще перестал бояться каких-либо задач ) Конечно, дело не только в DllCall. Есть еще объекты Buffer, Callback, побитовые операции и некоторые другие вещи, но в целом мощь Autorun зашкаливает.

И вот очень жаль, что болван об этом ничего не знает. Иначе можно было бы вытягивать из него готовый код как горячие пирожки из печки Mr. Green

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

 1

 2

 3

 4

 5


Мне оставалось только привести все это к формату Autorun, добавив небольшой специфики. Но на этом все.

 aucfg


Решение полностью рабочее. Перехват клика в других окнах помимо листера еще может пригодиться.

FallenAngel wrote:
Я все равно не понимаю, почему просто не сменить:

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

Если используется ResolutionSpecific=0, то надо проверить, как поведет себя запись в AllResolutions. Но если в секции Buttonbar есть ключи типа Buttonheight96 и SmallIconSize96, то простая смена Buttonheight и SmallIconSize точно работать не будет.

В любом случае, даже если у вас все получится, то это будет только на тоненького и только для вашей сборки и скорее всего до первой смены параметров DPI дисплея.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 35

Post (Separately) Posted: Fri May 01, 2026 11:14    Post subject: Reply with quote

Code:
Func Notebook
    If IniRead(COMMANDER_INI, "AllResolutions", "Iconsize32") = 16 Then
        IniWrite %COMMANDER_INI% "AllResolutions" "Iconsize32" "24"
    Else
        IniWrite %COMMANDER_INI% "AllResolutions" "Iconsize32" "16"
    EndIf
    If IniRead(COMMANDER_INI, "Buttonbar", "Buttonheight") = 30 Then
        IniWrite %COMMANDER_INI% "Buttonbar" "Buttonheight" "37"
    Else
        IniWrite %COMMANDER_INI% "Buttonbar" "Buttonheight" "30"
    EndIf
    If IniRead(COMMANDER_INI, "Buttonbar", "SmallIconSize") = 16 Then
        IniWrite %COMMANDER_INI% "Buttonbar" "SmallIconSize" "24"
    Else
        IniWrite %COMMANDER_INI% "Buttonbar" "SmallIconSize" "16"
    EndIf
    SendCommand cm_Exit 9
EndFunc


Как мне обыграть что у SmallIconSize может отсутствовать знание, но по-умолчанию считаем что 16 ?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Fri May 01, 2026 11:36    Post subject: Reply with quote

FallenAngel wrote:
Как мне обыграть что у SmallIconSize может отсутствовать знание, но по-умолчанию считаем что 16 ?

Добавить еще один параметр <default>
Code:
IniRead(["~[/R]",] <ini>, <section, <key>[, <default>])
IniRead [/R] <VAR> <ini> <section> <key>[ <default>]

Т.е.
Code:
If IniRead(COMMANDER_INI, "AllResolutions", "Iconsize32", 16) = 16 Then


P.s. Так изменение всех этих параметров дает нужный эффект? А то я так и не проверил.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 35

Post (Separately) Posted: Fri May 01, 2026 11:52    Post subject: Reply with quote

Да, спс, все получилось. Хотелось бы в идеале без рестарта, но хоть так.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Fri May 01, 2026 12:36    Post subject: Reply with quote

FallenAngel
Это еще одна проблема. Записать ключи в INI недостаточно, нужно еще как-то подстимулировать тотал, чтобы он их перечитал, но, к сожалению, это не всегда удается.

Иногда помогают специальные команды cm_ReloadBarIcons, cm_ReloadFileIcons или cm_RereadSource, но в данном случае они не работают. Навскидку работает:

1) Для панели инструментов
- скрыть и заново отобразить панель

2) Для файловой панели
- сменить режим просмотра (можно потом вернуть свой)

Может еще что-то есть, но я глубоко не проверял.

Если применить эти команды (из пунктов 1 и 2), то главное окно ТС (скорее всего) будет неприятно дергаться и перерисовываться. Чтобы этого не происходило, можно заблокировать окно перед выполнением команд и затем снова его разблокировать:
Code:
SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
...
команды
команды
...
Sleep(50)
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
WinRedraw(1)

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

Нет никаких гарантий, что все получится. Т.ч. вариант с перезагрузкой вполне себе вариант, хоть и крайний.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 573

Post (Separately) Posted: Wed May 06, 2026 22:48    Post subject: Reply with quote

Orion9 wrote:
Скорость - космос.

Наконец-то дошли руки до тестирования. Идея стала понятна. Только воплотить пока не удается. Вот накропал код на основе вашего:
Code:

Func ET1(FileName, FieldIndex, UnitIndex)
   Local ExifToolPID = 0, ExifToolOut = TEMP & "\exiftool_out.txt", ExifToolArgs = TEMP & "\exiftool_args.txt"

   If StrPos(FileGetAttr(FileName), "D") Then Return

   ExifToolPID = ProcessGetId("exiftool.exe")
   If ExifToolPID = 0 Then
      FileWrite(ExifToolArgs, "", "UTF-8 NOBOM")
      ShellExec /TT /SW_HIDE %util_ET% "-stay_open True -@ ""%ExifToolArgs%"""
   EndIf

   If FileExist(ExifToolOut) Then
      ShellExec /SW_HIDE %COMSPEC% '/c del /f /q "%gExifOut%"'
   EndIf

   Local sArgs = "-f" & auCRLF & _
      "-s3" & auCRLF & _
      "-m" & auCRLF & _
      "-q" & auCRLF & _
      "-q" & auCRLF & _
      "-Title" & auCRLF & _
      "-W+!" & auCRLF & ExifToolOut & auCRLF & FileName & auCRLF & "-execute" & auCRLF

   Local obj = BinaryFile(ExifToolArgs, "a")
   obj.WriteStr(sArgs, "", "UTF-8")
   Free(obj)

   ansi = "<time-out>"
   For i = 1 To 50
      If FileExist(ExifToolOut) Then
         ansi = FileRead(ExifToolOut)
         ShellExec /SW_HIDE %COMSPEC% '/c del /f /q "%ExifToolOut%"'
         Break
      EndIf
      Sleep(20)   # time-out
   Next

   Return ansi
EndFunc

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

Слева как должно быть, справа как получается. Сначала я подумал, что кривой код. Но похоже код не успевает отработать. Ваша подсказка работает только для одного файла. А когда надо много обработать, вот такая фигня получается.
Может у вас есть какие-то идеи?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Thu May 07, 2026 00:36    Post subject: Reply with quote

AkulaBig
Я поздно увидел ваше сообщение. Теперь только завтра смогу посмотреть.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 573

Post (Separately) Posted: Thu May 07, 2026 05:21    Post subject: Reply with quote

Orion9
Я его и написал поздно. Надо еще с ProcessExecGetOutput попробовать. Боюсь проблема как-то связана с wait.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Thu May 07, 2026 12:44    Post subject: Reply with quote

AkulaBig wrote:
Сначала я подумал, что кривой код. Но похоже код не успевает отработать.

Так и есть. Для этого там и стоит задержка. ExifTool в режиме -stay_open тупо дергает файл с параметрами каждые 10 миллисекунд и проверяет не появились ли там новые команды. Когда новые команды появляются, результат их выполнения сохраняется в другой файл. Заранее не известно, когда этот файл появится, поэтому приходится ждать его появления. Если в течении 1 секунды файл не появляется, скрипт вернет текст "<time-out>", который и попадет в поле.

И хотя кажется, что задержка может быть большой, на самом деле всё происходит быстро: на порядок быстрее, чем просто вызывать ExifTool для каждого файла по отдельности.

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

Но это никак не должно влиять на скорость. У меня сейчас подсказка ExifTool на видео файлах открывается мгновенно, не говоря уж об аудио или картинках. Скорость ничем не уступает MediaInfo, можете сами проверить. У вас вроде есть последняя версия набора скриптов. На предыдущей странице я сбрасывал концовку модуля MediaInfo.aucfg. Смена подсказки по Alt+F12.

А почему у вас нет прироста в скорости, я не знаю. Вроде бы всё как надо сделано. Ну если только убрать запуск ExifTool во вне, и проверку существования процесса не делать в теле функции, а заменить проверкой переменной (флага). Функция будет вызывается для всех полей, это тоже надо будет в будущем учитывать.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 573

Post (Separately) Posted: Thu May 07, 2026 18:15    Post subject: Reply with quote

Orion9 wrote:
Но это никак не должно влиять на скорость.

Не стоит это сейчас обсуждать. У вас еще приведено решение задержки от ИИ через While. У себя я его тестил и мне больше понравилось. Давайте лучше разберемся, почему код не работает. Я уже написал выше. У вас выводится подсказка для одного файла. Как видите, ваш код для пользовательских колонок работает неправильно (или я что-то неправильно пишу, хотя вроде практически один в один ваш код). И я про задержки в этом варианте имею ввиду. То-есть есть подозрение, что функция не годится для обработки множества файлов.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1136

Post (Separately) Posted: Thu May 07, 2026 20:34    Post subject: Reply with quote

AkulaBig
Похоже, какая-то проблема действительно есть. Не всё так гладко, как я думал.

Вообще-то, я проверял не только подсказку, но и набор колонок. На предыдущей странице я его выкладывал
Code:
Widths32=80,30,30,30,30,30,30,30,30,30,30,30,30
Headers32=C1\nC2\nC3\nC4\nC5\nC6\nC7\nC8\nC9\nC10\nC11
Contents32=[=autorun.C1]\n[=autorun.C2]\n[=autorun.C3]\n[=autorun.C4]\n[=autorun.C5]\n[=autorun.C6]\n[=autorun.C7]\n[=autorun.C8]\n[=autorun.C9]\n[=autorun.C10]\n[=autorun.C11]
Options32=-1|0|96

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

Удивляет, что с подсказкой проблем вроде нет, а значит действительно что-то может быть с набором. Я чуть попробовал, такое ощущение, что файл просто не успевает удаляться вот этой строчкой
Code:
ShellExec /SW_HIDE %COMSPEC% '/c del /f /q "%gExifOut%"'

Пришлось поставить задержку
Code:
ShellExec /SW_HIDE /WAIT:500 %COMSPEC% '/c del /f /q "%gExifOut%"'

Так лучше, но тоже не гарантия, и задержку увеличивает. Т.ч. в итоге подобное использование может и правда оказаться непригодным. Если Loopback вернется, починит FileDelete, можно будет еще раз пробовать. А пока придется искать другие решения, наверное.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 573

Post (Separately) Posted: Thu May 07, 2026 21:39    Post subject: Reply with quote

Orion9 wrote:
/WAIT

Вот-вот. Я выше писал про это в другом случае. Там тоже без задержки работало быстро, но неправильно, а с задержкой очень медленно. Это при выводе самих данных. Из-за этого я перешел на буфер обмена. Но данные можно обрабатывать без ShellExec, а удалить файл пока никак.
Так что без сансея точно ничего не решим.
Правда у меня возник вопрос. В ваших постах об ИИ я встретил интересную фишку. Файл очищается с помощью команды break. Не знал о таком ее применении. Интересно, чтобы -execute сработало файл именно удалять нужно? А может достаточно изменения?

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

Orion9
Вроде получилось более-менее решить вопрос с задержкой, заменив вашу на от ИИ:
Code:

# ждем, пока ExifTool создаст файл (цикл ожидания)
Local WaitCount = 0
While Not FileExist("%gExifOut%")
   Sleep 50
   WaitCount = WaitCount + 1
   if WaitCount > 20 then Break # Таймаут 1 сек
Wend

Правда идут пропуски выводы данных. Не все наименования выводятся. Видимо надо очень кропотливо подбирать значения задержки. Но не вижу в этом смысла, так как работает это точно также, как и без -stay_open. Очень длинное зависание и потом данные выводятся. Насколько понимаю, ShellExex может работать только так. Надо попробовать реализовать этот код в au3. Вдруг там это даст прирост скорости.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 229, 230, 231, 232, 233, 234  Next
Page 230 of 234

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group