Krot66
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #NoEnv SendMode Input SetWorkingDir %A_ScriptDir% #SingleInstance, force Menu, Tray, Icon, shell32.dll, 21 SetTitleMatchMode, 2 SetTitleMatchMode, Slow ;~ SetKeyDelay 50, 50 goto start ; Настройки горячих клавиш программы должны быть: Ctrl+F12 - создание, CTRL+ALT+F12 - показать главное окно. ; В Настройках - Захват текста - После захвата должно стоять "Открыть на редактирование" ; Скрипт связывает клавишу с номером (существующей!) вкладки и набором тэгов. Комбинация RCtrl+RShift+клавиша создает заметку, RCtrl+RAlt+клавиша - открывает соответствующую вкладку и тэг. ; При запуске в каталоге скрипта создается одноименный cfg-файл, задающий эти соответствия. ; Синтаксис строк предельно прост: ; номер секции,тэг или набор тэгов,имя клавиши или ее код (виртуальный или скан),пояснение (необязательно). ; Например: ; 1,,1 - первая секция без тэга по 1 (строки такого вида добавляются автоматически) ; 1,Comp,vk43,c - тэг Comp в первой секции по клавише c ; 1,Soft Comp,vk53,s - два тэга там же по s ; 1,Books/читать,sc30,b - дочерний тэг "читать" в Books по b ; 1,Книги Books/читать,F6 - комбинация двух предыдущих возможностей по F6 (использование "," и ";" как разделителя не допускается - только пробел) ; Для применения изменений следует перезапустить скрипт! ;~ Кроме постоянных значений, для записи в тэг возможно использование следующих переменных: ;~ $time - при создании заметки выводится окно ввода даты и времени с календарем, которые подставляются в тэг (8,Дела/$time,vkC0,~) ;~ $site - подставляет в тэг корневой адрес сайта, открытого в браузере ;~ $cmd - имя файла без расширения, извлеченное из командной строки открытой вместе с файлом программы. ;~ $title - название или имя файла без расширения, взятое из заголовка окна; ищет там и полный путь. ;~ $cmt - переменная, совмещающая возможности двух предыдущих: сначала ищется путь файла в командной строке, а если он отсутствует, используется заголовок окна. ;~ $file - файл под курсором в проводнике или файловом менеджере ;~ $proc - имя процесса активного окна без расширения ; В файле конфигурации допускаются пустые строки, лишние пробелы - только в пояснениях. Временно ненужное можно закоментировать ";". ; --------- Горячие клавиши ---------- ; В открытом окне заметки: ; RCtrl+клавиша - замена секции и тэга данными, связанными с клавишей ; RShift+клавиша - дополнение текущего тэга связанным с клавишей (производится проверка, связан ли он с текущей секцией) ; По L/RCtrl+Space и L/RShift+Space - добавляются настраиваемые тэги, суффиксы или дочерние тэги (см. ниже) >^>+F12::Run % "Notepad.exe " cfg ; RCtrl+RShift+F12 - окрытие конфигурационного файла >^>+Space::goto Last_add ; RCtrl+RShift+Space - создание заметки в той же секции и с теми же тэгами, что и в последний раз >^>!Space::goto Last_open ; RCtrl+RAlt+Space - открытие последних созданных заметок ; -------- Мышь (в главном окне программы) -------- #IfWinActive ahk_class CintaNotes.MainFrame MButton::F7 ; Cредняя кнопка - открытие ссылки выделенной заметки #IfWinActive start: ;------------ Настройки скрипта ------------- ctrl_tag:="_ToDo" ; Суффикс, прописывающийся при секундном зажатии правого Ctrl в тэг при создании заметки. Если вписать " ToDo", будет добавляться дополнительный тэг, если "/ToDo" - дочерний lctrl_space:="_rem" ; Суффикс, дополнительный или дочерний тэг дописывающийся к текущему тэгу по LCtrl+Space в окне редактирования rctrl_space:="_ToDo" ; То же для RCtrl+Space lshift_space:=" !Смотреть" ; То же для LShift+Space rshift_space:="_Old" ; То же для RShift+Space t_tree:="yyyy_MM/dd_dddd" ; Комбинация, подставляющаяся в тэг вместо даты при использовании $time. Определяет вид дерева дат в боковой панели dir_path:=0 ; При использовании $cmd, $title, $cmt и $file создавать ссылку на каталог вместо ссылки на файл max_empty_str:=2 ; Максимальное число последовательных пустых строк в скопированном в заметку тексте. 0 - без ограничения endnote:="Больше информации на http,Читайте далее: http,Читать далее: http,Подробности: http" ; Начала обрезаемых хвостов, добавляемых при копировании текста скриптами на веб-страницах clip:=2 ; Сохранять в буфере обмена после создания заметки: 1 - текст заметки, 2 - первую непустую строку в виде, пригодном для переименования файлов; 0 - прежнее содержимое link2rem:=1 ; Копировать адреса и пути из раздела ссылки в примечания ;---------------------------------- SplitPath A_ScriptName, , , , cfg cfg:=cfg ".cfg" IfNotExist % cfg FileAppend , % "1,,1`r`n2,,2`r`n3,,3`r`n4,,4`r`n5,,5`r`n6,,6`r`n7,,7`r`n8,,8`r`n9,,9`r`n0,,0", % cfg, utf-8 Loop Read, % cfg { If A_LoopReadLine contains `; continue If A_LoopReadLine=`r`n continue Loop Parse, A_LoopReadLine, CSV { If (A_Index=1) tab:=A_LoopField If (A_Index=2) tag:=A_LoopField If (A_Index=3) key:=A_LoopField } tab_%key%:=tab tag_%key%:=tag Hotkey % ">^>+" key, Note Hotkey IfWinActive, ahk_class Cinta.ModelessDialog Hotkey % ">^" key, Note Hotkey % ">+" key, Note Hotkey IfWinActive Hotkey % ">^>!" key, Open } return #IfWinActive ahk_class Cinta.ModelessDialog <^Space::Addtag(lctrl_space) >^Space::Addtag(rctrl_space) <+Space::Addtag(lshift_space) >+Space::Addtag(rshift_space) #IfWinActive Addtag(tt) { KeyWait Ctrl, T1 KeyWait Shift, T1 ControlGetText tag, Cinta.Edit2 s:=SubStr(tag,0) If (s=" ") StringTrimRight tag, tag, 1 ControlSetText Cinta.Edit2, % tag . tt " " Send {End} return } Note: KeyWait RShift, T1 KeyWait RCtrl, T0.6 e:=ErrorLevel clip_old:=Clipboard old_tag:="" site_add:="" site_text:="" gosub GetTag Last_add: If tag contains $time { Gui Destroy Gui, +AlwaysOnTop Gui Margin , 5, 5 Gui font, s12 Gui Add, Text, , используя курсорные клавиши и календарь (Alt+Down) Gui Add, DateTime ,wp+0 vDateTime, yyyy MMMM dd, dddd HH:mm Gui Add, Button, y5 r2 w60 Default, OK Gui Show, Center, Введите дату и время return } If A_Thishotkey contains >^>+ { KeyWait RCtrl Send ^{F12} If (cl="Cinta.ModelessDialog") WinWaitNotActive % t, , 10 WinWaitActive ahk_class Cinta.ModelessDialog, , 10 Sleep 200 } If A_Thishotkey contains >^ { Control Choose, % tab, Cinta.Combobox1, ahk_class Cinta.ModelessDialog end:="" If e end:=ctrl_tag ControlSetText Cinta.Edit2, % tag . end " " If A_Thishotkey not contains + return } else { SendMessage, 0x147, 0, 0, Cinta.Combobox1 stab:=ErrorLevel+1 If (stab<>tab) { MsgBox, 262160, Ошибка, Тэг относится к другой секции!, 1.5 return } ControlGetText old_tag, Cinta.Edit2 s:=SubStr(old_tag,0) If (s=" ") StringTrimRight old_tag, old_tag, 1 ControlSetText Cinta.Edit2, % old_tag " " tag " " Send {End} return } If tt contains $file { ControlSetText Cinta.Edit1, % "File: " f_path ControlSetText Cinta.RichEdit1 } If tt contains $site { ControlSetText Cinta.Edit3, % site_add ControlSetText Cinta.RichEdit1, % site_text } ControlGetText add, Cinta.Edit3, ahk_class Cinta.ModelessDialog If add && link2rem ControlSetText Cinta.RichEdit2, % add If ! add && f_path { If link2rem ControlSetText Cinta.RichEdit2, % f_path If dir_path SplitPath f_path, , f_path ControlSetText Cinta.Edit3, % f_path } ControlGetText n_txt, Cinta.RichEdit1 If endnote n_txt:=DelTrail(n_txt,endnote) If max_empty_str n_txt:=MaxEmptyString(n_txt,max_empty_str) ControlSetText Cinta.RichEdit1, % n_txt If (clip>0) && (n_txt<>"") { If (clip=2) { Loop parse, n_txt, `n, `r { If (A_LoopField="") continue n_txt:=A_LoopField break } n_txt:=ValidName(n_txt) n_txt:=FirstUppercase(n_txt) } Clipboard:=n_txt } else Clipboard:=clip_old Last_tag: Loop { SendMessage, 0x147, 0, 0, Cinta.Combobox1, ahk_class Cinta.ModelessDialog tab:=ErrorLevel+1 ControlGetText tag, Cinta.Edit2 sl:=SubStr(tag,0) If (sl=" ") StringTrimRight tag, tag, 1 Sleep 100 IfWinNotActive ahk_class Cinta.ModelessDialog break } return ButtonOK: Gui, Submit FormatTime DateTime, % DateTime, % t_tree . "/HH:mm" StringReplace tag, tag, $time, % DateTime WinActivate % t goto Last_add GuiClose: GuiEscape: Gui Cancel return ~^F12:: WinWaitActive ahk_class Cinta.ModelessDialog, , 3 goto Last_tag Open: KeyWait Alt, T1 KeyWait RCtrl, T0.6 e:=ErrorLevel If tag contains $time { FormatTime DateTime, , % t_tree StringReplace tag, tag, $time, % DateTime } gosub GetTag Last_open: KeyWait RCtrl, T2 IfWinNotActive ahk_class CintaNotes.MainFrame { Send ^!{F12} WinWait ahk_class CintaNotes.MainFrame, , 2 If ErrorLevel return } Send ^{%tab%} Sleep 600 If tag { end:="" If e end:=ctrl_tag ControlSetText Cinta.Edit1, % tag . end ControlSend Cinta.Edit1, {Enter} Sleep 200 Send {Home} } KeyWait RAlt, T1 If Errorlevel Send {Alt Up} return ;---------------------- GetTag: StringGetPos kf, A_ThisHotkey, ^ StringTrimLeft key, A_ThisHotkey, kf+1 StringGetPos kf, key, + StringTrimLeft key, key, kf+1 StringGetPos kf, key, ! StringTrimLeft key, key, kf+1 tab:=tab_%key% tag:=tag_%key% f_path:="" tt:=tag WinGetActiveTitle t WinGetClass cl, A If tag contains $cmd,$cmt { f_path:=GetPath(t) If ! f_path { If tag contains $cmt goto Title else { MsgBox, 262160, Ошибка, Путь файла недоступен!, 1.5 Exit } } SplitPath f_path, , , , ntag ntag:=ValidName(ntag) StringReplace ntag, ntag, % " ", _, All StringReplace ntag, ntag, `,, _, All StringReplace tag, tag, $cmd, % ntag StringReplace tag, tag, $cmt, % ntag } Title: If tag contains $title,$cmt { RegExMatch(t,"[A-Z]:\\.+\.[a-zA-Z0-9]{2,4}",f_path) ttag:=f_path If ! ttag RegExMatch(t,"(?<=\[).+\.[a-zA-Z0-9]{2,4}(?=])",ttag) If ! ttag RegExMatch(t,".+\.[a-zA-Z0-9]{2,4}(?= - )",ttag) If ! ttag RegExMatch(t,"(?<= - ).+\.[a-zA-Z0-9]{2,4}(?=$)",ttag) SplitPath ttag, , , ,ttag If ! ttag RegExMatch(t,".+(?= - )",ttag) If ! ttag ttag:=t StringReplace ttag, ttag, % " ", _, All StringReplace ttag, ttag, `,, _, All StringReplace tag, tag, $title, % ttag StringReplace tag, tag, $cmt, % ttag } If tag contains $file { Clipboard:="" Send, ^{vk43} ClipWait 2 f_path:=Clipboard If f_path not contains :\ { MsgBox, 262160, Ошибка, Путь недоступен!, 1.5 Exit } SplitPath f_path, ftag StringReplace ftag, ftag, % " ", _, All StringReplace ftag, ftag, `,, _, All StringReplace tag, tag, $file, % ftag } If tag contains $proc { WinGetActiveTitle t WinGet prtag, ProcessName, % t SplitPath prtag, , , , prtag prtag:=FirstUppercase(prtag) StringReplace tag, tag, % " ", _, All StringReplace tag, tag, $proc, % prtag } If tag contains $site { If A_Thishotkey contains >^ { Clipboard:="" Send ^{Ins} ClipWait 2 site_text:=Clipboard Sleep 300 } Clipboard:="" Send ^{vk4C} Sleep 300 Send ^{Ins} ClipWait 2 site_add:=Clipboard RegExMatch(Clipboard,"(?<=//).+?(?=/)",stag) If ! stag { MsgBox, 262160, Ошибка, Адрес недоступен!, 1.5 Exit } StringReplace tag, tag, $site, % stag } return ;------------------------- DelTrail(text,end) { global Loop Parse, end, CSV { If text contains % A_LoopField { StringGetPos p, text, % A_LoopField StringLeft text, text, p break } } return text } FirstUppercase(t) { StringLeft n, t, 1 StringTrimLeft k, t, 1 StringUpper n, n return n . k } GetPath(title) { WinGet pr, ProcessName, % title Process, Exist, % pr pid := ErrorLevel for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") If (process.ProcessId = pid) cmdline := process.CommandLine If cmdline contains Explorer.exe cmdline:="" fp:=RegExMatch(cmdline,"[A-Z]:\\.*\.[a-zA-Z0-9]{2,5}",f_path,6) return f_path } MaxEmptyString(text,max) { t:="" n:=max Loop Parse, text, `n, `r { If A_LoopField { t:=t . A_LoopField "`r`n" n:=0 continue } else { n:=n+1 If (n<=max) t:=t "`r`n" } } return t } ValidName(n) { StringReplace n, n, `r`n,% " ", All StringReplace n, n, `n,% " ", All StringReplace n, n, \,% " ", All StringReplace n, n, /,% " ", All StringReplace n, n, :, ,All StringReplace n, n, *, ,All StringReplace n, n, ?, ,All StringReplace n, n, ", ,All StringReplace n, n, >,% " ", All StringReplace n, n, <,% " ", All StringReplace n, n, |, -, All StringReplace n, n,% " ", % " ", All return Trim(n) } |