Страница 226 из 243

Добавлено: Чт мар 12, 2026 12:52
AkulaBig
Orion9
Два вопроса, как к заму сансея :)
Вот причесаный ваш код. Не обращайте названия на названия переменных. Они просто из вашего примера. Код работает, но просто ужасно медленно. Нет идей, как его ускорить?

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

Func FieldET(FileName, FieldIndex, UnitIndex)
	Local gGeoOut = List(), gGeoData = List("", "")
	Local gGeoList = List("Title", "Author")
    Static lst, dat, idx
    If StrPos(FileGetAttr(FileName), "D") Then Return
    If FieldIndex = 1 + 60 Then
       gGeoOut.Count = 0       
       gGeoOut.Text = ProcessExecGetOutput(util_ET, '"' & FileName & '"')
		# OutputDebugString(gGeoOut.Text)
       For idx = 0 To gGeoData.Count - 1
           gGeoData[idx] = ""
       Next
       For geo In gGeoOut
           If StrPos(geo, ":") Then 
              lst = StrTrim(StrPart(geo, ":", 1))
              dat = StrTrim(StrPart(geo, ":", 2))
              idx = gGeoList.IndexOf(lst)
              If idx <> -1 Then gGeoData[idx] = dat
           EndIf
       Next
    Endif     
    Return gGeoData[FieldIndex - 1 - 60]
EndFunc
И еще. Вышеприведенная функция нифига не работает со значениями на кириллице. Но есть плагин, который лишь иногда крякозябры выводит. Можно ли взять значение из плагина и прогнать его через известную функцию фикса кодировки?

Добавлено: Чт мар 12, 2026 19:38
Orion9
AkulaBig
Да есть косяк, и он как-то связан с видимостью или невидимостью окна триала, что с самого начала и заметил sa. Вчера я сосредоточился на переводе кода и запуске обеих версий ТС без ошибок, времени не было проверить всю работоспособность. А ее по сути и нет :)

Тотал закрывается при клике по верхнему меню или по строке табуляторов, как тут говорилось. И это происходит только, когда автоклик срабатывает на невидимом окне. При этом хук исправно работает, делает, что от него требуется. Проверить можно в отладчике или заменой nCmdShow = 0 на nCmdShow = 1, окно при этом будет мелькать.

Я поставил кучу OutputDebugString, пытаясь найти хоть что-то, но безрезультатно. Единственное, что принесло пользу это

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

Pragma AutorunFinalizeSection

OutputDebugString("exit")
Хотя бы понятно, что тотал не падает, а просто выходит — закрывается.

В общем, продолжать искать причины этой проблемы желания особо нет. Может Loopback вернется что подскажет, а меня пока и простой клик с задержкой устраивает )

На счет ExifTool, так она же (эта утилита) сама тормозная, оптимизация вряд ли поможет. Выигрывать доли секунды на оптимизации строковых функций и поиске по массиву — смысла как бы нет, проще уж совсем отказаться от этой утилиты и использувать только в крайнем случае, когда других вариантов вытянуть данные действительно нет, как в случае с гео-данными или какими-то другими специфическими мета-данными. А вы, как я понимаю, что-то другое хотите. Ну тогда лучше MediaInfo использовать, гораздо быстрее будет.

Добавлено: Чт мар 12, 2026 21:46
AkulaBig
Orion9 писал(а):На счет ExifTool, так она же (эта утилита) сама тормозна
Не самая быстрая, но норм. wdx-плагин нормально с ней работает. А начал я копаться из-за того, что Exif и плагин опять не поддерживает русские кодировки, подобно MI. Для Exif есть прекрасный Листер-плагин от наших ребят. Там с кодировками все ОК. А wdx-плагин иностранец писал. Вот я и решил скриптом заняться.
Orion9 писал(а):тогда лучше MediaInfo использовать, гораздо быстрее будет.
Они разные данные поддерживают. Exif прекрасно поддерживает документы и много еще чего. С помощью Exif я откажусь от нескольких wdx-плагинов, которые сейчас использую. Полей-бы хватило. Этот монстр совершенно не хуже MI, но для своих данных.

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

А вместо ProcessExecGetOutput что-то можно использовать? С учетом, что от MI мы сразу из библиотеки данные получали. Может ProcessExecGetOutput тормозит? С помощью ShellExec можно данные получить?

Добавлено спустя 45 минут:
Orion9 писал(а):Да есть косяк, и он как-то связан с видимостью или невидимостью окна триала, что с самого начала и заметил sa.
Забыл прокомментировать. То ли я вам не понятно объяснил, то ли вы невнимательно прочитали мое сообщение.
Косяк именно на встроенной видюхе. На большом компе все отработало отлично. Краш именно на малыше со встроенной видюхой. То-есть один в один, как у кликеров.

