| View previous topic :: View next topic |
| Author |
Message |
AkulaBig
Joined: 03 Dec 2008 Posts: 610
|
(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: 1263
|
(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: 610
|
(Separately) Posted: Sun Sep 27, 2026 13:56 Post subject: |
|
|
Orion9
Надо будет посмотреть. У меня-же важный вопрос с зависанием подсказок из ExifTool так и не решен. Может этот алгоритм как-то поможет. |
|
| Back to top |
|
 |
Orion9

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