| View previous topic :: View next topic |
| Author |
Message |
AkulaBig
Joined: 03 Dec 2008 Posts: 613
|
(Separately) Posted: Sun Sep 27, 2026 12:01 Post subject: |
|
|
| Orion9 wrote: | | Может я не ту версию скачал |
У меня одна версия.
| Orion9 wrote: | | Для работы кнопки по алгоритму, который был выше, ControlSetMouseAction должен вызываться (назначаться) только один раз |
Я это уже понял.
| Orion9 wrote: | | Вместо этого кнопка просто меняет состояние глобальной переменной |
Ну у меня значение из инишника читается. Переменная не позволяет запомнить значение.
Ладно, надеюсь все равно разберусь. Я уже понял, что невнимательно разобрался с алгоритмом с первого раза. Назначение должно происходить один раз.
Добавлено спустя 56 минут:
Orion9
Ну все, разобрался. Все отлично работает. Спасибо за помощь. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1266
|
(Separately) Posted: Sun Sep 27, 2026 13:26 Post subject: |
|
|
| AkulaBig wrote: | | Я уже понял, что невнимательно разобрался с алгоритмом с первого раза |
Да бывает. Я тоже сейчас на трезвую голову посмотрел свой вчерашний алгоритм и увидел в нем косяки. Все-таки видимо два стопарика с утра лишними были.
Более простая и правильная версия функции хука (хотя насколько она правильная еще вопрос)
 Hidden text | Code: | Func KeyboardProc(nCode, wParam, lParam)
