Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Sumatra PDF | SumatraPDF

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Krot66



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
#NoEnv
#SingleInstance, force
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
Menu, Tray, Icon, shell32.dll, 14
;~ SetKeyDelay 50, 50
goto start
 
/*
Возможности:
 
У левого края экрана:
    Левый клик (или Alt+Up) - боковая панель закладок
    Правый (или Alt+Down) - боковая панель избранного
    Средний - добавить текущую позицию в избранное. В имя автоматически подставляется выделенный обычным или "оконным" способом текст (встроенная функция подстановки глючит очень часто)
 
У верхнего края экрана:
    Правый клик - свойства файла
    Средний (или Ctrl+O) - увеличенное окно открытия файла с подсветкой текущего, автоматическим выбором детального просмотра и перемещением на один уровень вверх по нажатие средней кнопки мыши
    Sift+правый клик - показывает и прячет панель инструментов. Скрипт выводит плавающее окошко в левом нижнем углу окна программы с указанием текущей страницы и их общего числа (в полноэкранном режиме показывается и время), так что панель как правило можно скрыть - она лишь зря занимает место и угнетает взгляд.
 
У правого края экрана:
    Правый клик (или Alt+Space) - плавающая панель на несколько секунд отображает размер и имя текущего файла
    Средний клик (или Ctrl+Enter) - полноэкранный режим
    Shift+средний клик - презентация
    Колесико - поэкранная прокрутка
 
На плавающем окне страниц:
    Левый клик  - назавние и размер файла
    Правый - окно выбора страницы
 
Браузерное:
    Переключение вкладок колесиком с зажатой правой кнопкой мыши
    Щелчок левой кнопкой мыши с зажатой правой  - переход назад
    Шелчок правой кнопкой мыши с зажатой левой - переход вперед
 
Shift+Tab - дублирование текущей вкладки (удобно для чтения примечаний в pdf и djvu)
Shift+F2 - переименование документа из выделенного текста
Alt+F3 - просмотр документа в первом из настроенных альтернативных вьюверов
Alt+F4 - просмотр документа во втором из настроенных альтернативных вьюверов
Alt+C - копирование открытого файла в буфер
Ctrl+Shift+S - сохранение копии документа в заданной папке (можно назначить множество папок соответствующим клавишам - ниже приведен пример этого)
Alt+PgUp, Alt+PgDn - перемещение по поддерживаемым файлам в папке с сортировкой по расширениям
Ctrl+Alt+PgUp, Ctrl+Alt+PgDn - то же, но файлы будут открываться в отдельных вкладках, без их закрытия
Alt+Home, Alt+End - открытие первого и последнего файла папки
Ctrl+Del - закрытие вкладки и удаление файла в корзину. При секундном зажатии Ctrl - переход к следующему файлу
 
ВАЖНО:
 
Скрипт предполагает использование только стандартного интерфейса (FixedPageUI), но не двустраничного книжного (EbookUI). Поэтому при использовании SumatraPDF с форматами, отличными от pdf, djvu и xps, в файле дополнительных настроек (Настройки - Расширенные настройки) должно стоять UseFixedPageUI=true в разделе EbookUI. Необходимо также выставить отображение в заголовке полного пути: FullPathInTitle = true. В настройках программы (Настройки - Параметры), как и по умолчанию, должно быть включено использование вкладок .
*/
^+vk53::SaveCopy("D:\Lib\_Read") ; Пример сохранения копии документа по Ctrl+Shift+S (путь абсолютный или относительный).
 
start:
 
font:=14 ; размер шрифта панели страниц (0 - не показывать вообще)
file_show:=3000 ; время показа имени файла в панели страниц (0 - не показывать вообще)
color:="4E8D8F" ; ее цвет
conf:=1 ; подтверждать удаление файлов
 
