1 (изменено: Drugoy, 2016-02-08 00:43:08)

Тема: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Можно ли ahk заставить следить за переименовыванием, копированием, перемещением или удалением всех файлов в системе?

Вот зачем мне это нужно:

Я написал скрипт для работы с виндовым проводником, который позволяет добавлять файлам описания (хранящееся во внешних файлах "descript.ion", по 1 на папку), как это можно сделать в Total Commander по ctrl+z.

Но в Total Commander если файл с описанием переместить в другую папку - то описание переместится вместе с этим файлом, а для того, чтобы мне реализовать такое же поведение и в моём скрипте - мне необходимо, чтобы скрипт получал оповещения обо всех перемещениях файлов в системе.

2

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Можно, ищите "мониторинг файловой системы".

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Не эту ли тему вы имели в виду?
Если да, то это не совсем то: те скрипты позволяют отслеживать перемещения файлов в какой-то определённой папке, а не во все ФС сразу.

Для моей задачи это подходит, но не очень: я бы мог скриптом заставить сначала просканировать все подключённые диски на наличие descript.ion и уже эти папки мониторить, но такой скан занимает прилично времени, получается слишком "накладно".
Я не уверен, что выйдет "дешевле": провести такой скан (вроде как достаточно его выполнить 1 раз, а дальше результат поиска по идее кэшируется и в следующий раз поиск происходит на порядки быстрей) или же следить за каждой файловой операцией и на ходу проверять наличие descript.ion по пути источника копирования, но хотелось бы для оценки всё же иметь возможность осуществить и второй вариант.

4

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Если всю файловую систему мониторить, то это, наверно, нужен драйвер файловой системы. Впрочем, я такой задачей не занимался. Т.е. первое, что надо сделать, — погуглить как вообще, в принципе, решается эта задача, безотносительно языка.

5

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Надо что-то делать со скриптами в той теме.
Скрипт №1 в первом сообщении не собирает нужную мне информацию и потому мне не подходит.

Скрипт №2 во первом сообщении - не работает на свежих U сборках ahk: на x64 он крэшится при нажатии на кнопку начала слежки, а на x32 - не показывает подробную информацию об отслеженных операциях, например, какой файл и во что был переименован:
https://i.imgur.com/YdkyTZu.png
Этот скрипт корректно работает только на 32a.

Скрипт из второго сообщения не следит за папками, а если происходят какие-то события с файлами внутри подпапок, то эти изменения отображаются как изменения самой подпапки, причём, такие события минимально информативны: "Файл изменён: %имяподпапки%".

Увы, я не понимаю WinAPI/DllCallы, чтобы исправить это собственноручно и прошу помощи.

6

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Этот работает:
https://autohotkey.com/boards/viewtopic.php?t=8384

7

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Это работает, но не позволяет отслеживать перемещение файла, вместо одного события о перемещении файла генерируются два: об удалении и о создании.
Похоже, придётся забыть про мою затею.

8 (изменено: Malcev, 2016-02-09 22:34:57)

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Так вроде такого события в виндовсе и нету.
Сначала идет стирание, а потом создание:

When you move a file, the server raises two events: a Deleted event in the source directory, followed by a Created event in the target directory.

https://msdn.microsoft.com/en-us/librar … 90%29.aspx
Можно попробовать считывать хеш стертого файла и сравнивать его с созданным - если совпадает, значит файл был перенесен.

9

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Жаль, но тогда получается, что достоверно связать два события в одно (установить, что это перенос файла, а не удаление и создание) невозможно.

Даже если в событие об удалении файла добавить сбор информации о файле - уже поздно, размер файла показывается равным нулю.

10

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Можно по TickCount фильтровать - если одинаковый, то файл был перенесен.

11

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Drugoy пишет:

Даже если в событие об удалении файла добавить сбор информации о файле - уже поздно, размер файла показывается равным нулю.

Тогда, может, хранить эту информацию в описании?

12

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Malcev, tickcount'ы могут различаться (на сотни и тысячи тех единиц, в которых они указаны), а уж если идёт поток массового перемещения/копирования/ещё чего - там и вовсе потеряться можно, наверно, особенно если имена повторяться будут.

YMP, хорошая идея.

13

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

В его примере с гуи - не различаются.

14

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

В некоторых случаях не различаются, в некоторых - различаются. Попробуйте перенести толстый файл с диска на диск (желательно на физически другой).

15

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

А как вы в этот гуи вставили проверку 2 дисков?

16

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Да просто запустил второй инстанс скрипта, добавив #SingleInstance, off

17

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Это неправильно.
Надо в этом гуи всунуть как-то второй диск.
У меня это получилось сделать только без гуи, но тогда в любом случае показывает разный  tickcount.
Стоит спросить у автора либо самому додумать, как вписать туда проверку нескольких дисков.

18 (изменено: stealzy, 2016-02-12 03:54:03)

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Offtop:
На NTFS можно было бы хранить описания к файлу в AltDS файла.
Плюс в том что не нужно париться с перемещением.
Минус в том, что файл описания не будет виден в проводнике.
С другой стороны, что нам мешает написать скрипт, который будет:
1) определять наличие описания в AltDS файла,
2) в проводнике добавлять к иконке файла особый значок или выделять имя файла другим цветом,
3) при наведении мыши или зажатия гк выводить тултип с описанием.
Посмотреть реализацию 2 пункта можно в программе Genie Timeline Backup.

19 (изменено: Malcev, 2016-02-13 05:08:38)

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

В некоторых случаях не различаются, в некоторых - различаются. Попробуйте перенести толстый файл с диска на диск (желательно на физически другой).

Исходный файл сразу же стирается, только после того, как он был полностью перенесен.
То есть отслеживаем FILE_NOTIFY_CHANGE_LAST_WRITE.
Успевают пройти доли секунды. Не понимаю зачем заморачиваться с описаниями.
Я так и не понял, как заставить следить скрипт just me за всеми дисками, а написать пример он не потрудился.
А вот скрипт HotKeyIt все показывает, как надо.
https://autohotkey.com/board/topic/6012 … y-changes/

20

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

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

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

21

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

WatchFolder()?

По форуму так же поищите, было здесь, вроде даже не одно обсуждение на эту тему.

22

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

KusochekDobra, этот способ, конечно, выполняет некоторые нужные мне функции, но как мне отследить создание копии из целевого файла?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

23

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

По имени созданной копии.

24

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Таким образом мне придется мониторить всю систему на предмет создания копии по имени? А не загнется скрипт?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

25

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Так если Вам не известно это "другое место", в котором происходят ожидаемые процедуры, то вначале его нужно найти и мониторить только его. Сомневаюсь, что другое поведение было бы целесообразно, но если источник ведёт себя как вредоносное ПО, рандомно копируя, удаляя и прочее, то в этом случае придётся мониторить всю систему априори.

26

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

belyankin12, а зачем вам всё это нужно?

27 (изменено: belyankin12, 2018-12-26 01:16:14)

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

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

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

28

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

belyankin12 пишет:

Malcev, это такая-себе защита от загребущих рук. Мне нужно минимизировать шанс утечки целевого файла.

ИМХО пустая трата времени.
Согласитесь, был бы в такой защите смысл, то её бы хоть кто-нибудь использовал.

29

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Согласен, но я не преследую цель защитить мой файл от кого-то важного. Это такой-себе спор с товарищем у меня возник.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

30

Re: AHK: срабатывание в случае движения файлов (rename/copy/move/delete)?

Тогда можно проверять все диски на создание новых файлов и проверять их MD5.