Добавлено: Чт мар 12, 2026 23:41
Orion9
AkulaBig писал(а):Вышеприведенная функция нифига не работает со значениями на кириллице
У exiftool, насколько я помню, есть параметры для работы с кодовыми страницами, например "-lang ru". Я в свое время заходил в справку об этом почитать, но там реально было муторно написано. Сейчас, однако, у болвантуса можно спросить, не стесняйтесь, он на все ответит )
AkulaBig писал(а):Можно ли взять значение из плагина и прогнать его через известную функцию фикса кодировки?
Ту функцию делал Loopback для определенного случая кракозябр, поэтому просто применить ее к выводу exiftool вряд ли возможно. Но у Autorun есть объект Buffer, который может перекодировать строки. Например, если взять алгоритм, про который вы говорите, то:

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

Local buf = Buffer(nSize)
buf.Zero()
buf.SetStr(String, 0, nSize, "CP:28591")
Local fixed = buf.GetStr(0, nSize, "ANSI")       
Free(buf)
Перекодирует строку из iso-8859-1 в ANSI. Должно и с другими кодировками работать.
AkulaBig писал(а):А вместо ProcessExecGetOutput что-то можно использовать?
Нет, насколько мне известно. Данные из консольного приложения (exiftool) должны как-то попасть в Autorun, ShellExec эту задачу не выполняет. ProcessExecGetOutput нормальный вариант, у него и ключ специальный есть для работы с кодовой страницей /C:nnnn. Говорю же: это exiftool тормозной :) Там ведь целый перл разворачивается.
AkulaBig писал(а):Косяк именно на встроенной видюхе. На большом компе все отработало отлично.
Ну, странно. У меня как-раз после применения хука высветилась проблема, по крайней мере теперь я понял на что были жалобы. Ну, тут только Отцы-Системщики, наверное, смогут помочь — болванус электроиус как-то слабо вывозит.
[cut]Да, вылеты при открытии меню (особенно
PopupMenu) напрямую связаны с тем, как Windows обрабатывает эти элементы. В WinAPI меню — это тоже окна (специального класса #32768), и ваш хук на ShowWindow может их «сломать».
Вот основные причины, почему приложение закрывается именно в этот момент:
1. Критическая зависимость от фокуса (SetFocus/Capture)
Когда открывается меню, Windows вызывает ShowWindow для него. Если ваш хук принудительно возвращает SW_HIDE, окно меню создается, но остается невидимым.

Проблема: Система ожидает, что невидимое меню захватит фокус ввода (SetCapture).
Результат: Программа попадает в логический тупик: она «думает», что меню открыто и ждет клика, но клик уходит в основное окно. Это часто вызывает Stack Overflow или нарушение прав доступа при попытке отрисовать «активное, но скрытое» состояние.

2. Зацикливание (Рекурсия) внутри хука
Некоторые меню при открытии запрашивают состояние родительского окна.

Если ваш колбэк DetouredShowWindow вызывает какую-то функцию AHK, которая косвенно дергает ShowWindow (или WinShow), вы создаете бесконечную рекурсию.
Результат: Стек переполняется мгновенно, и приложение «тихо» закрывается (Silent Exit).

3. Нарушение цепочки сообщений (CBT Hook vs Inline Patch)
Если вы используете Inline Patching (замена байтов), то:

Меню часто отрисовываются через user32.dll внутренними вызовами, которые могут обходить ваш патч наполовину.
Результат: Процессор пытается выполнить код «посередине» инструкции, которую вы затерли своим JMP. Это вызывает ошибку ILL_ILLOPC (недопустимая инструкция)[/cut]
Больше склоняюсь к мысли, что это шутки маэстро такие от любителей поавтокликать по невидимым окнам триала :mrgreen:

Добавлено: Пт мар 13, 2026 03:32
CaptainFlint
[mod="CaptainFlint"]Напоминаю, что автоскрытие стартовой надоедалки у незарегистрированной версии противоречит если не формальному тексту лицензии, то явно высказанным претензиям от автора программы.
Так что очень прошу эту тему здесь больше не поднимать. Отдельные упоминания существования такого явления в природе допускаются, но активная разработка этого функционала — пожалуйста, не здесь.[/mod]

Добавлено: Пт мар 13, 2026 05:04
AkulaBig
Orion9
Спасибо за полезные комментарии.
Orion9 писал(а):Говорю же: это exiftool тормозной
Но wdx-плагин нормально-же работает. Конечно чуть-чуть помедленнее, чем другие. Но весьма терпимо. А у меня прям на несколько секунд ТС зависает. Причем и на данных из плагина. Я проверил.
Но есть проблема пострашней - это кодировка. Пока получается, что через поля проблемы с одними файлами, с данными из плагина - с другими. Конечно на основе ваших последних комментов поковыряюсь еще.
Orion9 писал(а):Ну, странно.
Для вас странно, потому что вы этот глюк не знаете. А я-то его много раз ловил. И пользователи моей сборки. Теперь я практически утверждаю, что видео система как-то на этом завязана.
CaptainFlint
Тема конечно щекотливая. Но вот я только авто нажатие на кнопку сделал. Как думаете, это попадает под просьбу Гислера? Единого мнения по этому поводу нет. Но меня именно с моральной точки зрения интересует.

Добавлено: Пт мар 13, 2026 09:18
AkulaBig
Orion9 писал(а):Ту функцию делал Loopback для определенного случая кракозябр, поэтому просто применить ее к выводу exiftool вряд ли возможно
Поразбирался. Нормальна функция отрабатывает. Собственно она отличается от вашей только тем, что если кодировка правильная, перекодировка не происходит. То, что и надо. Но вот подобрать правильную кодировку не получается. Вроде надо 1251 перекодировать в UTF-8. Но тогда получается вывод как в плагине.
Вот первую колонку я вывел, третью - плагин.
Изображение
Таким образом у меня получается либо других файлов правильную кодировку вывести, либо этого. А надо всех.
Кстати, объясню, почему я с ExifTool ковыряюсь. Ни один плагин, хоть и с названием Exif не показывает полную инфу. Например данные вот этого файла, с кодировкой которого я бьюсь, другие плагины вообще не показывают:
Изображение
Видите, данные файла Test.doc как выводятся.
Ну и последний скрин с правильной кодировкой для данного файла:
Изображение
Это если я в функции FixCP устанавливаю странную перекодировку 1251 в ANSI. Test.doc показывает правильно, а остальные крякозябры.

Добавлено: Пт мар 13, 2026 10:09
sa
AkulaBig писал(а):Но вот я только авто нажатие на кнопку сделал.
Почему-то сам Гислер автонажатие для этого случая делать не стал :D. Хотя, ведь сумел бы...

Добавлено: Пт мар 13, 2026 10:32
AkulaBig
sa
А зачем он будет делать автонажатие? Он-же продает ТС. Покупаешь ключ и никакого наг-скрина не будет. Но дело в том, что сейчас для России Гислер разрешил использовать ТС бесплатно больше месяца. Соответственно и у наг-скрина как-бы предназначение изменилось.

Добавлено: Пт мар 13, 2026 10:50
sa
AkulaBig писал(а):Соответственно и у наг-скрина как-бы предназначение изменилось.
Однако автонажатие может начать срабатывать не только в России и тогда ключ кому-то (не всем, конечно) вовсе не станет нужен.

Добавлено: Пт мар 13, 2026 12:00
Orion9
CaptainFlint
Тема с автокликером, считайте, закрыта. Вопрос изначально стоял можно ли такое сделать (способен ли Autorun на такое), ответ — да, способен.

Loopback сделал практически все для работы с WInAPI. Можно сказать, повторил ветку External Libraries из справки Autohotkey, не считая объекта СОМ. А работу с некоторыми вещами сделал даже лучше, например, работу с объектом Buffer (удобнее, в смысле). Autorun немного остается до уровня полноценного Autohotkey, хотя ему этот уровень и не нужен. А вот что действительно нужно — завершенная версия плагина на сайте. Почему ее там до сих пор нет, вразумительного ответа я так и не услышал. Если товар сырой, это не значит, что его с витрины надо снимать.
AkulaBug писал(а):Но wdx-плагин нормально-же работает. Конечно чуть-чуть помедленнее, чем другие. Но весьма терпимо.
Вы бы хоть ссылку на плагин оставляли ) Небось какая-нибудь лайтовая самостоятельно скомпилированная версия exiftool, которая, конечно же, будет быстрее работать. Вроде плагина MediaTime.wdx, где еще старая MediaInfo.dll вшита прямо в плагин.