SysGet, M, MonitorWorkArea
Loop
{
    WinGetTitle st, ahk_class SUMATRA_PDF_FRAME
    RegExMatch(st,"^[a-zA-Z]:\\.+?\.\w{2,4}(?= - )",sf)
    If WinActive("ahk_exe SumatraPDF.exe") && sf && font
    {
        sf_old:=sf
        SplitPath sf, sfn, sd, sfext
        WinGetText stxt, ahk_class SUMATRA_PDF_FRAME
        ;~ RegExMatch(stxt,"m)^\d+$",pg)
        RegExMatch(stxt,"m)^[0-9XIVLC]+$",pg)
        RegExMatch(stxt,"m)/ \K\d+$",all_pg)
        If !all_pg
            RegExMatch(stxt,"/ ?\K\d+(?=\))",all_pg)
        pp:=pg " / " all_pg
        If show && file_show
        {
            FileGetSize sz, % sf, K
            pp.=" | " sfn "  (" sz " KB)"
        }
        If (WinState("ahk_class SUMATRA_PDF_FRAME")=2 && !show)
        {
            FormatTime time, , HH:mm
            pp.=" | " time
        }
        ControlGetText pp_old, Static1, pages_window
        l:=StrLen(pp), l_old:=StrLen(pp_old)
        WinGetPos x, y, w, h, ahk_class SUMATRA_PDF_FRAME
        If !WinExist("pages_window") || (l!=l_old)
        {
            Gui Destroy
            Gui -Caption +ToolWindow -DPIScale +AlwaysOnTop +LastFound
            Gui Color, % color
            Gui Font, s%font% cffffff w700, Licida Console
            Gui Margin, 6, 2
            Gui Add, Text, g!Space, % pp
            Gui Show, x10 y10 NA, pages_window
            WinGetPos, , , , hp
        }
        GuiControl Text, Static1, % pp
        WinMove, pages_window, ,x+12, y+h-hp-12
    }
    else
        Gui Destroy
    Sleep 100
}
 
#If WinActive("ahk_class SUMATRA_PDF_FRAME")
!Up::Send {F12}
!Down::PostMessage 0x111, 562, , , ahk_class SUMATRA_PDF_FRAME
!F3::PostMessage 0x111, 500, , , ahk_class SUMATRA_PDF_FRAME
!F4::PostMessage 0x111, 501, , , ahk_class SUMATRA_PDF_FRAME
^NumpadEnter::
^Enter::Send {F11}
 
!vk43::
FileToClipboard(sf)
ToolTip Текст в буфере!, MRight//2-100, MBottom//2
Sleep 1000
ToolTip
return
 
!Space::
KeyWait Ctrl, T1
show:=1
SetTimer Show, % file_show
return
 
Show:
SetTimer Show, Off
show:=0
return
 
+Tab::
Send ^{vk4F}
WinWaitActive ahk_class #32770 ahk_exe SumatraPDF.exe
ControlSetText Edit1, % sf
ControlSend Button1, {Enter}
return
 
^vk4F::
KeyWait Ctrl, T1
KeyWait vk4F, T1
Send ^{vk4F}
WinWaitActive ahk_class #32770 ahk_exe SumatraPDF.exe
Sleep 100
WinMove ahk_class #32770, , MRight//5, MBottom//20, MRight*0.6, MBottom*0.9
ControlSetText Edit1, % sd #32770
ControlSend Button1, {Enter}
Sleep 100
ControlFocus DirectUIHWND2, ahk_class #32770
SendInput ^+6
Sleep 100
SendInput % sfn
return
 
+F2::
KeyWait Shift, T1
Clipboard:=""
Send ^{vk43}
ClipWait 1
e:=Errorlevel
ren:=ValidName(Trim(Clipboard))
Clipboard:=FirstUppercase(RegExReplace(ren,"[.,]+$"))
Send {F2}
WinWaitActive ahk_class #32770
If e
{
    ToolTip Ничего не скопировано!, MRight//2-100, MBottom//2
    Sleep 1500
    ToolTip
    return
}
Send {Del}^{vk56}
ControlSend Edit1, {End}
return
 
^Del::
^NumpadDel::
KeyWait Ctrl, T0.8
e:=Errorlevel
If !sf_old
    return
If conf  
{
    MsgBox, 262179, , % "Удалить файл`n" sf_old " ?"
    IfMsgBox Yes
        goto !Home
    return
}
 
