<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Два скрипта для просмотрщика графики JPEGView]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10694&amp;type=atom" />
	<updated>2015-06-15T13:33:26Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10694</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Два скрипта для просмотрщика графики JPEGView]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94513#p94513" />
			<content type="html"><![CDATA[<p>Насколько я понимаю, нужно брать в качестве параметра именно <strong>UTF8</strong>, а не псевдоним. А как работать с выводом отражено в ответе по 3 ссылке.<br />И что понимается под каждым случаем?</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-06-15T13:33:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94513#p94513</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Два скрипта для просмотрщика графики JPEGView]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94511#p94511" />
			<content type="html"><![CDATA[<p>Прописывание в параметрах -charset cp65001 ничего не меняет.<br />Нужно задавать кодировку для каждого конкретного случая, что не вариант.</p>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2015-06-15T12:40:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94511#p94511</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Два скрипта для просмотрщика графики JPEGView]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94510#p94510" />
			<content type="html"><![CDATA[<p>Сейчас не вспомню где, но на страницах программы было такое сообщение. Практически же у меня все так и есть. И не только у меня: использующие его программы (XnView, ExifToolGui) кашу в тэгах дают очень часто.</p>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2015-06-15T12:30:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94510#p94510</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Два скрипта для просмотрщика графики JPEGView]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94508#p94508" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>ExifTool не понимает юникодные символы в имени файла!</p></blockquote></div><p>Разве?<br /><a href="http://www.sno.phy.queensu.ca/~phil/exiftool/exiftool_pod.html#windows_unicode_file_names">WINDOWS UNICODE FILE NAMES</a><br /><a href="http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q10">Q: How does ExifTool handle coded character sets?</a><br /><a href="http://owl.phy.queensu.ca/~phil/exiftool/faq.html#Q18">Q: Special characters don&#039;t display properly in my Windows console</a></p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-06-15T12:11:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94508#p94508</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Два скрипта для просмотрщика графики JPEGView]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=94507#p94507" />
			<content type="html"><![CDATA[<p><strong>I.</strong> В основном решает вопросы нормального, не утомляющего глаза отображения названий, улучшенной навигации и слайдшоу, расширенного использования мыши и поиска информации о файле.</p><p>В полноэкранном режиме скрипт выводит в нижней части экрана тонкое, настраиваемое и не скрывающее изображение окно с именем файла, тремя текстовыми кнопками и текущим временем (включается и выключается по Ctrl+Space или правым кликом внизу экрана). Нажатие средней кнопкой мыши внизу экрана делает панель двухстрочной, что может быть полезно при длинных названиях.</p><p><span class="postimg"><img src="http://savepic.su/5748957.jpg" alt="http://savepic.su/5748957.jpg" /></span></p><p>Здесь:<br />Exif - окно вывода метаданных файла. Поддерживается открытие данных геолокации в Google Maps, Google Earth и SAS.Planet. Необходимо скачать Windows-версию ExifTool&nbsp; на <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/">http://www.sno.phy.queensu.ca/~phil/exiftool/</a> , распаковать в папку программы и переименовать файл в exiftool.exe. ExifTool не понимает юникодные символы в имени файла!<br />Google - поиск в Google по имени файла без расширения.<br />TinEye - поиск похожих изображений с TinEye (загружает сайт и выводит вверху экрана подсказу с предложением нажать кнопку выбора файла - после нажатия скрипт вставляет путь к файлу и отправляет запрос).<br />Нажатие на часы отправляет имя файла в Google Translate.<br />Нажатие на имя файла скрывает или показывает дополнительные кнопки, освобождая место для длинных имен файлов.</p><p>В полноэкранном режиме можно перематывать кадры с помощью кнопок мыши при нахождении курсора у левого или правого края экрана. (Возможна перемотка при удержании кнопок, скрость определяется параметром MinimalDisplayTime в JPEGView.ini). Cтроку &quot;MouseDblClk&nbsp; IDM_EXIT&quot; в KeyMap.ini лучше закоментировать или удалить, чтобы случайно не закрывалось окно программы.</p><p>Щелчок средней кнопки мыши у левого края экрана в полноэкранном режиме запускает слайдшоу в прямом направлении, у правого - в обратном, при этом колесиком&nbsp; у края регулируется его скорость (текущая задержка отображается тултипом). Еще один щелчок средней кнопкой у края, выход из полноэкранного режима или Escape останавливают слайдшоу.</p><p>По Ctrl+O, Alt+Up или Alt+Down выводит увеличенное окно эксплорера c подсветкой текущего файла. Возможно быстрое и удобное перемещение по папкам с Alt+Up,Left,Right и Backspace. Средняя кнопка мыши в этом окне дает подъем на один уровень вверх.</p><p>Правый клик у верхнего края экрана включает и выключает отображение имени файла вверху окна, средний - работает как Ctrl+O</p><div class="codebox"><pre><code>#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троку &quot;MouseDblClk  IDM_EXIT&quot; в 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:=&quot;292929&quot; ; цвет панели
f_size:=13 ; размер шрифта панели
t_color:=&quot;53A600&quot; ; цвет шрифта
marg:=2 ; поля текста
button_width:=120 ; ширина текстовых кнопок
delay:=3 ; стартовая задержка при слайдшоу, с
exif_tags:=&quot;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&quot; ; тэги EXIF, отображаемые при кратком варианте просмотра, через запятую (скопировать нужные из полного; порядок учитывается,&quot;|&quot; - пустая строка)
googleearth:=&quot;D:\Soft\GoogleEarthPortable\GoogleEarthProPortable.exe&quot; ; путь к Google Earth для открытия данных GPS
sasplanet:=&quot;D:\Soft\SASPlanet\SASPlanet.exe&quot; ; то же для SAS.Planet

goto start
;------ Горячие клавиши --------
#If WinActive(&quot;ahk_id &quot; 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(&quot;ahk_id &quot; id) &amp;&amp; !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(&quot;ahk_exe JPEGView.exe&quot;)
    {
        n:=0
        Gui Destroy
        WinShow, ahk_class Shell_TrayWnd
        continue
    }
    n+=1 
    If (n=1)
        id:=id0        
    If IsFullScreen(&quot;ahk_id &quot; id) &amp;&amp; panel
    {        
        If !WinExist(&quot;bottom_window&quot;) || upd
        {
            panel_width:=MRight
            If !show_full
                panel_width-=button_width*4+marg*8        
            str:=double+1, upd:=&quot;&quot;
            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, % &quot;x&quot; 0 &quot;y&quot; MBottom-50 &quot;NA&quot;, bottom_window
        }                
        else
        {    
            WinGetPos, , , , hwin, bottom_window
            WinMove bottom_window , , , MBottom-hwin
            WinMove % &quot;ahk_id &quot; id, , , , , MBottom-hwin
            WinHide, ahk_class Shell_TrayWnd
            WinGetTitle t,% &quot;ahk_id &quot; id            
            RegExMatch(t,&quot;i).+(\.[a-z]{2,4}|/\d+])&quot;,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(&quot;ahk_class #32768&quot;) || WinActive(&quot;ahk_id &quot; id2) || WinActive(&quot;ahk_exe Autohotkey.exe&quot;))
    {
        If slideshow
        {
            slideshow:=0
            ToolTip Slideshow off
            SetTimer, RemoveToolTip, 1000
        }            
        Gui Destroy
        WinShow, ahk_class Shell_TrayWnd
        If IsFullScreen(&quot;ahk_id &quot; id)
            WinMove % &quot;ahk_id &quot; id, , , , , MBottom
    }
    If slideshow
    {
        Sleep delay*1000
        Send {%key%}
    }
    else
        Sleep 10
}

#If IsFullScreen(&quot;ahk_id &quot; id) &amp;&amp; IsBorder(0,0,1)
RButton::Send ^{F2}
MButton::goto ^vk4F

#If WinActive(&quot;ahk_id &quot; id2)
MButton::Bs

#If IsFullScreen(&quot;ahk_id &quot; id) &amp;&amp; IsBorder(0,0,0,1)
RButton::panel:=!panel
MButton::double:=!double, upd:=1

#If IsFullScreen(&quot;ahk_id &quot; id) &amp;&amp; IsBorder(1,1)
LButton::
While GetKeyState(&quot;LButton&quot;,&quot;P&quot;)
{
    Send {PGDN}        
    If (A_Index=1)
        Sleep 250
    Sleep 10
    
}
return
RButton::
While GetKeyState(&quot;RButton&quot;,&quot;P&quot;)
{
    Send {PGUP}    
    If (A_Index=1)
        Sleep 250
    Sleep 10
    
}
return
MButton::
Thread Priority, 1
slideshow:=!slideshow
If slideshow
{
    key:=&quot;PGDN&quot;, direct:=&quot;&gt;&gt;&gt;&quot;
    If IsBorder(,1)
        key:=&quot;PGUP&quot;, direct:=&quot;&lt;&lt;&lt;&quot;
    ttip:=&quot;Slideshow`n&quot; direct &quot;`nDelay &quot; delay &quot; c&quot;
}
else
    ttip:=&quot;Slideshow off&quot;
ToolTip % ttip
SetTimer, RemoveToolTip, 1000
return
#If IsFullScreen(&quot;ahk_id &quot; id) &amp;&amp; IsBorder(1,1) &amp;&amp; slideshow
WheelUp::
delay+=0.5
ToolTip % &quot;Delay `n&quot; delay &quot; c&quot;
SetTimer, RemoveToolTip, 1000    
return
WheelDown::
If (delay&gt;=1)
    delay-=0.5
ToolTip % &quot;Delay `n&quot; delay &quot; c&quot;
SetTimer, RemoveToolTip, 1000    
return

RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
return

#If WinActive(&quot;ahk_id &quot; id) &amp;&amp; slideshow
Escape::slideshow:=0

#If WinActive(&quot;ahk_id &quot; id)
^vk4F::
Send ^{vk4F}
WinWaitNotActive % &quot;ahk_id &quot; id, , 3
WinGet id2, ID, A
WinMove A , , MRight//20, MBottom//20, MRight*0.9, MBottom*0.9
ControlGetText tt, Edit1, % &quot;ahk_id &quot; id2
ControlFocus SysListView321, % &quot;ahk_id &quot; id2
Send ^+{2}
SendInput % tt
return
#IfWinActive

FileName:
Gui Destroy
show_full:=!show_full, upd:=1
return

Translate:
translate:=&quot;www.translate.google.com/#auto|ru|%s&quot;
StringReplace url, translate, `%s, % RegExReplace(t_curr,&quot;\..+?$&quot;)
Run % url
return

Search:
search:=&quot;https://www.google.ru/search?client=opera&amp;q=%s&amp;sourceid=opera&amp;ie=utf-8&amp;oe=utf-8&amp;channel=suggest&amp;gws_rd=ssl&quot;
StringReplace url, search, `%s, % RegExReplace(t_curr,&quot;\..+?$&quot;)
Run % url
return

TinEye:
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 % &quot;ahk_id &quot; id, 3
Sleep 1000
ToolTip Нажмите кнопку выбора файла, MRight//2-50, 0
WinWaitActive ahk_class #32770, , 20
ToolTip
If Errorlevel
    return    
ControlSetText Edit1, % Clipboard
ControlSend Edit1, {Enter}
return

Exif:
WinActivate ahk_exe JPEGView.exe
WinGet jpegview_path, ProcessPath, ahk_exe JPEGView.exe
SplitPath jpegview_path, , jpegview_dir
exif:=jpegview_dir &quot;\exiftool.exe&quot;
Send ^{vk43}
ClipWait 3
If Errorlevel
    return
SplitPath Clipboard, f_name, f_dir
FileDelete exif_out.*
exif_cmd=&quot;%exif%&quot; -g -c `%.6f degrees -charset cp1251 &quot;%Clipboard%&quot; &gt; &quot;exif_out.txt&quot;
RunWait %comspec% /c &quot;%exif_cmd%&quot;, , Min 
exif_full:=&quot;&quot;, exif_short:=&quot;&quot;, gps:=&quot;&quot;
FileRead exif_full, exif_out.txt
exif_full:=RegExReplace(exif_full,&quot;:\s*\R&quot;,&quot;: ---\r\n&quot;)
exif_full:=RegExReplace(exif_full,&quot;m)^---&quot;,&quot;`r`n          ---&quot;)
RegExMatch(exif_full,&quot;m)GPS Latitude\s*:\s*\K[\d.]+&quot;,gps_lat)
RegExMatch(exif_full,&quot;m)GPS Longitude\s*:\s*\K[\d.]+&quot;,gps_lon)
Loop Parse, exif_tags, CSV
{
    field:=A_LoopField
    If (field=&quot;|&quot;)
        exif_short.=&quot;`r`n&quot;, break
    Loop Parse, exif_full, `r`n
    {
        If (RegExReplace(A_LoopField,&quot;\s*:.+$&quot;)=field)
            exif_short.=A_LoopField &quot;`r`n&quot;, 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, % &quot;xs w1000 h&quot; MBottom-200 &quot; ReadOnly&quot;
If gps_lat &amp;&amp; gps_lon
{
    width:=1000
    If googleearth &amp;&amp; sasplanet
        width:=333
    If (googleearth &amp;&amp; !sasplanet) || (!googleearth &amp;&amp; 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.*
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 % &quot;https://www.google.com/maps/place/&quot; gps_lat &quot;,&quot; gps_lon
return

googleearth:
Sleep 200
WinClose Exif
FileAppend % &quot;&lt;?xml version=&quot;&quot;1.0&quot;&quot; encoding=&quot;&quot;UTF-8&quot;&quot;?&gt;`r`n&lt;kml xmlns=&quot;&quot;http://www.opengis.net/kml/2.2&quot;&quot;&gt; &lt;Placemark&gt;`r`n&lt;name&gt;&quot; f_name &quot;&lt;/name&gt;`r`n&lt;description&gt;Folder: &quot; f_dir &quot;&lt;/description&gt;`r`n&lt;Point&gt;`r`n&lt;coordinates&gt;&quot; gps_lon &quot;,&quot; gps_lat &quot;&lt;/coordinates&gt;`r`n&lt;/Point&gt;`r`n&lt;/Placemark&gt; &lt;/kml&gt;&quot;, exif_out.kml, UTF-8
Run &quot;%googleearth%&quot; &quot;%A_ScriptDir%\exif_out.kml&quot;
return

sasplanet:
Sleep 200
WinClose Exif
Run &quot;%sasplanet%&quot; --zoom=15 --move=(%gps_lon%`,%gps_lat%)
return

IsBorder(left:=&quot;&quot;,right=&quot;&quot;,top=&quot;&quot;,bottom:=&quot;&quot;,m=20)
{
    SysGet, M, Monitor
    CoordMode Mouse
    MouseGetPos mx, my
    return If ((left &amp;&amp; mx&lt;m) || (right &amp;&amp; mx&gt;MRight-m) || (top &amp;&amp; my&lt;m) || (bottom &amp;&amp; my&gt;MBottom-m))    
}

IsFullScreen(title)
{
    WinGet st, Style, % title
    return If (!(st &amp; 0x00010000) &amp;&amp; !(st &amp; 0x80000000) &amp;&amp; (st &amp; 0x10000000) &amp;&amp; WinActive(title)) 
}
</code></pre></div><p><strong>II.</strong> Скрипт предназначен для работы с пользовательскими командами JPEGView, синтаксис которых описан в JPEGView.ini. Отличие от простых команд (copy, move и пр.) в автоматическом создании целевых папок, автоматическом переименовании при совпадении имен, проверке результата и выдаче сообщений уже по завершении задачи. Поддерживаются абсолютные и относительные пути, возможно использование переменных текущего времени, даты, папки и расширения файла для получения конечного пути. Кроме того, возможно логирование производимых операций. <br />Позволяет производить копирование, перемещение, переименование с появлением отдельного окна ввода, добавление суффиксов и префиксов, сохранение на месте (без суффикса &quot;_proc&quot;) с сохранением оригинала в заданной папке.<br />Пояснения и примеры - смотри скрипт.</p><div class="codebox"><pre><code>#NoEnv 
SetWorkingDir %A_ScriptDir%
SetKeyDelay 50, 50
#SingleInstance Force
#NoTrayIcon

/*
Скрипт предназначен для работы с пользовательскими командами JPEGView, синтаксис которых описан в JPEGView.ini. Отличие от простых команд (copy, move и пр.) в автоматическом создании целевых папок, автоматическом переименовании при совпадении имен, проверке результата и выдаче сообщений уже по завершении задачи. Поддерживаются абсолютные и относительные пути, возможно использование переменных текущего времени, даты, папки и расширения файла для получения конечного пути. Кроме того, возможно логирование производимых операций. 
Позволяет производить копирование, перемещение, переименование с появлением отдельного окна ввода, добавление суффиксов и префиксов, сохранение на месте (без суффикса &quot;_proc&quot;) с сохранением оригинала в заданной папке.

Скрипт позволяет использовать следующие переменные:
$date - текущая дата в формате 2015-06-12
$time - текущее время в формате 15.27.06 
$folder - имя папки исходного файла
$file - имя файла без расширения
$ext - его расширение

Команды:
1. rename - переименование на месте с появлением отдельного окна ввода имени: 
    
UserCmd0=&quot;KeyCode: Shift+R Cmd: &#039;&quot;C:\Program Files\AutoHotkey\AutoHotkey.exe&quot; %exepath%\JPEGView.ahk rename %filename%&#039; Flags: &#039;WaitForTerminate ReloadFileList MoveToNext&#039;&quot;

Здесь первые два члена команды - путь к исполняемому файлу Autohotkey и собственно скрипту, в данном случае находящемуся в папке программы. Можно скомпилировать скрипт и заменить эти два члена одним.
JPEGView переходит к следующему файлу не дожидаясь окончания, но это не страшно, т.к исходное имя файла отображается в окне переименования.

2. Добавление суффиксов и префиксов - команды вида &lt;... и ...&gt; соответственно (возможно использование переменных). Добавление префикса &quot;_&quot; :

UserCmd1=&quot;KeyCode: Shift+1 Cmd: &#039;&quot;C:\Program Files\AutoHotkey\AutoHotkey.exe&quot; %exepath%\JPEGView.ahk &lt;_ %filename%&#039; Flags: &#039;WaitForTerminate ReloadFileList MoveToNext&#039;&quot;

3. move - перемещение. Удаление файла в мусорную папку:

UserCmd2=&quot;KeyCode: Ctrl+Del Cmd: &#039;&quot;C:\Program Files\AutoHotkey\AutoHotkey.exe&quot; %exepath%\JPEGView.ahk move %filename% D:\JPEGView\Trash\$folder&#039; Flags: &#039;WaitForTerminate ReloadFileList MoveToNext&#039;&quot;

4. copy - копирование. Все то же, но MoveToNext не надо. Копирование в паку с датой и добавлением префикса из имени папки:

UserCmd3=&quot;KeyCode: Shift+3 Cmd: &#039;&quot;C:\Program Files\AutoHotkey\AutoHotkey.exe&quot; %exepath%\JPEGView.ahk copy %filename% D:\JPEGView\$date\$folder_$file.$ext&#039; Flags: &#039;WaitForTerminate ReloadFileList&#039;&quot;


5. saveold - сохранение файла на месте, без суффикса &quot;_proc&quot;, с сохранением оригинала в заданную папку:

UserCmd4=&quot;KeyCode: Shift+S Cmd: &#039;&quot;C:\Program Files\AutoHotkey\AutoHotkey.exe&quot; %exepath%\JPEGView.ahk saveold %filename% D:\JPEGView\Old\$folder&#039;&quot;

P.S. Пользовательские команды требуют последовательной нумерации от 0 без пропусков!    
*/

mess:=1 ; cообщать об успешных действиях (0 - только об ошибках)
log:=2 ; логирование операций (2 - с разбивкой по дням)
log_dir:=&quot;logs&quot; ; папка сохранения логов

SetTimer Exit, 60000, 1
Loop %0%
    par%A_Index%:=%A_Index%
SplitPath par2, s_file, s_dir, s_ext, s_name
FormatTime date, , yyyy-MM-dd
FormatTime time, , HH.mm.ss
folder:=RegExReplace(s_dir,&quot;.+\\&quot;)
folder:=RegExReplace(folder,&quot;:&quot;)
StringReplace par1, par1, % $date, % date
StringReplace par1, par1, $time, % time
StringReplace par1, par1, $folder, % folder
StringReplace par1, par1, $file, % s_name
StringReplace par1, par1, $ext, % s_ext
StringReplace par3, par3, $date, % date
StringReplace par3, par3, $time, % time
StringReplace par3, par3, $folder, % folder
StringReplace par3, par3, $file, % s_name
StringReplace par3, par3, $ext, % s_ext
WinGet id, ID, ahk_exe JPEGView.exe
If (!par1 || !s_file)
    goto Error
If (par1=&quot;rename&quot;) 
{
    mes:=&quot;Введите новое имя файла без расширения:&quot;
    Input:    
    InputBox name_new, % s_file, % mes, , 800, 130, , , , ,% s_name
    If Errorlevel || (name_new=s_name)
        return
    path_new:=s_dir &quot;\&quot; name_new &quot;.&quot; s_ext    
    If FileExist(path_new)
        mes:=&quot;Файл существует!&quot;, goto Input
    FileMove % par2,% path_new
    e:=Errorlevel, text:=&quot;Успешно переименовано!&quot;
}
If RegExMatch(par1,&quot;^&lt;\K.+&quot;,pref)
{
    path:=s_dir &quot;\&quot; pref . s_name &quot;.&quot; s_ext
    FileMove % par2, % path
    e:=Errorlevel, text:=&quot;Добавлен префикс &quot; pref
}    
If RegExMatch(par1,&quot;.+(?=&gt;)&quot;,suff)
{
    path:=s_dir &quot;\&quot; s_name . suff &quot;.&quot; s_ext
    FileMove % par2, % path
    e:=Errorlevel, text:=&quot;Добавлен суффикс &quot; suff
}    
If par1 in copy,move,saveold
{
    If !path:=par3
        goto Error
    If !RegExMatch(par3,&quot;i)\.[a-z]{3,4}$&quot;)
    {
        t_dir:=RegExReplace(par3,&quot;\\$&quot;)
        path:=RenIfExist(t_dir &quot;\&quot; s_file,2)
    }
    else
    {
        SplitPath par3, , t_dir
        path:=RenIfExist(path,2)
    }    
    FileCreateDir % t_dir
    If (par1=&quot;copy&quot;)
    {
        FileCopy, % par2,% path
        e:=Errorlevel, text:=&quot;Скопировано в `n&quot; path
    }
    If (par1=&quot;move&quot;)
    {
        FileMove, % par2,% path
        e:=Errorlevel, text:=&quot;Перемещено в `n&quot; path
    }
    If (par1=&quot;saveold&quot;)
    {
        Send ^{vk53}
        WinWaitNotActive % &quot;ahk_id &quot; id, , 3
        If Errorlevel || !WinActive(&quot;ahk_exe JPEGView.exe&quot;)
            return
        WinGet id2, ID, A
        FileCopy % par2, % path            
        If e:=Errorlevel
            goto End
        ControlSetText Edit1, % par2
        ControlSend Edit1, {Enter}
        Sleep 300
        If !(WinActive(&quot;ahk_id &quot; id) || WinActive(&quot;ahk_id &quot; id2))
            Send {Left}{Enter}
        If !FileExist(par2)
            e2:=1
        text:=&quot;Сохранено. Оригинал перемещен в `n&quot; par3            
    }
}
End:
Sleep 200
If e || e2
    MsgBox, 16, Ошибка, Не выполнено!
else If mess
        MsgBox, 64, Информация, % text, 1.5    
If log
{
    FileCreateDir % log_dir
    If (log=2)
        date:=A_YYYY &quot;.&quot; A_MM &quot;.&quot; A_DD &quot;_&quot;
    FileAppend % &quot;`n`n###  &quot; A_DD &quot;.&quot; A_MM &quot;.&quot; A_YYYY &quot;  &quot; A_Hour &quot;:&quot; A_Min &quot;  ###`nsource:      &quot; par2 &quot;`naction:      &quot; par1 &quot;`ntarget:      &quot; path &quot;`nerrors:      &quot; e &quot;  &quot; e2, % RegExReplace(log_dir,&quot;\\$&quot;) &quot;\&quot; date &quot;JPEGView.log&quot;
}
Exit:
ExitApp

Error:
MsgBox, 16, Ошибка, Неверно заданы параметры!
ExitApp

RenIfExist(f_path,tab=&quot;1&quot;)
{
    If ! FileExist(f_path)
        return f_path
    SplitPath f_path, , dir, ext, file
    Loop % dir &quot;\&quot; file &quot;*.&quot; ext
    {
        n:=0
        RegExMatch(A_LoopFileName,&quot;(?&lt;=_)\d+?(?=\.\w{2,4}$)&quot;,n)
        If ! n
            n_max:=0
        If (n&gt;n_max)
            n_max:=n
    }
    SetFormat float, % &quot;0&quot; tab
    return dir &quot;\&quot; file &quot;_&quot; n_max+1.0 &quot;.&quot; ext
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Krot66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30687</uri>
			</author>
			<updated>2015-06-15T11:20:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=94507#p94507</id>
		</entry>
</feed>
