Тема: AHK: Быстрое копирование многостраничных сетевых книг в текстовый файл
Предназначен для тех, кто занимается созданием электронных книг или хочет читать на ридере интересующий текст в удобочитаемом виде. Пригоден так же для ускоренного конспектирования, набивки цитат и других подобных занятий.
При сравнительно благоприятных условиях (хорошая скорость загрузки, наличие ссылок и умеренное количество мусора внизу страницы) темп 7-8 страниц в минуту является вполне реальным и не требующим особого напряжения.
Поддерживаются Opera и браузеры на движке WebKit (Chrome, Maxthon 3+, Comodo Dragon, Iron, etc.)
Как это работает:
Зажав Ctrl, щелкаем правой кнопкой мыши перед началом первой строки интересующего текста.
Страница прокручивается к концу, выделяя текст.
Перемещая мышь, корректируем выделение внизу страницы
Отпускаем Ctrl, если это первый фрагмент, вводим или подтверждаем сгенерированное название в появляющемся окне, переходим к следующей странице и т.д.. Если нажать левую кнопку мыши ДО отпускания Ctrl, выделение будет сброшено, а добавление отменено.
Возможно так же сохранение выделенных вручную фрагментов по Alt+ПКМ (это работает где угодно)
Использование качественной баннерорезки (например, AdBlock) может существенно упрощать процесс. Следует так же подбирать подходящий масштаб страницы.
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance force
SetTitleMatchMode Slow
CoordMode Mouse, Screen
;--------------------------------------------------
; Ctrl+правый клик перед первой строкой - автоматическое выделение (сохраняется после отпускания Ctrl)
; Alt+правый клик - сохранение выделенного вручную
; Ctrl+Alt+B - открытие текущего файла
; Ctrl+Alt+N - новая книга
;--------------------------------------------------
adr:=1 ; - вставлять адрес первой страницы в начало файла
sep:="====================" ; - разделитель фрагментов
num:=0 ; - нумерация разделителей
enc:=1 ; - кодировка файла (0 - ANSI; 1 - UTF-8)
sound:=0 ; - звуковой сигнал при сохранении (помимо тултипа)
;--------------------------------------------------
Menu Tray, Icon, shell32.dll, 40
Menu Tray, NoStandard
Menu Tray, Add, Новая книга, ^!vk4E
Menu Tray, Add, Просмотр файла, ^!vk42
Menu Tray, Add, Открыть папку, Folder
Menu Tray, Add
Menu Tray, Add, Выход, Exit
If (enc=1)
FileEncoding UTF-8
FileCreateDir Books
SysGet, M, MonitorWorkArea
n:=0
^!vk4E::
MsgBox 64, ,% "Новая книга!`nСкопировано " n " фрагментов", 2
n:=0
return
^!vk42::
IfExist % "Books\" t ".txt"
Run % "Books\" t ".txt"
else
MsgBox, 16, Ошибка, Ничего не сохранено!, 1
return
Exit:
ExitApp
Folder:
Run % "Books"
return
!RButton::
KeyWait Alt, U T6
goto Save
^RButton::
KeyWait RButton, U T2
If Errorlevel
return
MouseClick Left , , , , , D
MouseGetPos x, y
MouseMove 100 , 0, , R
MouseMove 0 , 50, , R
Send {End}
MouseMove MRight*0.5, y
KeyWait Ctrl, U T10
MouseClick Left , , , , , U
Save:
text:=CopyText(1)
If (text="")
{
MsgBox, 16, Ошибка, Ничего не скопировано!, 1
return
}
n:=n+1
If (n=1)
{
WinGetActiveTitle t
t:=DelAppName(t)
StringLeft t, t, 80
t:=ValidName(t)
mes:="Введите имя файла без расширения:"
Input:
InputBox t, ,% mes, , 600, 160, , , , ,% t
If Errorlevel
{
n=0
return
}
e:=FileExist("Books\" t ".txt")
If (e<>"")
{
mes:="Имя файла существует!"
goto Input
}
If (adr<>0)
add:=CopyAddress()
}
n2:=""
If (num=1)
n2:=n " "
s:="`n`n" n2 . sep "`n`n"
FileAppend % add . s . text, % "Books\" t ".txt"
If Errorlevel
MsgBox, 16, , Ошибка сохранения!, 1
else
{
Tooltip Сохранено
If (sound=1)
SoundBeep 400, 200
Sleep 500
ToolTip
}
e:=0
add:=""
return
CopyAddress()
{
Sleep 500
ClipBoard := ""
Send !{vk44}
Sleep 300
Send ^{Ins}
ClipWait 0.5
Send {Esc}
return Clipboard
}
CopyText(t=0.5)
{
ClipBoard := ""
Send ^{Ins}
ClipWait % t
return Trim(ClipBoard)
}
DelAppName(n)
{
StringCaseSense On
StringGetPos pos, n, %A_Space%-%A_Space%, r
If (pos>0)
StringLeft n, n, pos+2
StringCaseSense Off
return Trim(n)
}
ValidName(n)
{
StringReplace n, n, `r`n, %A_Space%, All
StringReplace n, n, `n, %A_Space%, All
StringReplace n, n, \, %A_Space%, All
StringReplace n, n, /, %A_Space%, All
StringReplace n, n, :, ,All
StringReplace n, n, *, ,All
StringReplace n, n, ?, ,All
StringReplace n, n, ", ,All
StringReplace n, n, >, %A_Space%, All
StringReplace n, n, <, %A_Space%, All
StringReplace n, n, |, -, All
StringReplace n, n, %A_Space%%A_Space%, %A_Space%, All
return Trim(n)
}