Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... 237, 238, 239
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Tue Sep 22, 2026 22:31    Post subject: Reply with quote

Orion9 wrote:
Вы бы гифку записали, а то не понятно о чем речь.

Я разобрался, но там все достаточно печально и кажется корректно не решаемо. Вот такой код я прописал где требуется обновление ПИ:
Code:
   # Обновляем текущую панель инструментов для смены иконки
   # Updating current toolbar to change the icon
   SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
   SendCommand cm_ReloadBarIcons
   # Sleep(auX64 ? 0 : 10)
   SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
   WinRedraw(1)

Но теперь надо и пользовательские команды ТС через Авторан переделывать. Так как любая команда cm_ReloadBarIcons вызывает дерганье на ТС32 Вин11.
Дак вот, почему я в унынии. Видите у меня закомментирована команда Слип? А без нее в ТС32 все равно есть небольшое подергивание. А с ней подергивания ПИ нет совсем, как в ТС64, но дергается иконка в трее Sad То-есть избавится полностью от подергивания не получится.
Поэтому вроде и ни к чему возиться с гифкой. Тем более увидеть подергивание очень просто. Выполните команду cm_ReloadBarIcons в обоих разрядностях через командную строку ТС.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1259

Post (Separately) Posted: Wed Sep 23, 2026 13:40    Post subject: Reply with quote

AkulaBig
Продолжил общаться с болваном. Можно еще через PostMessage сделать, о чем сразу не подумал

 Hidden text

Но из-за того, что lParam в сообщении указывает координаты клиентской области, реализация на Autorun немного громоздкая и, возможно, не везде будет уместна. Т.е. вместо
Code:
SendLCtrlViaDll()
Sleep(10)   
MouseClick()
Sleep(10)
SendLCtrlViaDll("up")

в моем случае будет
Code:
Local x, y
MouseGetPos("x","y")
Local hWnd = WinFromPoint(x,y)     
Static buf = Buffer(8)   # POINT
buf.Zero()
buf.SetNum(0, "long", x, "long", y)
DllCall("ScreenToClient", "hwnd", hWnd, "ptr", buf.ptr)
x = buf.GetNum(0)
y = buf.GetNum(4)
Local MousePos = MakeInt(x,y)
PostMessage(hWnd, 0x0201, 0x0008, MousePos)
PostMessage(hWnd, 0x0202, 0x0008, MousePos)

Но зато слип не нужен (у меня и так работает), да и сама возможность интересная, может кому пригодится.

Ну я понял теперь о чем вы говорите. Это старая проблема. Лечится она (по крайне мере у меня) через WinRedraw(2). Полная версия примерно такая. Не знаю поможет вам или нет, но других вариантов по сути нет. Иконка на панели задач будет исчезать и появляться.
Code:
SendMessage(AUTORUN_TCHANDLE, 11, 0, 0)
SendCommand(2901, 0, 1)   #cm_VisButtonBar
SendCommand(2901, 0, 1)   #cm_VisButtonBar
Sleep(10)
SendMessage(AUTORUN_TCHANDLE, 11, 1, 0)
WinRedraw(2)
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Wed Sep 23, 2026 19:30    Post subject: Reply with quote

Orion9 wrote:
Ну я понял теперь о чем вы говорите. Это старая проблема.

Это проблема ТС. Так что до конца нерешаемая. Сейчас более-менее приемлемый вариант. В коде на Авторан я везде так прописал. Но и в командах пользователя ТС, которые никак не связаны с Авторан, работает также с подергиванием. Получается их надо переписывать с использованием Авторан. Чет желания нет. Как и писать Гислеру.

Orion9 wrote:
в моем случае будет

Я уже запутался. Это замена ControlSetMouseAction /L /K:C /K:S 0 "CompareToolShowMenu"? К чему этот код?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1259

Post (Separately) Posted: Thu Sep 24, 2026 13:45    Post subject: Reply with quote

AkulaBig
Работает хук, проверил сейчас. Перехватывает клавишу CTRL глобально.

 Hidden text

Возможности открылись неплохие. В частности удалось обойти абсолютно дурацкий косяк ТСх64 с модификаторами при вызове подсказки на панели, когда нажатие CTRL скрывает подсказку или не дает ей появиться. Чтобы заставить ее работать, CTRL отключается через 10 повторов и меняет флаг подсказки gHintCaps на false, который отвечает за MediaInfo Inform. Это костыль, конечно, но работает.

Второй бонус - двойное нажатие CTRL. Сейчас просто вызывается окно About, но можно сделать что-то и поинтереснее (уже, кстати, есть идея).

AkulaBig wrote:
Я уже запутался. Это замена ControlSetMouseAction /L /K:C /K:S 0 "CompareToolShowMenu"? К чему этот код?

