View previous topic :: View next topic |
Author |
Message |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Sat May 24, 2025 00:37 Post subject: |
|
|
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 |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Sat May 24, 2025 12:43 Post subject: |
|
|
Orion9 wrote: | Тотал валится. Значит проблема с установкой элементов через Count всё же есть. |
Да, нашёл, неправильно устанавливалась ёмкость списка. Действительно, в данном примере это можно устранить начальной инициализацией в 0, хотя не факт, что помогло бы в другом случае.
Orion9 wrote: | Кстати, по этой же причине сразу за последними двумя строками следует: |
А вот как могло это чем-то помочь не понимаю. Без начального присваивания 0 этот код крашит тотал. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Sat May 24, 2025 14:00 Post subject: |
|
|
Loopback wrote: | А вот как могло это чем-то помочь не понимаю. Без начального присваивания 0 этот код крашит тотал. |
Имелось в виду, что без этого когда были проблемы, даже при первом обнулении, поэтому пришлось его добавить. Но как я писал, изначально функция выполнялась только в потоке, и я использовал Static. Возможно, сейчас этот код вообще не нужен и ничего не делает, но спасибо, что посмотрели. Я еще буду всё пересматривать и доделывать позже, тогда и потестирую.
А вот какая мысль возникла. Функционал кастомных полей вы добавили, а что если листерную часть добавить?
Ведь это возможно? Начать хотябы с простого вывода строковой переменной в окно Листера с возможностью смены шрифта и фона, можно такое провернуть? |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Sun May 25, 2025 00:36 Post subject: |
|
|
Orion9 wrote: | а что если листерную часть добавить? |
Возможно-то всё. Даже возникала такая мысль, но до появления DllCall было мало смысла, поскольку пришлось бы создавать развесистую обвязку, вроде GUI-функций в Autoit/AHK. Это долго, сложно и не очень интересно. Теперь без этого можно обойтись, но тут скриптового кода придется писать кучу, а при необходимости пользовательской отрисовки будет очень медленно. А сделать отрисовку быстрее - значит опять же нужен какой-то более высокоуровневый интерфейс для управления всем этим из Autorun.
В общем, добавлю в todo как потенциальную идею, но...
Orion9 wrote: | вывода строковой переменной в окно Листера |
Просто так туда ничего не выведешь, оно же не предоставляет никаких инструментов для этого. Тут надо создавать свое дочернее окно и выводить или рисовать в нём. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Sun May 25, 2025 14:16 Post subject: |
|
|
Loopback
Понял. Я думал, что можно будет сделать наподобие, как это сейчас сделано с подсказкой, т.е. задать отдельно параметры шрифта и фона и вывести текст функцией, но всё гораздо сложнее. |
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Mon May 26, 2025 23:28 Post subject: |
|
|
Версия Autorun 2.2.19 beta
 Список изменений - исправлена некорректная установка размера List свойством Count