Нет, речь идет о полноценной exiftool, которая в последних версиях несколько десятков мегабайт занимает при развороте и кучу мелких файлов в придачу. А если использовать standalone.exe (самораспаковывающейся PAR старых версий), тормоза будут еще сильнее.

Откройте wlx плагин от Progman13, вот такая будет скорость. Там, кстати, в строке состояния параметры вызова exiftool можно увидеть, спасибо автору за это.
AkulaBug писал(а):Но есть проблема пострашней - это кодировка.
Должно, наверное, как-то решаться. Есть же у exiftool какие-то параметры для работы с кодовыми страницами, или нет? Что-то типа такой строки. В wlx плагине еще параметры в строке состояния посмотрите, или болвантуса хорошенько потрясите :lol:
AkulaBug писал(а):Собственно она отличается от вашей только тем, что если кодировка правильная, перекодировка не происходит.
Это был просто пример, поскольку неясно было из какой кодировки в какую переводить. Но судя по картинкам, легкой жизни у вас не будет :lol:

Зачем вам вообще этот exiftool? Лучше подключайте ИИ к разработке и сделайте плагин для MPC-BE или MPC Classic. Ну не заходит мне встроенный плеер от Гислера, совсем никак... Я бы ради MPC-BE в окне листера легко бы на борт лишние 70 мегабайт в сборку взял, без проблем.