Вы хотели, чтобы назначенная через ControlSetMouseAction функция пропускала свою комбинацию. PostMessage позволяет это сделать. Но я вчера толком не проверил, по факту там не нужны модификаторы - и без них работает.

 Hidden text

Т.е. wParam может быть 0.

В функцию CompareToolShowMenu можно добавить переключатель для выполнения кода (показа меню) или пропуска комбинации вызовом PostMouseClick().
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Thu Sep 24, 2026 14:38    Post subject: Reply with quote

Orion9 wrote:
пропуска комбинации вызовом PostMouseClick()

Добавил код из PostMouseClick. Поставил wParam=12. Кнопка вкл/выкл хоткея перестала переключаться. То-есть нажимаю, чтобы отключить хоткей, а кнопка возвращается в предыдущее состояние. То-есть хоткей остается включенным. И отключение вызова меню не работает.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1259

Post (Separately) Posted: Fri Sep 25, 2026 13:16    Post subject: Reply with quote

И еще один хук на Autorun, в этот раз WH_MSGFILTER. Вы спросите на кой? Не знаю. Но пока я их все не сделаю, не успокоюсь Mr. Green

 Hidden text


AkulaBig wrote:
Добавил код из PostMouseClick. Поставил wParam=12.

Зачем? Я же написал выше, что работает без модификаторов, поэтому и оставил 0 для wParam. И там, кстати, евклидова математика в действии: 12 не равно 0x12 Laughing

Все работает. Один раз кликаю - появляется вертикальное меню, второй раз кликаю - выделяется группа файлов на панели (если клик, конечно, был по панели). Все как положено.
Code:
ControlSetMouseAction /L /K:C /K:S 0 "CompareToolShowMenu"

Func CompareToolShowMenu()
    static mode = 1, bar = COMMANDER_PATH & "\Vertical.bar"
    mode = mode = 1 ? 2 : 1
    If mode = 2 Then
       ShowPopupMenu /D %bar%
    Else   
       PostMouseClick()
    EndIf   
EndFunc
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Fri Sep 25, 2026 14:44    Post subject: Reply with quote

Orion9 wrote:
Вы спросите на кой?

Вы на меня не обращайте внимания. фонтанируйте, фонтанируйте. Щас не надо, а через 3 месяца будет надо.
Orion9 wrote:
оставил 0 для wParam

Да с этим значением я сразу попробовал. А потом попробовал поэкспериментировать.
Orion9 wrote:
Все работает.

Сейчас стало структурированно, может и у меня заработает.
Еще Флешера на оф. форуме загрузил этим. Может что получится общими усилиями.

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

Не. Код PostMouseClick() просто не дает переключить кнопку на отключение меню. То-есть есть кнопка на ПИ ТС. Когда у ней состояние 1, меню показывается. При 0 меню не должно показываться. Ваш код не дает кнопке переключиться. Нажимаю на 1, мелькает 0 и снова показывает 1. На оф. форуме я код выложил. Можете там посмотреть, если мою сборку качать не охота.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1259

Post (Separately) Posted: Sat Sep 26, 2026 10:01    Post subject: Reply with quote

AkulaBig wrote:
фонтанируйте, фонтанируйте

Laughing

Дв я не против, в целом. Но сначала пусть Гислер флягу баварского отгрузит для поддержания фонтана идей. Хотя чтобы сдалать ТС снова великим одной фляжкой ему не обойтись.

AkulaBig wrote:
Ваш код не дает кнопке переключиться

А причем здесь кнопка? Это ведь другой вопрос. Главное чтобы фуцнкия работала, а кнопку можно сдалать по разному. Нвпример
Code:
gCompareToolMenu = 0

ControlSetMouseAction /L /K:C /K:S 0 "CompareToolShowMenu"

Func CompareToolShowMenu()
    Static bar = COMMANDER_PATH & "\Vertical.bar"
    If gCompareToolMenu Then
       ShowPopupMenu /D %bar%
    Else   
       PostMouseClick()
    EndIf   
EndFunc

RegisterCommand 60065 "CompareToolMenu"

Func CompareToolMenu()
    gCompareToolMenu = not gCompareToolMenu
EndFunc

Code:
TOTALCMD#BAR#DATA
60065

%COMMANDER_EXE%
CompareToolMenu

1
-1
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Sat Sep 26, 2026 10:22    Post subject: Reply with quote

Orion9 wrote:
Нвпример

По такому алгоритму у меня и сделано. PostMouseClick() не дает переключить кнопку. То-есть я щелкаю по кнопке, она на мгновенье переключается по PostMessage(hWnd, WM_LBUTTONDOWN, wParam, lParam), а по PostMessage(hWnd, WM_LBUTTONUP, wParam, lParam) возвращается назад. Я в своих плагинах обычно только на отжатие действие вешаю. На нажатие и отжатие очень редко. Оставил у вас только отжатие, кнопка переключается, но меню не отключается.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1259