!Home::
!End::
!PGUP::
!PGDN::
^!PGUP::
^!PGDN::
start:=sf_old
SplitPath start, , dir
mask:="*.cb7z;*.cbr;*.cbt;*.cbz;*.chm;*.djv*;*.epub;*.*fb2;*.mobi;*.pdb;*.pdf;*.xps"
n:=0, curr:=next:=prev:=end:=""
Loop Parse, mask, `;
{
    Loop Files, % dir "\" A_LoopField
    {
        n+=1
        If (n=1)
            home:=A_LoopFileFullPath
        If (A_LoopFileFullPath=start)
            curr:=n, prev:=end
        If (n=curr+1)
            next:=A_LoopFileFullPath
        end:=A_LoopFileFullPath
    }
}
open:=next, text:="Последний файл папки!"
If A_ThisHotkey in !PGUP,^!PGUP
    open:=prev, text:="Первый файл папки!"
If (A_ThisHotkey="!Home")
    open:=home, text:="Открыто!"
If (A_ThisHotkey="!End")
    open:=end, text:="Открыто!"
If A_ThisHotkey~="Del"
{
    Send ^{vk57}
    Sleep 500
    FileRecycle % start
    If !e
        return
}
If (!open || open=start)
{
    ToolTip % text, MRight//2-100, MBottom//2
    Sleep 1000
    ToolTip
    return
}
If A_ThisHotkey not contains Del,^!
    Send ^{vk57}
WinGet sumatra, ProcessPath, A
Run "%sumatra%" "%open%"
WinWait % open
show:=1
SetTimer Show, % file_show
return
 
SaveCopy(path)
{
    global
    KeyWait Ctrl, T1
    KeyWait Shift, T1
    KeyWait Alt, T1
    FileCreateDir % path
    Send ^{vk53}
    WinWaitActive ahk_class #32770 ahk_exe SumatraPDF.exe
    Clipboard:=RegExReplace(path,"\\$") "\" sfn
    Send {Del}^{vk56}
    Sleep 100
    Send {Enter}
    return
}
 
#If WinActive("ahk_class SUMATRA_PDF_FRAME") && HoverControl()="Static1"
RButton::
KeyWait RButton, T1
WinHide pages_window
PostMessage 0x111, 434, , , ahk_class SUMATRA_PDF_FRAME
return
 
#If WinActive("ahk_class SUMATRA_PDF_FRAME") && IsBorder(1) && WinState()
LButton::Send {F12}
RButton::
KeyWait RButton, T1
PostMessage 0x111, 562, , , ahk_class SUMATRA_PDF_FRAME
return
 
MButton::
KeyWait MButton, T1
Clipboard:=""
Send ^{vk43}
ClipWait 1
fav:=RegExReplace(Clipboard,"\s"," ")
PostMessage 0x111, 560, , , ahk_class SUMATRA_PDF_FRAME
WinWaitActive ahk_class #32770 ahk_exe SumatraPDF.exe
If fav
    ControlSetText Edit1, % fav, ahk_class #32770
return
 
#If WinActive("ahk_class SUMATRA_PDF_FRAME") && IsBorder(0,1) && WinState()
MButton::F11
RButton::goto !Space
 
WheelUp::
WheelDown::
ControlGet c1, Visible, , SysTreeView321, A
ControlGet c2, Visible, , SysTreeView322, A
If c1 || c2
    Send {%A_Thishotkey%}
else
{
    If (A_ThisHotkey="WheelUp")
        Send {PGUP}
    else
        Send {PGDN}
}
return
 
 
#If WinActive("ahk_class SUMATRA_PDF_FRAME") && IsBorder(0,0,1) && WinState()
RButton::^vk44
MButton::goto ^vk4F
+RButton::PostMessage 0x111, 419, , , ahk_class SUMATRA_PDF_FRAME
 
#If WinActive("ahk_class SUMATRA_PDF_FRAME") && !IsBorder(1,1,1,1)
~RButton & ~WheelDown::Send {Rbutton up}^{Tab}
~RButton & ~WheelUp::Send {Rbutton up}^+{Tab}
 
~RButton & ~LButton::Send {Rbutton up}!{Left}
~LButton & ~RButton::Send {LButton up}!{Right}
 
#If WinActive("ahk_class #32770 ahk_exe SumatraPDF.exe")
MButton::!Up
#IfWinActive
 
;--------------------------------------------------
FileToClipboard(PathToCopy,Method="copy")
{
   FileCount:=0
   PathLength:=0
 
   ; Count files and total string length
   Loop,Parse,PathToCopy,`n,`r
      {
      FileCount++
      PathLength+=StrLen(A_LoopField)
      }
 
   pid:=DllCall("GetCurrentProcessId","uint")
   hwnd:=WinExist("ahk_pid " . pid)
   ; 0x42 = GMEM_MOVEABLE(0x2) | GMEM_ZEROINIT(0x40)
   hPath := DllCall("GlobalAlloc","uint",0x42,"uint",20 + (PathLength + FileCount + 1) * 2,"UPtr")
   pPath := DllCall("GlobalLock","UPtr",hPath)
   NumPut(20,pPath+0),pPath += 16 ; DROPFILES.pFiles = offset of file list
   NumPut(1,pPath+0),pPath += 4 ; fWide = 0 -->ANSI,fWide = 1 -->Unicode
   Offset:=0
   Loop,Parse,PathToCopy,`n,`r ; Rows are delimited by linefeeds (`r`n).
      offset += StrPut(A_LoopField,pPath+offset,StrLen(A_LoopField)+1,"UTF-16") * 2
 
   DllCall("GlobalUnlock","UPtr",hPath)
   DllCall("OpenClipboard","UPtr",hwnd)
   DllCall("EmptyClipboard")
   DllCall("SetClipboardData","uint",0xF,"UPtr",hPath) ; 0xF = CF_HDROP
 
   ; Write Preferred DropEffect structure to clipboard to switch between copy/cut operations
   ; 0x42 = GMEM_MOVEABLE(0x2) | GMEM_ZEROINIT(0x40)
   mem := DllCall("GlobalAlloc","uint",0x42,"uint",4,"UPtr")
   str := DllCall("GlobalLock","UPtr",mem)
 
   if (Method="copy")
      DllCall("RtlFillMemory","UPtr",str,"uint",1,"UChar",0x05)
   else if (Method="cut")
      DllCall("RtlFillMemory","UPtr",str,"uint",1,"UChar",0x02)
   else
      {
      DllCall("CloseClipboard")
      return
      }
 
   DllCall("GlobalUnlock","UPtr",mem)
 
   cfFormat := DllCall("RegisterClipboardFormat","Str","Preferred DropEffect")
   DllCall("SetClipboardData","uint",cfFormat,"UPtr",mem)
   DllCall("CloseClipboard")
   return
}
 
FirstUppercase(t)
{
    StringLeft n, t, 1
    StringTrimLeft k, t, 1
    StringUpper n, n
    return n . k
}
 
HoverControl()
{
    MouseGetPos, , , , control
    return control
}
 
IsBorder(left:="",right="",top="",bottom:="",m=6)
{
    SysGet, M, Monitor
    SysGet, W, MonitorWorkArea
    CoordMode Mouse
    MouseGetPos mx, my
    return If (((left && mx<m) && (my>50) && (my<WBottom)) || (right && mx>MRight-m) || (top && my<m) || (bottom && my>MBottom-m))
}
 
ValidName(n,r="")
{
    n:=RegExReplace(n,"(:|;|,|\.|\*|\?|\\|/|<|>|"")"," ")
    n:=RegExReplace(n,"\s+"," ")
    StringReplace n, n, |, -, All
    If r
        StringReplace n, n, % " ", % r, All
    return Trim(n)
}
   
WinState(t="A")
{
    If !WinExist(t) || (t="A" && WinActive("Program Manager"))
        return
    SysGet, M, Monitor
    WinGetPos , , , w, h, % t
    WinGet st, MinMax, % t
    If (w=MRight && h=MBottom)
        st:=2
    return st
}
 

Всего записей: 1193 | Зарегистр. 10-12-2007 | Отправлено: 16:06 09-03-2016
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Sumatra PDF | SumatraPDF


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru