<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Создавать копию файлов, при закрытии exe программы]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=11461</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=11461&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Создавать копию файлов, при закрытии exe программы».]]></description>
		<lastBuildDate>Tue, 10 May 2016 06:44:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=103606#p103606</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Крайне Вам признателен, плотно потестировал, всё работает превосходно, можно не беспокоиться о файлах. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> </p><p>Теперь уже постоянно использую 11 скриптов, качественно улучшающих свойства системы, благодаря Вам и другим участникам script-coding, а без них и Шиндовс не мил. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Tue, 10 May 2016 06:44:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=103606#p103606</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=103370#p103370</link>
			<description><![CDATA[<p><strong>Balux</strong>, попробуйте так:<br /></p><div class="codebox"><pre><code>#Persistent
Process1 := &quot;firefox.exe&quot;
; в Copy только файлы!
Copy1 = 
(
C:\Mozilla\Firefox\Profiles\default\places.sqlite
C:\Mozilla\Firefox\Profiles\default\prefs.js
)
Backup1 := &quot;D:\Backup\Firefox&quot;
Time1 := 300  ; секунды

Data := {}
while proc := Process%A_Index%  {
	i := A_Index
	obj := Data[proc] := {}
	for k, v in [&quot;Copy&quot;, &quot;Backup&quot;, &quot;Time&quot;]  {
		var := v . i
		if (%var% = &quot;&quot; &amp;&amp; v != &quot;Time&quot;)  {
			MsgBox, % &quot;Переменная &quot; var &quot; не определена, присвойте значение!&quot;
			ExitApp
		}
		obj[v] := %var%
	}
}
MyBackup := new Backup(Data)
Return

class Backup
{
	__New(data)  {
		this.data := data
		watch := this.WatchProcesses.Bind(this)
		SetTimer, % watch, 1000
	}
	WatchProcesses()  {
		for proc in this.data  {
			Process, Exist, % proc
			this.DefineAction(proc, ErrorLevel)
		}
	}
	DefineAction(proc, exist)  {
		obj := this.data[proc]
		obj.exist := exist
		if (obj.exist &amp;&amp; !obj.exist_prev &amp;&amp; obj.time)  {
			timer := obj.timer := this.Backups.Bind(this, obj)
			SetTimer, % timer, % (obj.time)*1000
			this.Backups(obj)
		}
		if (!obj.exist &amp;&amp; obj.exist_prev)  {
			if (timer := obj.timer)  {
				SetTimer, % timer, Delete
				obj.timer := &quot;&quot;
			}
			this.Backups(obj)
		}
		obj.exist_prev := obj.exist
	}
	Backups(obj)  {
		Critical
		CoordMode, ToolTip
		dir := obj.Backup
		if !FileExist(dir)  {
			FileCreateDir, % dir
			if ErrorLevel  {
				MsgBox, % &quot;Не удалось создать папку &quot; dir &quot;!`nОшибка &quot; A_LastError
				ExitApp
			}
		}
		files := obj.Copy
		Loop, parse, files, `n, `r
		{
			if !FileExist(A_LoopField)  {
				NonExistFiles .= &quot;`n&quot; A_LoopField
				continue
			}
			SplitPath, A_LoopField, FileName
			if FileExist(file := dir &quot;\&quot; FileName)  {
				FileGetTime, CopyLastModified, % file
				FileGetTime, SourceLastModified, % A_LoopField
			}
			if !FileExist(file) || (SourceLastModified &gt; CopyLastModified)  {
				FileCopy, % A_LoopField, % file, 1
				if ErrorLevel
					NotCopied .= &quot;`n&quot; A_LoopField
			}
		}
		if !NonExistFiles
			ToolTip,,,, 1
		else  {
			ToolTip, % &quot;При попытке копирования не обнаружены файлы:`n&quot; NonExistFiles, 1, 1, 1
			Sleep, 1000
		}
		if !NotCopied
			ToolTip,,,, 2
		else  {
			ToolTip, % &quot;Не удалось скопировать файлы:`n&quot; NotCopied, 500, 1, 2
			Sleep, 1000
		}
		Critical, Off
	}
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 05 May 2016 10:15:58 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=103370#p103370</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=103288#p103288</link>
			<description><![CDATA[<p>Всё ещё лелею надежду на помощь. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Mon, 02 May 2016 20:08:47 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=103288#p103288</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102530#p102530</link>
			<description><![CDATA[<p>Блин, в очередной раз отключили электричество и часть данных пропала, но благодаря скрипту, не так много как раньше. Поэтому подумал, лучше всё же делать бэкап определённых файлов, каждые 5 минут (настраиваемо), но естественно, чтобы была проверка, был ли файл изменён. (Вычесть время файла-источника из времени файла-приёмника.)</p><p>Можно ли совместить всё это в одном скрипте? Т.к. некоторые файлы изменяются только после закрытия программы, то оба способа пригодятся. </p><p>И сделать удобное заполнение, как в примере, с ключевыми словами (Program1, Copy1, Backup1, Time1), а если поле Time1 не указано, то копирование происходит при закрытии программы. Плюс глобальная горячая клавиша, копирующая сразу все файлы, указанные в коде.</p><div class="codebox"><pre><code>Program1:=&quot;firefox.exe&quot;
Copy1:=&quot;C:\Mozilla\Firefox\Profiles\default\places.sqlite&quot;, &quot;C:\Mozilla\Firefox\Profiles\default\prefs.js&quot;
Backup1:=&quot;D:\Backup\Firefox&quot;
Time1: 300 ; Секунды</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Wed, 13 Apr 2016 09:29:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102530#p102530</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102367#p102367</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />К сожалению, не могу понять, как совместить Ваш код с кодом из предыдущего сообщения, это возможно или здесь только простые команды копирования?</p><div class="codebox"><pre><code>В остальном уточните задачу.</code></pre></div><p>Имелось ввиду, чтобы при каждом копировании, создавалась новая папка с текущей датой 2016-04-07_10-09-32 и уже в неё помещалось копируемое, это было бы удобно, при копировании целых папок с файлами.</p>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Thu, 07 Apr 2016 06:09:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102367#p102367</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102336#p102336</link>
			<description><![CDATA[<p>Действия со списком вот так можно организовать:<br /></p><div class="codebox"><pre><code>firefox()

firefox()
{
	FilesForCopy =
	(LTrim
	C:\Users\AERIE\AppData\Roaming\Mozilla\Firefox\Profiles\default\places.sqlite
	C:\Users\AERIE\AppData\Roaming\Mozilla\Firefox\Profiles\default\prefs.js
	)
	Loop, parse, FilesForCopy, `n, `r
	{
		;здесь действия с каждым отдельным файлом
		MsgBox, % A_LoopField  ; путь к каждому отдельному файлу в переменной A_LoopField
	}
}</code></pre></div><p>В остальном уточните задачу.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 05 Apr 2016 20:39:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102336#p102336</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102281#p102281</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Спасибо огромное, сам бы я до такого не додумался. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Уже что-то получилось, я взял код из примера уважаемого <strong>Alectric</strong>, но не подскажете как вставить несколько <strong>CopySourcePattern</strong> для разных файлов? Вот так работает только на второй файл, а через запятую только на первый. И может быть знаете, как каждый раз копировать файлы в новую папку с именем текущей даты и времени yyyy-mm-dd_hh-nn-ss?</p><div class="codebox"><pre><code>firefox()
{
CopySourcePattern := &quot;C:\Users\AERIE\AppData\Roaming\Mozilla\Firefox\Profiles\default\places.sqlite&quot;
CopySourcePattern := &quot;C:\Users\AERIE\AppData\Roaming\Mozilla\Firefox\Profiles\default\prefs.js&quot;
CopyDest := &quot;D:\Backup\Firefox&quot;
Loop, %CopySourcePattern%
{
    copy_it = n
    IfNotExist, %CopyDest%\%A_LoopFileName% ; Всегда копировать, если одноимённый файл не существует.
        copy_it = y
    else
    {
        FileGetTime, time, %CopyDest%\%A_LoopFileName%
        EnvSub, time, %A_LoopFileTimeModified%, seconds ; Вычесть время файла-источника из времени файла-приёмника.
        if time &lt; 0 ; Файл-источник новее, чем файл-приёмник.
            copy_it = y
    }
    if copy_it = y
    {
        FileCopy, %A_LoopFileFullPath%, %CopyDest%\%A_LoopFileName%, 1 ; Перезапись при копировании разрешена.
        if ErrorLevel
            MsgBox, Не удалось скопировать &quot;%A_LoopFileFullPath%&quot; в &quot;%CopyDest%\%A_LoopFileName%&quot;.
    }
}
Return 
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Mon, 04 Apr 2016 22:19:42 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102281#p102281</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102261#p102261</link>
			<description><![CDATA[<div class="codebox"><pre><code>#Persistent
global ProcessArray := [ {process: &quot;mpc-be64.exe&quot;, func: &quot;MpcBe64&quot;}
							  , {process: &quot;mpc-be.exe&quot;, func: &quot;MpcBe&quot;}
							  , {process: &quot;firefox.exe&quot;, func: &quot;firefox&quot;} ]

oSvc := ComObjGet(&quot;winmgmts:&quot;)
ComObjConnect(deleteSink := ComObjCreate(&quot;WbemScripting.SWbemSink&quot;), &quot;ProcessDelete_&quot;)

Command := &quot;Within 1 Where TargetInstance ISA &#039;Win32_Process&#039;&quot;
oSvc.ExecNotificationQueryAsync(deleteSink, &quot;select * from __InstanceDeletionEvent &quot; Command)

ProcessDelete_OnObjectReady(obj)
{
	Process := obj.TargetInstance
	for k, v in ProcessArray
		if (v.process = Process.Name &amp;&amp; MyFunc := v.func)
			break
	(MyFunc &amp;&amp; %MyFunc%())
}

MpcBe64()
{
	MsgBox, mpc-be64.exe завершён
}

MpcBe()
{
	MsgBox, mpc-be.exe завершён
}

firefox()
{
	MsgBox, firefox завершён
}</code></pre></div><p>Вместо MsgBox в каждой функции нужные действия.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 04 Apr 2016 13:44:45 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102261#p102261</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102247#p102247</link>
			<description><![CDATA[<p><strong>Alectric</strong><br />Спасибо за ссылки, прочитал, но ничего особо не понял. К сожалению, не понимаю как сделать готовый скрипт-программу, чтобы он следил за закрытием нескольких exe, да ещё, для каждого exe копировал разные файлы, проверяя дату изменения копируемого файла или папки, дабы не плодить десятки одинаковых, т.к. к примеру, использую несколько портативных Firefox-ов и MPC-BE. </p><p>Вот примерно как хотелось бы добавлять задачи в начало скрипта. Если у кого-нибудь будет свободное время и желание помочь. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="quotebox"><blockquote><p>Program1:=&quot;firefox.exe&quot;<br />Copy1:=&quot;C:\Users\AERIE\AppData\Roaming\Mozilla\Firefox\Profiles\default\prefs.js&quot;<br />Backup1:=&quot;D:\Backup\Firefox\&lt;date yyyy-mm-dd_hh-nn-ss&gt;&quot;</p><p>Program2:=&quot;foobar2000.exe&quot;<br />Copy2:=&quot;C:\Users\AERIE\AppData\Roaming\foobar2000\configuration&quot;<br />Backup2:=&quot;D:\Backup\foobar2000\&lt;date yyyy-mm-dd_hh-nn-ss&gt;&quot;</p><p>Program3:=&quot;mpc-be64.exe&quot;<br />Copy3:=&quot;C:\Users\AERIE\AppData\Roaming\MPC-BE\mpc-be64.ini&quot;<br />Backup3:=&quot;D:\Backup\MPC-BE\&lt;date yyyy-mm-dd_hh-nn-ss&gt;&quot;</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Sun, 03 Apr 2016 23:10:00 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102247#p102247</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102177#p102177</link>
			<description><![CDATA[<p><a href="http://www.script-coding.com/AutoHotkey/LoopFilesFolders.html">Loop (файлы и папки)</a><br /><a href="http://www.script-coding.com/AutoHotkey/FileCopy.html">FileCopy</a><br /><a href="http://www.script-coding.com/AutoHotkey/FileCopyDir.html">FileCopyDir</a></p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Thu, 31 Mar 2016 16:46:26 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102177#p102177</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Создавать копию файлов, при закрытии exe программы]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=102158#p102158</link>
			<description><![CDATA[<p>Здравствуйте, использую систему в режиме тени, т.е. при отключении ПК, все данные пропадают. Хотелось бы делать частый авто-бэкап некоторых файлов, подскажите пожалуйста, возможно ли это сделать?</p><p>При закрытии, например, firefox.exe, нужно скопировать определённые файлы из папки вроде: <strong>C:\KKK\Box\drive\Profile\*****</strong>, где <strong>*****</strong> это название папки, которое часто изменяется, но т.к. она одна, нужно просто переходить в следующую директорию. В папку с автоименованием даты/времени <strong>D:\KKK\Box\drive\Profile\2016-03-28_23-35-05</strong>.</p><p>Как я себе это представляю:<br /></p><div class="codebox"><pre><code>
Программы, на которые срабатывает скрипт:
prog:=&quot;mpc-be64.exe&quot;
prog:=&quot;mpc-be.exe&quot;
prog:=&quot;firefox.exe&quot;

Адреса копируемых файлов:
C:\KKK\Box\drive\Profile\*****\file1.exe
C:\KKK\Box\drive\Profile\*****\file2.sqlite
C:\KKK\Bkfdsa\yhkuyg\yuinv\8ojgfc\file1.txt
C:\KKK\UHfcc\hl8gf\6jkbik\ohgrg\file2.doc

Директория для копий:
D:\KKK\Box\drive\Profile\&lt;Date_Time&gt;

code...
code...
code...
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Balux)]]></author>
			<pubDate>Wed, 30 Mar 2016 17:35:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=102158#p102158</guid>
		</item>
	</channel>
</rss>
