Orion9

|
Posted: Fri Mar 13, 2026 00:41 Post subject: |
|
|
| AkulaBig wrote: | | Вышеприведенная функция нифига не работает со значениями на кириллице |
У exiftool, насколько я помню, есть параметры для работы с кодовыми страницами, например "-lang ru". Я в свое время заходил в справку об этом почитать, но там реально было муторно написано. Сейчас, однако, у болвантуса можно спросить, не стесняйтесь, он на все ответит )
| AkulaBig wrote: | | Можно ли взять значение из плагина и прогнать его через известную функцию фикса кодировки? |
Ту функцию делал Loopback для определенного случая кракозябр, поэтому просто применить ее к выводу exiftool вряд ли возможно. Но у Autorun есть объект Buffer, который может перекодировать строки. Например, если взять алгоритм, про который вы говорите, то:
| Code: | 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 wrote: | | А вместо ProcessExecGetOutput что-то можно использовать? |
Нет, насколько мне известно. Данные из консольного приложения (exiftool) должны как-то попасть в Autorun, ShellExec эту задачу не выполняет. ProcessExecGetOutput нормальный вариант, у него и ключ специальный есть для работы с кодовой страницей /C:nnnn. Говорю же: это exiftool тормозной Там ведь целый перл разворачивается.
| AkulaBig wrote: | | Косяк именно на встроенной видюхе. На большом компе все отработало отлично. |
Ну, странно. У меня как-раз после применения хука высветилась проблема, по крайней мере теперь я понял на что были жалобы. Ну, тут только Отцы-Системщики, наверное, смогут помочь — болванус электроиус как-то слабо вывозит.
 Hidden text Да, вылеты при открытии меню (особенно
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 (недопустимая инструкция)
Больше склоняюсь к мысли, что это шутки маэстро такие от любителей поавтокликать по невидимым окнам триала  |
|