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 ... 187, 188, 189 ... 191, 192, 193  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Sat May 24, 2025 00:37    Post subject: Reply with quote

Loopback wrote:
Примерно так (не тестировал)

Норм шпарит. Проверил сначала на 1000, потом на 2000 файлов с общим размером списка в буфере в 330 Кб, но думаю, он и больше возьмет, ведь ничего нигде не обрезается.
Loopback wrote:
Какие именно? Нужна все же какая-то конкретика.

Да, не успел просто написать, отвлекли немного. В общем, думаю, это связано с тем, что в коде после создания объектов List некоторым из них присваивается количество элементов через свойство Count:
Code:
Local aSel = List(), aCol = List(), aVal = List(), aRow = List()
...
aCol.Split(aSel[0], auTAB)
aVal.Count = aCol.Count

Вот здесь, возможно, есть проблема, но не хочу вводить вас в заблуждение - я вносил много изменений, может и сам где-то накосячил ранее из-за того, что функция была сначала завязана только на поток, просто подумал, не лишним будет сообщить об этом. Кстати, по этой же причине сразу за последними двумя строками следует:
Code:
For j = 0 To aVal.Count - 1
   aVal[j] = ""
Next

Без такой принудительной инициализации элементов тоже были проблемы. Может, сейчас их и нету, это надо тестировать, но в ближайшие 2-3 недели буду пребывать в полном ауте. Сейчас закомментировал:
Code:

    #{
    aSel.Count = 0
    aCol.Count = 0
    aVal.Count = 0
    aRow.Count = 0         
    #}

Нет. Тотал валится. Значит проблема с установкой элементов через Count всё же есть.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1554

Post (Separately) Posted: Sat May 24, 2025 12:43    Post subject: Reply with quote

Orion9 wrote:
Тотал валится. Значит проблема с установкой элементов через Count всё же есть.

Да, нашёл, неправильно устанавливалась ёмкость списка. Действительно, в данном примере это можно устранить начальной инициализацией в 0, хотя не факт, что помогло бы в другом случае.
Orion9 wrote:
Кстати, по этой же причине сразу за последними двумя строками следует:

А вот как могло это чем-то помочь не понимаю. Без начального присваивания 0 этот код крашит тотал.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Sat May 24, 2025 14:00    Post subject: Reply with quote

Loopback wrote:
А вот как могло это чем-то помочь не понимаю. Без начального присваивания 0 этот код крашит тотал.

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

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

Ведь это возможно? Начать хотябы с простого вывода строковой переменной в окно Листера с возможностью смены шрифта и фона, можно такое провернуть?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1554

Post (Separately) Posted: Sun May 25, 2025 00:36    Post subject: Reply with quote

Orion9 wrote:
а что если листерную часть добавить?

Возможно-то всё. Даже возникала такая мысль, но до появления DllCall было мало смысла, поскольку пришлось бы создавать развесистую обвязку, вроде GUI-функций в Autoit/AHK. Это долго, сложно и не очень интересно. Теперь без этого можно обойтись, но тут скриптового кода придется писать кучу, а при необходимости пользовательской отрисовки будет очень медленно. А сделать отрисовку быстрее - значит опять же нужен какой-то более высокоуровневый интерфейс для управления всем этим из Autorun.

В общем, добавлю в todo как потенциальную идею, но...

Orion9 wrote:
вывода строковой переменной в окно Листера

Просто так туда ничего не выведешь, оно же не предоставляет никаких инструментов для этого. Тут надо создавать свое дочернее окно и выводить или рисовать в нём.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Sun May 25, 2025 14:16    Post subject: Reply with quote

Loopback
Понял. Я думал, что можно будет сделать наподобие, как это сейчас сделано с подсказкой, т.е. задать отдельно параметры шрифта и фона и вывести текст функцией, но всё гораздо сложнее.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1554

Post (Separately) Posted: Mon May 26, 2025 23:28    Post subject: Reply with quote

Версия Autorun 2.2.19 beta

 Список изменений

Эта версия сфокусирована на поиске и всём, что на нём завязано, в частности функции копирования/перемещения. Это последний крупный блок со взаимосвязями, который хотелось закончить до релиза, всё остальное прикладные задачи, которые могут быть сделаны в любое время. Да и наличие DllCall теперь избавляет о необходимости делать мелкие функции с одним-двумя вызовами системных функций. Так что настало время перейти к этапу исправлений и оптимизации.

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

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

При этом не получится создать глобальную переменную temp, tmp и path, или username и windir, поскольку такие переменные, скорее всего, есть в любой системе. Но это полбеды. Хуже с неизвестными переменными. Никогда не знаешь, какие переменные окружения могут оказаться на чужом компьютере. Т.е. делая сборку, нельзя быть уверенным, что она запустится на другом компьютере. Страдает переносимость кода.

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



Joined: 03 Dec 2008
Posts: 370

Post (Separately) Posted: Tue May 27, 2025 17:17    Post subject: Reply with quote

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



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Tue May 27, 2025 20:16    Post subject: Reply with quote

Loopback
Спасибо за шикарные файловые функции! Пока только начал тестирование, но кажется, есть проблема с FileGetVersion - стандартный пример из справки не работает:
Code:

# Запись версии TC в переменную (например, 11.03)
TCVersion = FileGetVersion(COMMANDER_EXE, "FileVersion")
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1554

Post (Separately) Posted: Tue May 27, 2025 23:45    Post subject: Reply with quote

Orion9 wrote:
стандартный пример из справки не работает

Похоже только под x64. Вот как бы выработать привычку обязательно проверять под x64... Буду смотреть.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Wed May 28, 2025 00:29    Post subject: Reply with quote

Loopback
Нет, до х64 я ещё не успел добраться ) Но проблему удалось локализовать. Заметил, что в трее версия в подсказке нормально отображается, а при наведении на функциональную кнопку поля остаются пустыми. Другими словами, проблема проявляется, когда FileGetVersion вызывается из функции, привязанной к контролу через ControlSetHint. Вот полный код:
Code:
ControlSetHint /F /D:50 /B:7 17 "AutorunHints"
 
Func AutorunHints()   
    Local A_Version, A_Copyright, A_DateTime, _
          A_Wdx = AUTORUN_PATH & "\Autorun.wdx", txt   
                       
    If IsPressed (KEY_SHIFT) Then Return GetState("libs")
    If IsPressed (KEY_CTRL) Then
       txt = GetState("procs")
       If StrLen(txt) > 0 Then txt = auCRLF & txt
       Return GetState("threads") & txt
    Endif   
    If IsPressed (KEY_ALT) Then Return GetState("paths")
   
    A_Version   = FileGetVersion(A_Wdx, "FileVersion")
    A_Copyright = FileGetVersion(A_Wdx, "LegalCopyright")
    obj = Plugin("FileDateTime")
    If ERROR = 0 Then
       obj.FileName = A_Wdx
       A_DateTime = StrFormat("%.0f", obj.GetValue(3))
       Free(obj)
    Else
       A_DateTime = "Error " & ERROR
    Endif
    Return "Версия: " & A_Version & auCRLF & "Дата изменения: " & A_DateTime & auCRLF & "Авторские права: " & A_Copyright
   
EndFunc

Если в любом месте файла конфигурации сделать простой вызов MsgBox(AutorunHints()), то проблем с FileGetVersion нет.

В общем, многое успел потестировать, вроде бы проблем пока нет. До новых функций, к сожалению, ещё не скоро доберусь, хотя хотелось бы побыстрее, но забыл в тот раз написать. Повесил ваш пример со сворачиванием окна ТС в трей на CTRL + "клик" - нравится эта идея. Но при разворачивании назад из трея, окно, которое было развернуто во весь экран до сворачивания в трей, назад во весь экран не разворачивается, а переходит в режим простого окна. У вас есть такая проблема?
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1554

Post (Separately) Posted: Wed May 28, 2025 00:56    Post subject: Reply with quote

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

Orion9 wrote:
назад во весь экран не разворачивается, а переходит в режим простого окна

Да, надо просто заменить WinSetState(1) на WinSetState(5) в функции MinTrayAction. Пример поправлю, так действительно будет правильнее.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Wed May 28, 2025 13:35    Post subject: Reply with quote

Loopback wrote:
Исправил, обновил по той же ссылке.

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

Глянул глазком FileFind, очень круто. Какие же возможности это открывает, и кстати, спасибо за роскошные примеры внизу! Там что ни пример, то можно в коллекцию, ну или в реальную сборку )
Loopback wrote:
Да, надо просто заменить WinSetState(1) на WinSetState(5) в функции MinTrayAction. Пример поправлю, так действительно будет правильнее.

Да, сделал. Только нужно еще WinSetState(23) добавить сразу за WinSetState(5), чтобы окно активировалось. А так всё классно. Жаль, что Би$$и & Co. во всей вЫнде так не сделали )

P.S.

ClipGet проверил на >5000 файлов и буфере в 870Кб, проблем не обнаружил. А этот код инициализации элементов действительно теперь не нужен:
Code:
    For j = 0 To aVal.Count - 1
        aVal[j] = ""
    Next

И без него всё работает.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 266
Location: Электросталь

Post (Separately) Posted: Wed May 28, 2025 17:16    Post subject: Reply with quote

Для того чтобы полностью избавиться от помощи внешних утилит теперь не хватает только StrRegexReplace Smile
_________________
Amo ergo sum
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 786

Post (Separately) Posted: Wed May 28, 2025 18:59    Post subject: Reply with quote

Коммандер сказал "От винта!" Mr. Green

 .aucfg

 Icons

 Button


Loopback wrote:
всё остальное прикладные задачи, которые могут быть сделаны в любое время

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

P.S.

 yozhik
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 370

Post (Separately) Posted: Wed May 28, 2025 23:00    Post subject: Reply with quote

Коли MediaInfo используется у меня в нескольких местах, конечно захотел прописать ее через переменную util_MI. В TCMediaInfo это без проблем работает, то-есть путь прописан правильно. В DllCall не работает:
Code:
   Static sLib = util_MI
   Static hLib = DllCall("LoadLibrary", _
         "wstr", sLib, _
         "ptr")
   If hLib = 0 Then
      Return "Error LoadLibrary " & sLib
   EndIf

Через DebugView путь показывает правильно. Как в вызове библиотеки правильно прописать?
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 ... 187, 188, 189 ... 191, 192, 193  Next
Page 188 of 193

 
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