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 ... 228, 229, 230
 
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: 1085

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: 1085

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: 1085

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: 1085

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: 541

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: 1085

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: 541

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
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 ... 228, 229, 230
Page 230 of 230

 
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