Static HC_ACTION = 0
Static hasHintCaps = gHintCaps
Static keyDown = 0, keyUp = 0, isHint = 0, T1, T2
# Передача сообщения следующему хуку
If nCode < HC_ACTION Then
Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "wParam", wParam, "Ptr", lParam, "Ptr")
EndIf
# OutputDebugString("nCode: " & nCode & " wParam: " & wParam & " lParam: " & lParam)
Local bitUp, bitRepeat
If auX64 Then
bitUp = lParam > 2147483647 ? 1 : 0
Else
bitUp = BitAND(BitShift(lParam, 31), 1)
EndIf
# bitUp = BitAND(BitShift(lParam,16), 0x8000) = 0x8000 ? 1 : 0
# bitRp = BitAND(BitShift(lParam,16), 0x4000) = 0x4000 ? 1 : 0
# Перехват CTRL
If wParam = 0x11 Then
# OutputDebugString("Repeat Count: " & BitAND(lParam, 0xffff) & " bitRepeat: " & bitRp & " bitUp: " & bitUp)
If Not bitUp Then
keyDown += 1
If auX64 And keyDown > 4 Then # отключение CTRL для ТСх64 через 5 повторов
If hasHintCaps Then
Global gHintCaps = false # флаг подсказки MediaInfo для ТСх64
EndIf
If isHint = 0 Then
ShowHint("CTRL отключен", "", "", 400, 1)
isHint = 1
EndIf
Return 1
EndIf
Else
keyUp += 1
keyDown = 0
isHint = 0
If auX64 And hasHintCaps Then
Global gHintCaps = true
EndIf
If Round(GetUptime() - T1, 0) < 400 Then
Local sPath = GetCurrentPath(ItemAtCursor("panel"))
Local sName = sPath & ItemAtCursor("name")
RunThread("MediaInfoHint", sName)
#MsgBox("Файл под курсором: " & sName)
EndIf
T1 = GetUptime()
EndIf
EndIf
# Передача управления следующему хуку в цепочке
Return DllCall("CallNextHookEx", "Ptr", 0, "Int", nCode, "wParam", wParam, "lParam", lParam, "Ptr")
EndFunc
|
Но все работает лучше. Плюс бонус с миганием подсказки о выключеном котроле при долгом зажатии. Теперь сразу видно, когда он срабатывает. Двойной Ctrl тоже работает лучше: пока не видел больше несрабатываний. Если бы еще мультяшную подсказку доделать со страницами и прочим, вообще был бы шик. Но на это пока у меня времени наверное не будет. |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 613
|
(Separately) Posted: Sun Sep 27, 2026 13:56 Post subject: |
|
|
Orion9
Надо будет посмотреть. У меня-же важный вопрос с зависанием подсказок из ExifTool так и не решен. Может этот алгоритм как-то поможет. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1266
|
(Separately) Posted: Sun Sep 27, 2026 14:37 Post subject: |
|
|
| AkulaBig wrote: | | У меня-же важный вопрос с зависанием подсказок из ExifTool так и не решен |
Тут без Loopback не получится. Но он гуляет где-то в ночи, завидую ему. |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 613
|
(Separately) Posted: Sun Sep 27, 2026 16:06 Post subject: |
|
|
| Orion9 wrote: | | Тут без Loopback не получится. |
Да не, я не про косяки с разрядностью. Проблема в скорости ExifTool. Она и сама не быстрая и количество обрабатываемой ей инфы для некоторых расширений огромно. В качестве пользовательских столбцов она норм работает. А подсказки-же надо быстро выводить. И вот тут возникает проблема. Если навести и ждать, пока подсказка появится, то-есть скрипт отработает, все норм. А если быстро перемещать от файла к файлу, ТС вешается наглухо. А то и вовсе крашит. Я думаю надо как-то прерывать обработку скрипта, если курсор мыши с него ушел. Скорей всего без хуков здесь не обойтись. Но пока даже идей нет. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1266
|
(Separately) Posted: Mon Sep 28, 2026 12:10 Post subject: |
|
|
AkulaBig
Похоже Loopback все предусмотрел Есть же отложенная загрузка полей. После Pragma AutorunPluginFields попробуйте поставить SetFieldsParam("Delayed", 1), кажись работает. Я только не понял почему в два прохода, но панель обновляется как надо и в ТС х64.
| AkulaBig wrote: | | А подсказки-же надо быстро выводить |
Да вроде подсказка Exiftool быстро выводится за счет того, что процесс висит в памяти. Я чуть позже еще напишу. |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 613
|
(Separately) Posted: Mon Sep 28, 2026 13:27 Post subject: |
|
|
| Orion9 wrote: | | Да вроде подсказка Exiftool быстро выводится |
Не в Exiftool дело, а в огромном количестве данных, которое содержится в обрабатываемых ЕТ расширениях. Представьте, в djvu хранится инфа о каждой странице. Если вам интересно, я могу включить подсказки от ЕТ в сборке, чтобы вы протестировали. У меня они давно сделаны, но сейчас отключены до устранения проблем.
| Orion9 wrote: | | SetFieldsParam("Delayed", 1) |
Спасибо, надо будет попробовать. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1266
|
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 613
|
(Separately) Posted: Mon Sep 28, 2026 14:57 Post subject: |
|
|
| Orion9 wrote: | | Это не важно на самом деле. |
Я вам уже приводил пример запароленного файла. Вы назвали это частным случаем И таких файлов полно, на которых подсказка не мгновенно появляется. Не надо тестить файлы изображений и медиа. Тестите файлы документов. На файлах изображений можно сравнить скорость работы MI и ET, но никак ни скорость обработки файлов разных форматов. Если надо, я подготовлю вам небольшой архивчик для тестирования тяжелых файлов.
Блин, представляете. Я-же написал, что и на оф. форуме вопрос про вкл/откл меню задал. Сами понимаете, там в основном Флешер темой владеет. И он мне подсказал ответ. Но его вариант у меня не работал, к тому-же он был для хоткея с клавиатурой. А тут он поинтересовался результатами и я решил проверить. И его вариант работает! И причем как для мыши, так и для клавы. И этот вариант:... ту-ту, бум-бум, напряженная пауза - Return -1! В справке про это написано, но из-за неправильного алгоритма это не работало. Сейчас при правильном алгоритме все работает!
Добавлено спустя 2 часа 26 минут:
Orion9
Блин, подключил для тестирования колонки ЕТ для картинок и у меня скорость вывода не такая быстрая, как у вас. Выложите, пожалуйста. свой код. У меня полностью оформлен. То-есть с перекодировкой крякозябров. Может как-то с этим связано. В общем надо сравнивать с вашим кодом. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1266
|
(Separately) Posted: Mon Sep 28, 2026 20:13 Post subject: |
|
|
| AkulaBig wrote: |
Я вам уже приводил пример запароленного файла. Вы назвали это частным случаем |
Я потом вспомнил. И правда было такое
Именно для таких случаев и есть таймаут. Когда exiftool.exe не успевает выдавать информацию (по тем или иным причинам), то в тексте подсказки это должно быть как-то видно. А причины могут быть разные, не только зашифррованные и запароленные книги. Это может быть и просто медленный накопитель или битый файл или перегруженный процессор (конкретно в этот период). В общем таймаут в любом случае должен быть.
Мне пришлось немного постараться, чтобы его создать, поэтому на картинке чуть-чуть вырезано
 Hidden text
| AkulaBig wrote: | | Выложите, пожалуйста. свой код. У меня полностью оформлен. То-есть с перекодировкой крякозябров. Может как-то с этим связано. В общем надо сравнивать с вашим кодом. |
Код всё тот же. Ничего с тех пор не поменялось, кроме недавнего хука. Alt+F12 переключает поля подсказки на ExifHint. Кракозабры, как вы видите, есть (подсказка не до конца доделана), но тормоза связаны не с ними. Можете на сборке попробовать, там все настроено, кроме последнего хука, поэтому подсказка в сборке активируется по CapsLock для ТС х64. |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 613
|
(Separately) Posted: Mon Sep 28, 2026 20:32 Post subject: |
|
|
| Orion9 wrote: | | Код всё тот же |
Понятно. Придется по новой разбираться. Вроде-же на его основе я и делал. Сейчас проверил в вашей сборке. Даже на документах летает. Насчет тайм-аута потом буду спрашивать. Очень интересно, но сейчас надо с существующим кодом разобраться.
Добавлено спустя 1 час 37 минут:
Orion9
Вроде первоначально разобрался, запустил. Но у вас там через доп. файлы, а не через входной поток. Это меня и смутило. Думал вы через входной поток сделали, раз про него писали. Через входной поток у меня тоже есть, но через DllCall. Через файлы вроде быстро работает. Буду разбираться, почему у меня с задержкой запускается. |
|
| 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
|