Post (Separately) Posted: Sat Sep 26, 2026 13:14    Post subject: Reply with quote

И еще один хук на Autorun, в этот раз WH_KEYBOARD, тот, что выше WH_KEYBOARD_LL и работает с очередью потока. Я же говорю, пока все их не сделаю, не успокоюсь Laughing

Ладно, шучу. Это был последний хук. Или может быть предпоследний.

 Hidden text

Здесь хук привязывается к главному потоку ТС, поэтому нет необходимости проверять авктивно ли окно приложения, события вне этого потока все-равно не будут обрабатываться.

В остальном логика поторяется, но есть замечание по 64-битной версии. Сдвиг битов в этой версии не работает. То ли это проблема самого Autorun, то ли я чего-то не понял, но в общем не стал я с этим разбирать и сделал проверку последнего бита по числу. Но в ТСх32 эти строки все же работают
Code:
bUp = BitAND(BitShift(lParam,16), 0x8000) = 0x8000 ? 1 : 0   
bRpt = BitAND(BitShift(lParam,16), 0x4000) = 0x4000 ? 1 : 0

Самое главное отличие в процедуре обработчика - двойной CTRL вызывает не окно About, а полное имя файла под курсором. Это можно использовать по полной программе, когда нужно получить дополнительную или расширенную информацию о файле, помимо стандартной подсказки ТС. Курсор висит над файлом, отображается обычная подсказка, двойное нажатие Ctrl в этот момент отобразит другую подсказку, или все что угодно.

AkulaBig wrote:
Оставил у вас только отжатие, кнопка переключается, но меню не отключается.

Я не знаю, что у вас не работает. У меня код выше работает как и ожидается, т.е. при старте ТС файлы при клике по панели с зажатым Ctrl+Shift выделяются. После нажатия на кнопку для переключения меню, отображается меню из вертикальной панели. Повторные нажатия пследовательно переключают этот функционал.

У вас моя кнопка работает?
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Sat Sep 26, 2026 13:38    Post subject: Reply with quote

Orion9 wrote:
У вас моя кнопка работает?

Проверил вашу кнопку в полном наборе. Вроде работает. Буду разбираться.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Sat Sep 26, 2026 17:12    Post subject: Reply with quote

Orion9
Проблема понятна. PostMouseClick() не дает переключить кнопку. Все-же прошу вас посмотреть, почему при ЛКМ безо всяких модификаторов PostMouseClick() срабатывает?
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1259

Post (Separately) Posted: Sat Sep 26, 2026 20:43    Post subject: Reply with quote

В общем, вот так оно должно где-то выглядеть, а точнее как в лучших домах России и Швейцарии.

 Hidden text


Но это только прототип, который нужно дорабатыват. Пока двойной Ctrl не всегда срабатывает и удержание иногда проскальзывает, но уже прикольненько.

Ниже полный код хука и подсказки, но для работы подсказки нужны дополнительные функции из модуля MediaInfo.aucfg.

 Hidden text


AkulaBig wrote:
Все-же прошу вас посмотреть

Что и где посмотреть то? Laughing Вы же видите - все работает. Значит у вас код усложнен, раз где-то перестает работать.
AkulaBig wrote:
почему при ЛКМ безо всяких модификаторов PostMouseClick() срабатывает?

Не знаю, но оно туда вообще не должно заходить, только с модификаторами, указанными в ControlSetMouseAction (и то если переменная gCompareToolMenu = false).
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 607

Post (Separately) Posted: Sat Sep 26, 2026 22:25    Post subject: Reply with quote

Orion9 wrote:
Значит у вас код усложнен

Ну понятно, что у меня код не такой простейший и никакой gCompareToolMenu и быть не может. Надо-же где-то хранить ее состояние. Но все равно алгоритм тот-же, просто с большей информативности.
Orion9 wrote:
Не знаю, но оно туда вообще не должно заходить

Не должно, но почему-то перехватывает ЛКМ по кнопке.
Вот это гифку я сейчас записал!

Обратите внимание - я смог переключить состояние! Если в какую-то определенную область нажать, состояние меняется! Похоже какие-то проблемы с определением координат.
Но дальше - хуже. Состояние кнопки переключилось, но меню все равно показывается! И вот теперь у меня возникает подозрение, что bar-меню отключается, а динамическое меню, которое использую я, не отключается. Сейчас буду проверять.

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

Использование bar-меню ничего не изменило Sad
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 237, 238, 239
Page 239 of 239

 
Jump to:  
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