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: Снятие выделения по Esc 
Author Message
Flasher



PostPosted: Thu Jan 05, 2017 10:07    Post subject: Снятие выделения по Esc Reply with quote

    При использование быстрой фильтрации [ Настройка: Быстрый поиск > Буква (с диалогом поиска) ] стандартное назначение на Esc комадны cm_ClearAll не даёт возможность вернуться к нефильтрованному списку, как это происходит по умолчанию. Задавался ранее этим вопросом здесь (п. 5) и здесь.
    Поскольку запрошенная реализация в Twinkey меня не устраивает, набросал скрипт:
Code:
;••••••••••••••••••••••••••••••• AHK ••••••••••••••••••••••••••••••••
; Снятие/восстановление выделения с объектов в активной панели по Esc
; Условие: TC 9.0+. Запускать желательно контентным плагином Autorun.
;••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••
#NoEnv
#NoTrayIcon
ListLines, Off
#KeyHistory, 0
SetBatchLines,-1
#SingleInstance, Off
DetectHiddenWindows, On

If DupComplete() || RegExMatch(StrGet(DllCall("GetCommandLine",Ptr)), "i)\s/(restart|r|force|f)\s")
  ExitApp

DupComplete()
{ WinGet, List, List, % A_ScriptFullPath " ahk_class AutoHotkey"
  Loop % List
    If WinExist("ahk_id" List%A_Index%) != A_ScriptHwnd && R := true
      WinClose
  Return R
}

WinWaitClose, ahk_class TTOTAL_CMD
ExitApp

#IfWinActive, ahk_class TTOTAL_CMD
$Esc::
ControlGetFocus, Class, A
If !InStr(Class, "TMyListBox") || WinExist("ahk_class #32768") || MainMenuFocus()
  SendInput, {Esc}
Else
{ N := SubStr(Class, 0) = 2 ? 1 : 0
  SendMessage, 1074, % 1006-N, 0,, A
  Sel := % ErrorLevel
  SendMessage, 1074, %  8 - N, 0,, A
  ControlGetPos, x, y, w, h,, ahk_id %ErrorLevel%
  PixelSearch,,, % x+w-5, % y, % x+w, % y+h/2, 0x333333,, Fast
  If ErrorLevel
    PostMessage, 0x433, 52 (Sel?4:9),,, A
  Else
    SendInPut, {Esc}
}

MainMenuFocus()
{ VarSetCapacity(MBI, size := 16 + A_PtrSize*4, 0)
  NumPut(size, MBI)
  DllCall("GetMenuBarInfo", Ptr, WinExist("A"), Int, 0xFFFFFFFD, Int, 0, Ptr, &MBI)
  Return *(&MBI + 16 + A_PtrSize*3) & 1
}
    При повтроном вызове скрипта AHK-процесс самозавершается, тем самым давая возможность использовать его как инверсную команду-опцию (Вкл/Выкл).
    При отсутствии экземляров TC процесс завершается.

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sat Jan 14, 2017 11:39; edited 8 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group