Два скрипта Autohotkey для JPEGView
I
В основном решает вопросы нормального, не утомляющего глаза отображения названий, улучшенной навигации и слайдшоу, расширенного использования мыши и поиска информации о файле.
В полноэкранном режиме скрипт выводит в нижней части экрана тонкое, настраиваемое и не скрывающее изображение окно с именем файла, тремя текстовыми кнопками и текущим временем (включается и выключается по Ctrl+Space или правым кликом внизу экрана). Нажатие средней кнопкой мыши внизу экрана делает панель двухстрочной, что может быть полезно при длинных названиях. Здесь:
Exif - окно вывода метаданных файла. Поддерживается открытие данных геолокации в Google Maps, Google Earth и SAS.Planet. Необходимо скачать Windows-версию ExifTool на http://www.sno.phy.queensu.ca/~phil/exiftool/ , распаковать в папку программы и переименовать файл в exiftool.exe.
Google - поиск в Google по имени файла без расширения.
TinEye - поиск похожих изображений с TinEye (загружает сайт и выводит вверху экрана подсказу с предложением нажать кнопку выбора файла - после нажатия скрипт вставляет путь к файлу и отправляет запрос).
Нажатие на часы отправляет имя файла в Google Translate.
Нажатие на имя файла скрывает или показывает дополнительные кнопки, освобождая место для длинных имен файлов.
В полноэкранном режиме можно перематывать кадры с помощью кнопок мыши при нахождении курсора у левого или правого края экрана. (Возможна перемотка при удержании кнопок, скрость определяется параметром MinimalDisplayTime в JPEGView.ini). Cтроку "MouseDblClk IDM_EXIT" в KeyMap.ini лучше закоментировать или удалить, чтобы случайно не закрывалось окно программы.
Щелчок средней кнопки мыши у левого края экрана в полноэкранном режиме запускает слайдшоу в прямом направлении, у правого - в обратном, при этом колесиком у края регулируется его скорость (текущая задержка отображается тултипом). Еще один щелчок средней кнопкой у края, выход из полноэкранного режима или Escape останавливают слайдшоу.
По Ctrl+O, Alt+Up или Alt+Down выводит увеличенное окно эксплорера c подсветкой текущего файла. Возможно быстрое и удобное перемещение по папкам с Alt+Up,Left,Right и Backspace. Средняя кнопка мыши в этом окне дает подъем на один уровень вверх.
Правый клик у верхнего края экрана включает и выключает отображение имени файла вверху окна, средний - работает как Ctrl+O [more=Скрипт]
Код: #NoEnv
SetWorkingDir %A_ScriptDir%
#SingleInstance, force
Menu Tray, Icon, shell32.dll, 42
SetKeyDelay 50, 50
SetBatchLines, -1
CoordMode ToolTip
CoordMode Mouse
/*
В основном решает вопросы нормального, не утомляющего глаза отображения названий, улучшенной навигации и слайдшоу, расширенного использования мыши и поиска информации о файле.
В полноэкранном режиме скрипт выводит в нижней части экрана тонкое, настраиваемое и не скрывающее изображение окно с именем файла, тремя текстовыми кнопками и текущим временем (включается и выключается по Ctrl+Space или правым кликом внизу экрана). Нажатие средней кнопкой мыши внизу экрана делает панель двухстрочной, что может быть полезно при длинных названиях.
Здесь:
Exif - окно вывода метаданных файла. Поддерживается открытие данных геолокации в Google Maps, Google Earth и SAS.Planet. Необходимо скачать Windows-версию ExifTool на
http://www.sno.phy.queensu.ca/~phil/exiftool/ , распаковать в папку программы и переименовать файл в exiftool.exe. ExifTool не понимает юникодные символы в имени файла!
Google - поиск в Google по имени файла без расширения.
TinEye - поиск похожих изображений с TinEye (загружает сайт и выводит вверху экрана подсказу с предложением нажать кнопку выбора файла - после нажатия скрипт вставляет путь к файлу и отправляет запрос).
Нажатие на часы отправляет имя файла в Google Translate.
Нажатие на имя файла скрывает или показывает дополнительные кнопки, освобождая место для длинных имен файлов. Если этого мало, щелчком средней кнопки мыши внизу экрана можно сделать панель двустрочной.
В полноэкранном режиме можно перематывать кадры с помощью кнопок мыши при нахождении курсора у левого или правого края экрана. (Возможна перемотка при удержании кнопок, скрость определяется параметром MinimalDisplayTime в JPEGView.ini). Cтроку "MouseDblClk IDM_EXIT" в KeyMap.ini лучше закоментировать или удалить, чтобы случайно не закрывалось окно программы.
Щелчок средней кнопки мыши у левого края экрана в полноэкранном режиме запускает слайдшоу в прямом направлении, у правого - в обратном, при этом колесиком у края регулируется его скорость (текущая задержка отображается тултипом). Еще один щелчок средней кнопкой у края, выход из полноэкранного режима или Escape останавливают слайдшоу.
По Ctrl+O, Alt+Up или Alt+Down выводит увеличенное окно эксплорера c подсветкой текущего файла. Возможно быстрое и удобное перемещение по папкам с Alt+Up,Left,Right и Backspace. Средняя кнопка мыши в этом окне дает подъем на один уровень вверх.
Правый клик у верхнего края экрана включает и выключает отображение имени файла вверху окна, средний - работает как Ctrl+O
*/
;------ Настройки --------
panel:=1 ; 1 - включение нижней панели в полноэкранном режиме по умолчанию
double:=0 ; 1 - двустрочная панель по умолчанию
b_color:="292929" ; цвет панели
f_size:=13 ; размер шрифта панели
t_color:="53A600" ; цвет шрифта
marg:=2 ; поля текста
button_width:=120 ; ширина текстовых кнопок
delay:=3 ; стартовая задержка при слайдшоу, с
exif_tags:="File Name,Directory,File Size,File Modification Date/Time,File Creation Date/Time,File Permissions,File Type,|,Image Size,Megapixels,Encoding Process,Color Space,Bits Per Sample,Color Components,Camera Model Name,Orientation,ISO,Exposure Time,X Resolution,Y Resolution,Software,Location,Creator Work URL,Image Description,Warning" ; тэги EXIF, отображаемые при кратком варианте просмотра, через запятую (скопировать нужные из полного; порядок учитывается,"|" - пустая строка)
googleearth:="" ; путь к Google Earth для открытия данных GPS
sasplanet:="" ; то же для SAS.Planet
goto start
;------ Горячие клавиши --------
#If WinActive("ahk_id " id)
^Space::panel:=!panel ; Ctrl+Space - включение/выключение нижней панели
+Space::double:=!double, upd:=1 ; Shift+Space - включение/выключение двустрочности
^vkE2::goto FileName ; Ctrl+| - скрытие/включение кнопок панели
!Up::goto ^vk4F ; Alt+Up - открытие увеличенной панели проводника
!Down::goto ^vk4F ; Alt+Down - то же
^vk45::goto Exif ; Ctrl+E - окно Exif
^vk46::goto Search ; Ctrl+F - поиск по имени файла в Google
^vk54::goto TinEye ; Ctrl+T - поиск похожих изображений в TinEye
^vk47::goto Translate ; Ctrl+G - перевод названия с Google Translate
NumpadIns::Send {F11} ; Серый Ins - полноэкранный/оконный режим
#If WinActive("ahk_id " id) && !IsBorder(1,1,1,1)
MButton:: ; Средняя кнопка мыши - полноэкранный/оконный режим
MouseGetPos, , , mt
If (mt=id)
Send {F11}
return
#IfWinActive
start:
n:=0, slideshow:=0, show_full:=0
SetFormat float, 2.1
SysGet, M, Monitor
Loop
{
If !id0:=WinExist("ahk_exe JPEGView.exe")
{
n:=0
Gui Destroy
WinShow, ahk_class Shell_TrayWnd
continue
}
n+=1
If (n=1)
id:=id0
If IsFullScreen("ahk_id " id) && panel
{
If !WinExist("bottom_window") || upd
{
panel_width:=MRight
If !show_full
panel_width-=button_width*4+marg*8
str:=double+1, upd:=""
Gui Destroy
Gui font, Arial bold s%f_size% c%t_color%
Gui Margin, % marg*8, % marg
Gui -Caption +ToolWindow -DPIScale +AlwaysOnTop +LastFound
Gui Color, % b_color
Gui, Add, Text, R%str% w%panel_width% gFileName
Gui, Add, Text, x+0 w%button_width% R%str% Center gExif, Exif
Gui, Add, Text, x+0 wp R%str% Center gSearch, Google
Gui, Add, Text, x+0 wp R%str% Center gTinEye, TinEye
Gui, Add, Text, x+0 wp R%str% Center gTranslate
Gui Show, % "x" 0 "y" MBottom-50 "NA", bottom_window
}
else
{
WinGetPos, , , , hwin, bottom_window
WinMove bottom_window , , , MBottom-hwin
WinMove % "ahk_id " id, , , , , MBottom-hwin
WinHide, ahk_class Shell_TrayWnd
WinGetTitle t,% "ahk_id " id
RegExMatch(t,"i).+(\.[a-z]{2,4}|/\d+])",t_curr)
ControlGetText t_old, Static1, bottom_window
If (t_curr!=t_old)
{
ControlSetText Static1, % t_curr, bottom_window
t_old:=t_curr
}
FormatTime time, ,HH:mm
ControlSetText Static5, % time, bottom_window
}
}
else If !(WinExist("ahk_class #32768") || WinActive("ahk_id " id2) || WinActive("ahk_exe Autohotkey.exe"))
{
If slideshow
{
slideshow:=0
ToolTip Slideshow off
SetTimer, RemoveToolTip, 1000
}
Gui Destroy
WinShow, ahk_class Shell_TrayWnd
If IsFullScreen("ahk_id " id)
WinMove % "ahk_id " id, , , , , MBottom
}
If slideshow
{
Sleep delay*1000
Send {%key%}
}
else
Sleep 10
}
#If IsFullScreen("ahk_id " id) && IsBorder(0,0,1)
RButton::Send ^{F2}
MButton::goto ^vk4F
#If WinActive("ahk_id " id2)
MButton::Bs
#If IsFullScreen("ahk_id " id) && IsBorder(0,0,0,1)
RButton::panel:=!panel
MButton::double:=!double, upd:=1
#If IsFullScreen("ahk_id " id) && IsBorder(1,1)
LButton::
While GetKeyState("LButton","P")
{
Send {PGDN}
If (A_Index=1)
Sleep 250
Sleep 10
}
return
RButton::
While GetKeyState("RButton","P")
{
Send {PGUP}
If (A_Index=1)
Sleep 250
Sleep 10
}
return
MButton::
Thread Priority, 1
slideshow:=!slideshow
If slideshow
{
key:="PGDN", direct:=">>>"
If IsBorder(,1)
key:="PGUP", direct:="<<<"
ttip:="Slideshow`n" direct "`nDelay " delay " c"
}
else
ttip:="Slideshow off"
ToolTip % ttip
SetTimer, RemoveToolTip, 1000
return
#If IsFullScreen("ahk_id " id) && IsBorder(1,1) && slideshow
WheelUp::
delay+=0.5
ToolTip % "Delay `n" delay " c"
SetTimer, RemoveToolTip, 1000
return
WheelDown::
If (delay>=1)
delay-=0.5
ToolTip % "Delay `n" delay " c"
SetTimer, RemoveToolTip, 1000
return
RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
return
#If WinActive("ahk_id " id) && slideshow
Escape::slideshow:=0
#If WinActive("ahk_id " id)
^vk4F::
Send ^{vk4F}
WinWaitNotActive % "ahk_id " id, , 3
Sleep 100
WinGet id2, ID, A
WinMove A , , MRight//20, MBottom//20, MRight*0.9, MBottom*0.9
ControlGetText tt, Edit1, % "ahk_id " id2
ControlFocus SysListView321, % "ahk_id " id2
Send ^+{2}
SendInput % tt
return
#IfWinActive
FileName:
Gui Destroy
show_full:=!show_full, upd:=1
return
Translate:
translate:="www.translate.google.com/#auto|ru|%s"
StringReplace url, translate, `%s, % RegExReplace(t_curr,"\..+?$")
Run % url
return
Search:
search:="https://www.google.ru/search?client=opera&q=%s&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest&gws_rd=ssl"
StringReplace url, search, `%s, % RegExReplace(t_curr,"\..+?$")
Run % url
return
TinEye:
clip:=ClipboardAll
Clipboard:=""
WinActivate ahk_exe JPEGView.exe
Send ^{vk43}
ClipWait 3
If Errorlevel
return
Sleep 200
WinMinimize ahk_exe JPEGView.exe
Run
https://www.tineye.com/ WinWaitNotActive % "ahk_id " id, 3
Sleep 1000
ToolTip Нажмите кнопку выбора файла, MRight//2-50, 0
WinWaitActive ahk_class #32770, , 20
ToolTip
If Errorlevel
return
ControlSetText Edit1, % Clipboard
ControlSend Edit1, {Enter}
Clipboard:=clip
return
Exif:
clip:=ClipboardAll
Clipboard:=""
WinActivate ahk_exe JPEGView.exe
WinGet jpegview_path, ProcessPath, ahk_exe JPEGView.exe
SplitPath jpegview_path, , jpegview_dir
exif:=jpegview_dir "\exiftool.exe"
Send ^{vk43}
ClipWait 3
If Errorlevel
return
SplitPath Clipboard, f_name, f_dir
FileDelete exif_out.*
exif_cmd="%exif%" -g -c `%.6f degrees "%Clipboard%" > "exif_out.txt"
RunWait %comspec% /c "%exif_cmd%", , Min
exif_full:="", exif_short:="", gps:=""
FileRead exif_full, exif_out.txt
exif_full:=RegExReplace(exif_full,":\s*\R",": ---\r\n")
exif_full:=RegExReplace(exif_full,"m)^---","`r`n ---")
RegExMatch(exif_full,"m)GPS Latitude\s*:\s*\K[\d.]+",gps_lat)
RegExMatch(exif_full,"m)GPS Longitude\s*:\s*\K[\d.]+",gps_lon)
Loop Parse, exif_tags, CSV
{
field:=A_LoopField
If (field="|")
exif_short.="`r`n", break
Loop Parse, exif_full, `r`n
{
If (RegExReplace(A_LoopField,"\s*:.+$")=field)
exif_short.=A_LoopField "`r`n", break
}
}
Gui 2:Destroy
Gui 2:+ToolWindow -DPIScale +AlwaysOnTop
Gui 2:Margin, 4, 4
Gui 2:Color, 292929
Gui 2:Font, s13 bold c%t_color%, Arial
GUi 2:Add, Text, y+4 w498 h36 Center gShort, Short
Gui 2:Add, Text, x+0 yp hp Center, |
Gui 2:Add, Text, x+0 yp w498 hp Center gFull, Full
gui 2:Font, s14 bold, Courier New
Gui 2:Add, Edit, % "xs w1000 h" MBottom-200 " ReadOnly"
If gps_lat && gps_lon
{
width:=1000
If googleearth && sasplanet
width:=333
If (googleearth && !sasplanet) || (!googleearth && sasplanet)
width:=500
Gui 2:Font, s13 bold, Arial
Gui 2:Add, Text, x0 w%width% h36 Center gGMaps, Google Maps
If googleearth
Gui 2:Add, Text, x+0 wp hp Center ggoogleearth, Google Earth
If sasplanet
Gui 2:Add, Text, x+0 wp hp Center gsasplanet, SAS.Planet
}
Gui 2:Show, Center, Exif
ControlSetText Edit1,% exif_short, Exif
FileDelete exif_out.*
Clipboard:=clip
return
2GuiEscape:
WinClose Exif
FileDelete exif_out.*
return
Short:
ControlSetText Edit1,% exif_short, Exif
return
Full:
ControlSetText Edit1,% exif_full, Exif
return
GMaps:
Sleep 200
WinClose Exif
Run % "https://www.google.com/maps/place/" gps_lat "," gps_lon
return
googleearth:
Sleep 200
WinClose Exif
FileAppend % "<?xml version=""1.0"" encoding=""UTF-8""?>`r`n<kml xmlns=""http://www.opengis.net/kml/2.2""> <Placemark>`r`n<name>" f_name "</name>`r`n<description>Folder: " f_dir "</description>`r`n<Point>`r`n<coordinates>" gps_lon "," gps_lat "</coordinates>`r`n</Point>`r`n</Placemark> </kml>", exif_out.kml, UTF-8
Run "%googleearth%" "%A_ScriptDir%\exif_out.kml"
return
sasplanet:
Sleep 200
WinClose Exif
Run "%sasplanet%" --zoom=15 --move=(%gps_lon%`,%gps_lat%)
return
IsBorder(left:="",right="",top="",bottom:="",m=20)
{
SysGet, M, Monitor
CoordMode Mouse
MouseGetPos mx, my
return If ((left && mx<m) || (right && mx>MRight-m) || (top && my<m) || (bottom && my>MBottom-m))
}
IsFullScreen(title)
{
WinGet st, Style, % title
return If (!(st & 0x00010000) && !(st & 0x80000000) && (st & 0x10000000) && WinActive(title))
}