#NoEnv SetWorkingDir %A_ScriptDir% #SingleInstance, force Menu, Tray, Icon, shell32.dll, 18 SetTitleMatchMode 2 SetTitleMatchMode Slow SetKeyDelay 50, 50 SetControlDelay 100 /* Скрипт-заменитель QSaver для любого браузера (подстановка выделенного текста в имя сохраняемого файла) Описание здесь: http://forum.ru-board.com/topic.cgi?forum=5&topic=50187&start=3020#12 Функция QSaver(ext,hotkey,entry,case,dir) Здесь: ext - расширение файла hotkeykey - посылаемое сочетание клавиш (по умолчанию, если пусто, "^{vk53}" - Ctrl+S) entry - номер строки сверху выпадающего меню выбора типа файла (по умолчанию - 1) case - имя файла с прописной буквы (по умолчанию - 1) dir - папка сохранения (по умолчанию не задана). В пути (абсолютном или относительном, привязанном к каталогу скрипта) могут быть использованы переменные $date - дата и $site - адрес сайта. По умолчанию, при наличии параметра dir сохранение производится автоматически. Чтобы сделать его ручным, добавьте занак минус перед путем Для использования с виртуальными принтерами в переменную hotkey должны быть вписаны начальные буквы в названии принтера (достаточные для его определения), видимые в диалоге печати */ ;========= Mozilla Firefox ============ #If WinActive("ahk_class MozillaWindowClass") ^vk53::QSaver("html",,2) ; - сохранение в html без картинок по Ctrl+S ^+vk53::QSaver("html","^+{vk59}") ; - сохранение в SingleFile по Ctrl+Shift+S (клавиша расширения Ctrl+Shift+Y) ^!vk53::QSaver("html","!{vkBE}") ; - сохранение в SingleFileZ по Ctrl+Alt+S (клавиша расширения Alt+.) ^#vk53::QSaver("^+{vk59}",6,1,"D:\HTML\$site\$date") ; - то же с сохранением в папку D:\HTML с сортировкой по сайтам и датам по сочетанию Ctrl+Win+S ^+vk50::QSaver("pdf","PDF-XChange") ; - печать в pdf на принтере PDF-XChange по сочетанию Ctrl+Shift+P ^!vk50::QSaver("tif","Bullzip",9) ; - печать в tif на принтере Bullzip по сочетанию Ctrl+Alt+P ^#vk50::QSaver("oxps","Microsoft XPS") ; - печать в oxps на принтере Microsoft XPS Printer по сочетанию Ctrl+Win+P ;========= Браузеры на основе Chrome ============ #If WinActive("ahk_class Chrome_WidgetWin_1") ^vk53::QSaver("html") ; - сохранение в html без картинок по Ctrl+S ^+vk53::QSaver("mht",,2) ; - сохранение в mht по Ctrl+Shift+S (mht должно быть включено в дополнительных настройках!) ;========= Internet Explorer ============ #If WinActive("ahk_class IEFrame") ^vk53::QSaver("html") ; - сохранение в html без картинок по Ctrl+S ^+vk53::QSaver("mht",,2) ; - сохранение в mht по Ctrl+Shift+S #If ;========================================= QSaver(ext,hotkey="^{vk53}",entry=1,case=1,dir="") { KeyWait Ctrl, T1 KeyWait Shift, T1 KeyWait Alt, T1 KeyWait LWin, T1 WinGetActiveTitle title tmp:=Clipboard, Clipboard:="" Send ^{vk43} ClipWait 0.5 If Clipboard name:=RegExReplace(Clipboard,"\R+.*https?://.*$") MouseMove % A_ScreenWidth//2, % A_ScreenHeight//2 If !WinActive("ahk_class IEFrame") Send !{LButton} FormatTime $date, , yyyy-MM-dd If dir~="^-" nosave:=1, dir:=SubStr(dir,2) If (dir~="\$site") { Clipboard:="" Send ^{vk4C} Sleep 300 Send ^{vk43} ClipWait 0.5 Send {Esc}{Right} addr:=Trim(Clipboard) If !(addr~="^https?://") { MsgBox, 16, , Адрес недоступен!, 1 return } RegExMatch(addr,"//(www\.)?\K[^/]+(?=/)",$site) } If !(hotkey~="}") { Send ^{vk50} WinWait ahk_class #32770, , 60 If ErrorLevel return hwnd:=WinExist("ahk_class #32770") SendInput % "{Raw}" hotkey Sleep 100 Send {Enter} WinWaitClose ahk_id %hwnd%,, 2 If ErrorLevel return } else Send % hotkey WinWait ahk_class #32770, , 100 If ErrorLevel return Sleep 100 If dir { dir:=StrReplace(dir,"$site",$site) dir:=StrReplace(dir,"$date",$date) If !(dir~="^\w:\\") dir:=A_ScriptDir "\" dir FileCreateDir % dir ControlSetText Edit1, % dir Send {Enter} Sleep 100 } If !name name:=RegExReplace(title," - [^-]+?$") name:=Trim(ValidName(RegExReplace(name," - https?://[^-]+"))) If case name:=FirstUppercase(name) Control ShowDropDown, ,ComboBox2 Control Choose, % entry, ComboBox2 Control HideDropDown, ,ComboBox2 ControlSetText Edit1, % name "." ext If dir && !nosave ControlSend Button1, {Enter} Clipboard:=tmp return } FirstUppercase(t) { StringLeft n, t, 1 StringTrimLeft k, t, 1 StringUpper n, n return n . k } ValidName(n,r="") ; r - замена пробелов, например, подчеркиваниями { n:=RegExReplace(n,"(\+|:|;|,|\*|\?|\\|/|<|>|"")"," ") n:=RegExReplace(n,"\s+"," ") StringReplace n, n, |, -, All If r StringReplace n, n, % " ", % r, All return Trim(n) } |