Окно активно пока зажата F1. Колесиком мыши можно листать верх,вниз. Если нажать его то откроется вкладка. Правая кнопка - это закрыть вкладку. Внутри окна левая кнопка мыши работает стандартно, а если нажать за пределами то это закроет окно и вызов папки будет отменен - это отмена.
; Список нужных папок.
List_paths := [ ["Мой компьютер" , "::{20d04fe0-3aea-1069-a2d8-08002b30309d}"]
, ["Программы" , A_ProgramFiles ]
, ["Рабочий стол" , A_Desktop ]
, ["Мои документы" , A_MyDocuments ] ]
; Загружаем 2 иконки из shell32.
ImageListID := IL_Create(2) , IL_Add(ImageListID, "shell32.dll", 4), IL_Add(ImageListID, "shell32.dll", 127)
; Клавиша запуска окна(держать)
F1::
; Настройки окна
ExitGui := 0
Gui, Add, TreeView, ImageList%ImageListID% gTVLabel -HScroll
Gui, +HWNDFastFoldersGui +ToolWindow
TreeViewO := {parrent:[]}
;Создаем список из папок и их подпапок.
for i,k in List_paths
{
TreeViewO.Insert("sub" i ,[])
TreeViewO.parrent.Insert( TV_Add(k.1) )
Loop, Files,% k.2 "/*.*",D
TreeViewO["sub" i ].Insert(TV_Add(A_LoopFileName,TreeViewO.parrent[i]))
if TreeViewO["sub" i ].MaxIndex()
TV_Modify(TreeViewO.parrent[i],"Icon2")
}
Gui show,AutoSize,FastFolder
; ждем отжатия кнопки.
KeyWait, % A_ThisHotkey
Gui,Destroy
ToolTip
if !ExitGui
Run % PathOpen
return
; на эту метку скрипт ссылается если в списке сменился элемент в фокусе.
; Тут назначается путь папки в переменную для запуска через run.
TVLabel:
TV_GetText(textItemSelectP, TV_GetParent( TV_GetSelection())), TV_GetText(textItemSelectS, TV_GetSelection())
IfEqual,textItemSelectP,,Try textItemSelectP := textItemSelectS,textItemSelectS := ""
for i,k in List_paths
if k.1 = textItemSelectP
PathOpen := k.2 (textItemSelectS ? "\" textItemSelectS : "")
ToolTip % "Открыть: " PathOpen
return
; Если это условие истина значит окно наше активно, по этому меняем некоторые клавиши для управления этим окном.
#if WinActive("ahk_id" FastFoldersGui)
Rbutton::send {left 2}
mbutton::right
WheelDown::down
WheelUp::up
~lbutton:: ; если кликнуть не на это окно то отмена, папка не будет вызвана.
MouseGetPos,,,id
if (id = FastFoldersGui)
return
ExitGui := 1
Gui,Destroy
ToolTip
return
#if