+ Runtime: увеличена в разы скорость GetSelectedItems на больших списках
* Runtime: в GetSelectedItems изменён метод возврата текста большого размера
* Runtime: ClipGet может возвращать текст длиной более 32765 символов
+ API: расширен механизм возврата ошибок
- TextFile и BinaryFile не устанавливали макрос ERROR при ошибке
+ доработана и расширена функция FileGetVersion
- исправлено падение Date и Time на отрицательных числах
+ макрос AUTORUN_UTCDIFF, переменная AUTORUN_CFG
* оптимизация работы с внутренними командами для SendCommand
+ в функции FileSetAttr и FileSetTime добавлена поддержка масок и рекурсии
+ функции FileCopy, FileMove, FileDelete, DirCreate, DirCopy, DirMove, DirDelete
+ функции FileFind, FileFindEv, FileMatchMask
+ Runtime: в ItemAtCursor добавлен тип "name"
+ Runtime: GetCurrentItem может получать имя файла в режиме эскизов
+ FileGetAttr добавлен атрибут L (точка повторной обработки)
+ FileSetTime может задавать одновременно несколько видов меток времени
+ параметр lParam в функции обратного вызова RegisterCommand теперь опциональный
* при чтении переменных приоритет переменных окружения теперь ниже приоритета глобальных переменных
Эта версия сфокусирована на поиске и всём, что на нём завязано, в частности функции копирования/перемещения. Это последний крупный блок со взаимосвязями, который хотелось закончить до релиза, всё остальное прикладные задачи, которые могут быть сделаны в любое время. Да и наличие DllCall теперь избавляет о необходимости делать мелкие функции с одним-двумя вызовами системных функций. Так что настало время перейти к этапу исправлений и оптимизации.
В этом релизе есть ещё одно довольно существенное и важное изменение - меняется логика чтения переменных. Теперь переменные окружения также имеют свою "область видимости", у неё самый низкий приоритет. Т.е. в основном теле скрипта они могут быть перекрыты глобальными переменными, а в функциях и локальными.
Ранее в Autorun был запрет на одновременное существование глобальных переменных и переменных окружения. Это было связано с тем, что внутренние переменные и переменные окружения читаются единообразно, ещё одно наследие ранних версий.
При этом не получится создать глобальную переменную temp, tmp и path, или username и windir, поскольку такие переменные, скорее всего, есть в любой системе. Но это полбеды. Хуже с неизвестными переменными. Никогда не знаешь, какие переменные окружения могут оказаться на чужом компьютере. Т.е. делая сборку, нельзя быть уверенным, что она запустится на другом компьютере. Страдает переносимость кода.
На имеющиеся скрипты это изменение не должно никак повилять, потому что раньше с одним именем мог быть создан только один вид переменных и для них ничего не изменится. В новых изменённую логику нужно учитывать. |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 370
|
(Separately) Posted: Tue May 27, 2025 17:17 Post subject: |
|
|
Отличные новости! Будем тестить потихонечку. Обновление проблем не вызвало. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Tue May 27, 2025 20:16 Post subject: |
|
|
Loopback
Спасибо за шикарные файловые функции! Пока только начал тестирование, но кажется, есть проблема с FileGetVersion - стандартный пример из справки не работает: Code: |
# Запись версии TC в переменную (например, 11.03)
TCVersion = FileGetVersion(COMMANDER_EXE, "FileVersion") |
|
|
Back to top |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Tue May 27, 2025 23:45 Post subject: |
|
|
Orion9 wrote: | стандартный пример из справки не работает |
Похоже только под x64. Вот как бы выработать привычку обязательно проверять под x64... Буду смотреть. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Wed May 28, 2025 00:29 Post subject: |
|
|
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 |
|
 |
Loopback
Joined: 07 Sep 2009 Posts: 1554
|
(Separately) Posted: Wed May 28, 2025 00:56 Post subject: |
|
|
Orion9
Да, это не обязательно могло быть на x64, но у меня на ней проявилось. Исправил, обновил по той же ссылке.
Orion9 wrote: | назад во весь экран не разворачивается, а переходит в режим простого окна |
Да, надо просто заменить WinSetState(1) на WinSetState(5) в функции MinTrayAction. Пример поправлю, так действительно будет правильнее. |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Wed May 28, 2025 13:35 Post subject: |
|
|
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 |
|
 |
yozhik

Joined: 04 May 2014 Posts: 266 Location: Электросталь
|
(Separately) Posted: Wed May 28, 2025 17:16 Post subject: |
|
|
Для того чтобы полностью избавиться от помощи внешних утилит теперь не хватает только StrRegexReplace  _________________ Amo ergo sum |
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 786
|
(Separately) Posted: Wed May 28, 2025 18:59 Post subject: |
|
|
Коммандер сказал "От винта!"
 .aucfg Code: | RegisterCommand 62016 "RotateIcon"
Global ROTATE_THREAD = 0
Func RotateIcon()
If ROTATE_THREAD > 0 Then
ROTATE_THREAD = 0
Return
EndIf
RunThread ThreadRotateIcon
EndFunc
Func ThreadRotateIcon()
ROTATE_THREAD = 1
While ROTATE_THREAD > 0
Sleep(100)
IconRotateDraw()
Wend
EndFunc
Func IconRotateDraw()
Static nIco = 0
nIco += 1
If nIco > 4 Then nIco = 1
Local sFile = COMMANDER_PATH & "\Icons\TC\" & nIco & ".ico"
Local hIco = DllCall("shell32\ExtractIconW", _
"ptr", AUTORUN_TCHANDLE, _
"wstr", sFile, _
"uint", 0, _
"ptr")
Local hWnd = WinFind(AUTORUN_TCHANDLE, _
(AUTORUN_TCARCH = 32 ? "TMyPanel" : "Window"), _
(AUTORUN_TCARCH = 32 ? 5 : 7))
Local hDC = DllCall("GetWindowDC", "ptr", hWnd, "ptr")
Local x, y, w, h
WinGetPos("x", "y", "w", "h", hWnd)
DllCall("DrawIconEx", _
"ptr", hDC, _
"int", w - 30, _
"int", 1, _
"ptr", hIco, _
"int", 12, _
"int", 12, _
"uint", 0, _
"ptr", 0, _
"uint", 0x0003)
SendMessage(AUTORUN_TCHANDLE, 0x80, 0, hIco)
SendMessage(AUTORUN_TCHANDLE, 0x80, 1, hIco)
DllCall("ReleaseDC", "ptr", AUTORUN_TCHANDLE, "ptr", hDC)
DllCall("DestroyIcon", "ptr", hIco)
EndFunc
|
 Icons Code: | MIME-Version: 1.0
