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: AHK: Активация файловой панели при наведении мыши 
Author Message
LonerD



PostPosted: Mon Jun 09, 2014 17:41    Post subject: AHK: Активация файловой панели при наведении мыши Reply with quote

На соседнем форуме была поднята тема, захотелось реализовать. Как выяснилось - всё несколько сложнее чем казалось вначале. Просто передавать фокус панели Тотала (и даже запрашивать фокус) просто так невозможно - Тотал блокирует работу мыши (хотя скажем в проводнике Windows никаких проблем не возникает).
Потому в скрипте реализован другой подход, основанный на отсылке Тоталу встроенных команд.
В скрипте учтены варианты работы с деревом в файловой панели/двумя деревьями, а также с возможностью запуска ftp-соединения в текущем сеансе работы пользователя (то есть учтены варианты с изменением имён классов контролов файловых панелей).

Code:
;================================================================
; Сделать файловую панель активной при наведении на неё курсора мыши
; Версия скрипта: 1.3
; Дата создания: 2014.06.15
; Автор скрипта: LonerD
; Идея и помощь: OnMyDSeeAtAll
; Сайт: http://dreamlair.net
;================================================================
; WM_USER+51 = 1075
; cm_FocusRight = 4002
; cm_FocusLeft = 4001
;================================================================

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

SetTimer, mTimer, 1000
mTimer:
If WinActive("ahk_class TTOTAL_CMD")
{
  GetKeyState, LBState, LButton, P
  ControlGet, Editmode32, Visible,, TInEdit1, A
  ControlGet, Editmode64, Visible,, Edit1, A
  if ( LBState != D ) and ( Editmode32 = 0 ) and ( Editmode64 = 0 )
  {
    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)
      }
      Sleep, 500
      MouseGetPos,,,, mControl2
      if ( mControl2 = mControl )
      {
        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
        }
      }
    }
  }
}
Exit, (mControl) And mControl:=""


Upd 1.15. Более корректная работа с активным окном Тотала (если открыто несколько окон), плюс небольшая правка синтаксиса.
Upd 1.2. Исправлено поведении при нажатой левой кнопке мыши (перемещение, копирование между панелями), а также подправлено поведение при кратковременном движении мыши над файловой панелью (например, для доступа к панели инструменов, меню и т.д...).
Upd 1.3. Переименование файлов теперь работает через тоталовскую команду.
_________________
Windows 11 | TC DreamLair eternal pre-α


Last edited by LonerD on Sun Jun 15, 2014 03:34; edited 7 times in total
View user's profile Send private message Visit poster's website ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group