#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)) } |