Добавлено: Пт мар 13, 2026 12:42
AkulaBig
sa писал(а):Однако автонажатие может начать срабатывать не только в России и тогда ключ кому-то (не всем, конечно) вовсе не станет нужен.
Ваши предложения?
Orion9 писал(а):Вы бы хоть ссылку на плагин оставляли )
На нашем сайте все ExifToolWDX https://wincmd.ru/plugring/ExifToolWDX.html ExifToolView https://wincmd.ru/plugring/exiftoolview.html
Orion9 писал(а): Небось какая-нибудь лайтовая самостоятельно скомпилированная версия exiftool
Как-раз полная обновляемая версия.
Orion9 писал(а):Откройте wlx плагин от Progman13, вот такая будет скорость.
Ну судить о скорости по одному файлу не получится. И этот плагин работает быстро.
Orion9 писал(а):Там, кстати, в строке состояния параметры вызова exiftool можно увидеть, спасибо автору за это.
Я не обратил внимания. Спасибо.
Orion9 писал(а):Должно, наверное, как-то решаться.
Обязано. Progman13-же как-то сделал.
Orion9 писал(а):Зачем вам вообще этот exiftool?
Я выше написал.
Orion9 писал(а):сделайте плагин для MPC-BE или MPC Classic
И про это писал. Могли-бы они использовать внешние кодеки, можно было-бы покапаться.
Orion9 писал(а):Ну не заходит мне встроенный плеер от Гислера, совсем никак...
А плагин mmedia чем не угодил? Вообще для многих плееров плагины есть на просторах инета. Я встройку очень редко использую. VLC мое все. Кстати, и для него есть плагин. Кривущий.
Orion9 писал(а):MPC-BE
Гляну еще раз. Если плагин можно сделать без проблем, напишу.

Добавлено спустя 6 минут:
Orion9 писал(а):в строке состояния параметры вызова exiftool можно увидеть
Оказывается это надо было включить. Но кроме языка запуск utf-8 и так по умолчанию. А вот у Progman13 есть галочка в настройках:
Изображение
Вот она конвертирует как надо.

Добавлено: Пт мар 13, 2026 13:15
sa
AkulaBig писал(а):Но меня именно с моральной точки зрения интересует.
AkulaBig писал(а):Ваши предложения?
Никаких. Каждый решает сам, на чём остановиться. Мне повезло - с лицензией.

Добавлено: Пт мар 13, 2026 16:27
CaptainFlint
AkulaBig писал(а):Тема конечно щекотливая. Но вот я только авто нажатие на кнопку сделал. Как думаете, это попадает под просьбу Гислера? Единого мнения по этому поводу нет. Но меня именно с моральной точки зрения интересует.
Автор совершенно чётко высказывался, что он против создания, распространения и использования автокликеров для наг-скрина. Даже говорил, что если это станет слишком распространено, ему придётся отказаться от accessibility-поддержки в нём, которую он держит исключительно ради удобства пользователей с ограниченными возможностями, даже несмотря на то, что это упрощает жизнь автокликерам.

Это было сказано ещё до ситуации с невозможностью продажи в РФ, однако я не видел от него каких-то уточнений на эту тему. По умолчанию я трактую это как применение тех же правил "бесконечной триалки", по которым он не против частного некоммерческого использования незарегистрированной версии в течение произвольного срока с единственным условием: не пользоваться средствами обхода наг-скрина. Моральная точка зрения для меня выглядит так, что автор, столь щедро и доброжелательно относящийся к пользователям, не приносящим ему ни копейки денег, заслуживает высокого уважения, а его просьбы — ответной любезности.

Добавлено: Пт мар 13, 2026 16:49
AkulaBig
CaptainFlint писал(а):не приносящим ему ни копейки денег
С другой стороны наши плагины тоже не приносят нам ни копейки. А без них число пользователей ТС уменьшится значительно.
В общем я вас понял. Спасибо большое за разъяснения.