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 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Tue Oct 28, 2025 13:51    Post subject: Reply with quote

Loopback wrote:
Ну да, с Ctrl вряд ли удастся случайно что-то утянуть Smile

Ну а Гислеру что мешает сделать то же самое?

Кто не в курсе о чем речь, напоминаю ответ маэстро в этой теме.

Ну да, я торопился и забыл написать про CTRL, но что это меняет? Можно и на Shift заменить, результат будет тем же:
Code:
Switch uMsg
   Case WM_LBUTTONDOWN
      If BitAND(wParam, 0x0004) Then

Т.ч. мой вопрос остаётся в силе: ну и где здесь "случайное" перетаскивание кнопок? Что-то я его не наблюдаю.

Более того, можно было и без модификаторов обойтись, но у Гислера своя оконная процедура висит и мешает. В частности это приводит к тому, что при претаскивании кнопки на саму себя происходит ее запуск. Побороть может и получится, но будет сложно, поскольку простой выход из процедуры без вызова оригинальной приводит к другим проблемам.
Code:
Case WM_LBUTTONDOWN
  If BitAND(wParam, 0x0004) Then
     MouseGetPos("x","y")
     IsDrag = 0
     If DllCall("DragDetect", "hwnd", hWnd, "int64", MakeInt(y, x, 2)) Then
        IsDrag = 1
        WinSetStyle(0x80000, 3, hWnd)
        DllCall("SetLayeredWindowAttributes", "hwnd", hWnd, "ptr", 0, "byte", 128, "dword", 2)
        Return 1       
     EndIf
  EndIf   
Case WM_LBUTTONUP
  If IsDrag = 1 Then
     WinSetStyle(0x80000, 5, hWnd)
     IsDrag = 0
     Return 1
  EndIf

Кстати, вы заметили, что я использовал MakeInt? Руки так и чесались Laughing

В общем, хотел я по быстрому сделать модуль, ведь основная функция была уже готова, оставалось только ее разбить на блоки и внести небольшие изменения, но поскольку времени было совсем мало, процесс затянулся.

Однако удалось добиться состояния промежуточной готовности:
 Bars.aucfg

Сейчас подсказка вызывается по Ctrl, Shift и CapsLock. Ctrl добавляет карту панели и имеет возможность перетаскивания кнопок. Пока при перетаскивании показываются только индексы опрации. Пересобрать панель будет делом техники, но сначала нужно добавить дополнительные проверки и провести больше тестов. Например усовершенствовать блок с масштабированием экрана и оптимизировать количество вызовов. Также нужно что-то придумать, как обрабатывать временно загруженную панель, файл которой не находится в корне ТС или подкаталоге \Bars. Сейчас такая панель работать не будет.

Loopback wrote:
Думаю, можно и полностью исправить, но тогда придется отказаться от создания диалога с помощью DialogBox и полностью создать свое окно с нуля.

А откуда уверенность, что это поможет?
Loopback wrote:
Что-то может быть, конечно, но проблема с потоком маловероятно что связана с ним.

Согласен. Я больше имел в виду дурацкие приколы с загрузкой графического объекта.
Loopback wrote:
Из плагинов статистики нет, слишком много затрат для реализации.

То, что некоторые вещи реализовать сложно, это понятно. Но какие сложности с SetHotkeyAction? Разве во время парсинга вы не можете собрать статистику, что привязано к этому вызову? У меня много модулей, и в каждом что-то висит на SetHotkeyAction. Со временем забываешь, что именно. Можно конечно простым поиском по всем файлам найти, но ведь лень же да и не удобно это. Куда лучше было бы вызвать GetState("SetHotkeyAction") и всё увидеть.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group