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 

AHK: Активация файловой панели при наведении мыши
Goto page Previous  1, 2
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Jun 15, 2014 20:13    Post subject: Reply with quote

LonerD wrote:
Так они и есть в начале кода.
Так а ты наличие контролов не отслеживаешь.

LonerD wrote:
Можно. Вот и вот.
Хм. Забирай.
И это касается здешнего скрипта тоже, работу в режиме быстрого просмотра никто не отменял.

LonerD wrote:
через мышиный хук
Вариант пошустрее первого.
LonerD wrote:
невозможно выставить задержку
Почему?
LonerD wrote:
активация окна Акелпада действует на скрипт тлетворно
У меня всё в порядке.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1172
Location: Макеевка

Post (Separately) Posted: Sun Jun 15, 2014 21:47    Post subject: Reply with quote

Flasher wrote:
Так а ты наличие контролов не отслеживаешь.

Наличие контролов отслеживать бесполезно, они всегда Enabled. Проверять нужно тот факт, что контрол видимый (контрол TInEdit1/Edit1 становится видимым, когда инициируется процесс переименования файла - можно отследить скриптовой программой Control Viewer).
GetKeyState, LBState, LButton, P ; проверяю, что зажата левая кнопка мыши.
ControlGet, Editmode32, Visible,, TInEdit1, A ; проверяю, что видимый контрол переименования файла в 32-х битном Тотале
ControlGet, Editmode64, Visible,, Edit1, A ; то же самое в 64-х битном
if ( LBState != D ) and ( Editmode32 = 0 ) and ( Editmode64 = 0 ) ; Если левая кнопка мыши не зажата И если не видимы контролы переименования - тогда выполняется остальной скрипт.

Flasher wrote:
LonerD wrote:
Можно. Вот и вот.
Хм. Забирай.
И это касается здешнего скрипта тоже, работу в режиме быстрого просмотра никто не отменял.

Хм... Буду думать дальше.

Flasher wrote:
LonerD wrote:
невозможно выставить задержку
Почему?

Потому, что не знаю как именно и где именно выставлять. Во втором варианте скрипта движение мыши отслеживается постоянно. Если в функцию LowLevelMouseProc вставить паузу Sleep - мыша начинает вести себя непредсказуемо; при маленькой паузе движения похожи на слоу-мо, при высокой паузе - почему-то первый рывок сложный, а дальше работает как будто паузы и нет...
_________________
Windows 11 | TC DreamLair eternal pre-α
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Jun 15, 2014 22:46    Post subject: Reply with quote

LonerD wrote:
Проверять нужно тот факт, что контрол видимый
Согласен. Помню, что с ControlGet связано.
LonerD wrote:
Если левая кнопка мыши не зажата И если не видимы контролы переименования - тогда выполняется остальной скрипт.
Да, я на новый код уже смотрел.
LonerD wrote:
а дальше работает как будто паузы и нет
Мм. Там что-то на лупах завязано. Надо помозговать.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1172
Location: Макеевка

Post (Separately) Posted: Sun Jun 15, 2014 22:54    Post subject: Reply with quote

;================================================================
Ап. И ещё один вариант - микс из таймера (значение можно регулировать) и хука движения мыши. У меня вроде не "залипает" после активации других окон. Пока не работает проверка на зажатую левую кнопку (при копировании/перемещении). С панелями быстрого просмотра ещё тоже не разбирался, наверняка долгая история с ними будет.

Code:

;================================================================
 ; Сделать файловую панель активной при наведении на неё курсора мыши
 ; Альтернативный вариант
 ; Версия скрипта: 1.05a
 ; Дата создания: 2014.06.15
 ; Автор скрипта: LonerD
 ; Фрагменты кода: OnMyDSeeAtAll, serzh82saratov
 ; Сайт: http://dreamlair.net
 ;================================================================

#NoEnv
#NoTrayIcon
#Persistent
#KeyHistory, 0
#SingleInstance, force
ListLines, Off

hHookMouse := DllCall("SetWindowsHookEx" . (A_IsUnicode ? "W" : "A")
   , Int, WH_MOUSE_LL := 14
   , Int, RegisterCallback("LowLevelMouseProc", "Fast")
   , Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
   , UInt, 0, Ptr)
 Return

LowLevelMouseProc(nCode, wParam, lParam)
{
   Critical
   SetTimer, mTimer, -50
   Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, UInt, wParam, UInt, lParam)
}

mTimer:
If WinActive("ahk_class TTOTAL_CMD")
{
    KeyWait, LButton
    MouseGetPos,,,, mControl
    if ( mControl ~= "ListBox" )
    {
      WinGet, TCHWND, ID, A
      SeparateTree := 0
      Loop, 3
      {
        ControlGetText, TMyText%A_Index%, TMyListBox%A_Index%, % "ahk_id " TCHWND
        ControlGetText, LCLText%A_Index%, LCLListBox%A_Index%, % "ahk_id " TCHWND
        if ( TMyText%A_Index% = "W_TreeList2" || LCLText%A_Index% = "W_TreeList2" )
        {
          SeparateTree := 2
          break
        }
        else if ( TMyText%A_Index% = "W_TreeList1" || LCLText%A_Index% = "W_TreeList1" )
          SeparateTree := 1
      }

      Loop, 3
        TMyListBox%A_Index% := "ListBox" (SeparateTree + A_Index)

      if ( mControl ~= TMyListBox1 )
        PostMessage, 1075, 4002,,, % "ahk_id " TCHWND
      else if ( mControl ~= TMyListBox3 )
        PostMessage, 1075, 4001,,, % "ahk_id " TCHWND
      else if ( mControl ~= TMyListBox2 )
      {
        WinGet, TCControls, ControlList, % "ahk_id " TCHWND
        TCFTPMode := 0
        Loop, Parse, TCControls, `n, `r
          {
            if ( A_LoopField ~= TMyListBox3 )
            {
              TCFTPMode := 1
              break
            }
          }
        PostMessage, 1075, 400 (TCFTPMode="1" ? 2:1),,, % "ahk_id " TCHWND
      }
  }
}
W_TreeList2
_________________
Windows 11 | TC DreamLair eternal pre-α


Last edited by LonerD on Mon Jun 16, 2014 04:30; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jun 16, 2014 00:02    Post subject: Reply with quote

LonerD wrote:
Пока не работает проверка на зажатую левую кнопку (при копировании/перемещении).
Quote:
If WinActive("ahk_class TTOTAL_CMD")
{
    KeyWait, LButton

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1172
Location: Макеевка

Post (Separately) Posted: Mon Jun 16, 2014 04:29    Post subject: Reply with quote

Flasher
Спасибо. Гениально и просто. Зациклился на While not GetKeyState("LButton") / GetKeyState , а до такого не додумался.
_________________
Windows 11 | TC DreamLair eternal pre-α
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
Page 2 of 2

 
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