Content-Type: application/octet-stream; name="TC.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="TC.7z"
N3q8ryccAATOSPgoMQQAAAAAAAAiAAAAAAAAAK6TTgPgEfcDrl0AAGAEkCoDQi96BFoomAoR6Kca
ksXsmah8Y2qfDe7uVm/oRITsfehEAWs4l3R/Nrj2A4m3iNMBRthITX7tVq2teSW4C/jO76jbgp/d
LbY3JMdcHOvv3u0e+Mafgo5oCZcQrwLQHTnkdcbdu4TZ9sGdkUDpGJ8r6N38csmd8i3UW0HHNaJw
riccfaKMfdIRWCOiYtyV3elDlLLghOUGCM2uxHU31Ifry7GIrJademsy7TMN2XbSz0ct37RKIg4w
B9R2hz5K/PRhXkB/IdCnjUwdPKVjSBw+5BmHwoHrDLfLPgq7cajARU1A6sNXACNXJEzJAY74MBS1
Wp/36QTgRAMMx0Kowu04W5XGnTl+/fRC99ICdEamxdG9Wu9ykcwKR6Nrl3lzqSPNeR8sZaXfixmw
b4K70KzwQstwZxLG3eUKEf98CvtGUuTaTeaLoKnscBrlrcZT2AGHywiirJ5pnBD39QPy073fntiD
u19RuRHpm00duKxjy8B+r7KYHlec7FnUyv2s8do7VEwNWO4jThua69EFIeA/8NvibAaFPCXiZp4J
rTiDO5GdNLZd1/xz+vJTaB/XnZhW9XRPK6JKjkrv7x/ixcN0PYMMWJ1GjcIykrhR68ZcooqcnCgK
sA2DHluYDhQ07B5Fy9qIRPWHy+gCCAEw7l6RV7g4kOIhIXJH/0TgtFNN82zTjacG2o4aG+6K2h6E
QY9rtnun6d6l+N5kywA3VQTQtqp64QESdyXgITw23Xgq8NbyRrciQx8At+LgLejPB+QWTHSmUbLe
DkOmS78l8N69brWxjLOhtPXumLguC5n50ZRKIo2hoXYK+uyzYu81jhxVEPeis27RqXdcRKO35K1t
je7bdL6NktQSO5d+4+pt6yGVDR4NMD1Jv9YQq9/GVARNdao7MpPErvo3fSTWJWKD4AWdauoWF7+q
B2AikrXt3R3N8/omjU7aHzi/JeFNve/eoK/HHokNziDbeKjhp0WbOnIBGWFHNjGAju2/21xSezfH
G5tbYGZCFdFGrCY4Z5q8HpAX8ZOV7eoR8zNLSsh6ql2NALlbU20F0+043W/K8zvMb5j0E2o0WgJN
TqB0i7ZkYxt3UXbfxAgqI0PG4NeBNQ42fp+vzTN79syYxNjN/q3pXlJrttF2/bWvCLjIKz8xpB9j
eCwlHXnUbnTfSkAPRvME15VMYUUEwQq2w5I/9qBOpFf5RUecmtffTF6mujgmeBlkkOG7jEujKav/
eCtJJklnxGl5oeTAAAAAgTMHrg/VUdtGlyTT/rNwFrFR7o9meG60H5TdVtMt2E/AVhb/besx56NL
glhEy1xsT8hbcNiw73O6polZti1hRoPHJr+Hsavanp2tBVFU+x4nNeiI831KFKi8iCGq5LCEcM5F
gzGK0trybzIaFbekvPW/KVKYjO0dIBcGg7YBCXsABwsBAAEjAwEBBV0AEAAADICuCgEEjNTnAAA=
|
 Button Code: | TOTALCMD#BAR#DATA
62016
%COMMANDER_EXE%
Поехали!
-1
|
Loopback wrote: | всё остальное прикладные задачи, которые могут быть сделаны в любое время |
Об этом было в топике: одной из фич, которую хотелось бы увидеть, умение Autorun каким-то образом сообщать статус долгих операций. Пример выше, конечно, больше шуточный, но хотелось бы чего-то такого, более серьёзного.
P.S.
 yozhik Autorun - это Cosmos ) |
|
Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 370
|
(Separately) Posted: Wed May 28, 2025 23:00 Post subject: |
|
|
Коли 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 |
|
 |
|
|
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
|