Фоновое копирование с помощью FastCopy

Здесь обсуждается всё, что касается макросов.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

Поскольку плагин Background Copy не развивается, а необходимость копирования в фоне есть, было принято волевое решение реализовать копирование в фоне с помощью макроса.
Особенности данного макроса:
  1. Код данного макроса базируется на макросах Plugin_FastCopy & Plugin_TeraCopy (C) SimSU
  2. Почему именно FastCopy? Потому что это "рабочая лошадка", невзирая на его невзрачный внешний вид. TeraCopy выглядит гораздо приятнее, но при копировании файлов порой возникают проблемы. Это неприемлемо.
Сам макрос, версия 1.4.0:


Он же:
Plugin.FastCopy.1.4.0.7z
(3.83 KiB) Downloaded 155 times
Last edited by DV on Mon 12 Sep, 2022 18:22, edited 11 times in total.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Фоновое копирование с помощью FastCopy

Post by buniak_a_h »

Latest post of the previous page:

DV wrote: Sun 01 Dec, 2019 21:46 Попробовал, но тольку с win.SearchPath почти никакого
«Почти» - это как?
На самом деле после установки прописал в переменную, добавил путь в path (в свойствах компа! С cmd окружение странно взаимодействует то ли с ФАРом, то ли с ConEmu, то ли с консолью), добавил 3 строчки. И всё заработало.
DV wrote: Sun 01 Dec, 2019 21:46 проще модифицировать скрипт
Это была последняя версия? Тогда - да. Иначе проще в следующеё версии добавить указанные строки и не париться с редактированием скрипта при каждом выходе версии. Ну, или делать настройку (не уверен, что это - менее трудоёмко. Хотя было бы самым правильным. Заодно и хоткеи менять можно было бы.).
Тут главное - "не навреди". Три строчки не навредят, а помочь могут.
DV wrote: Sun 01 Dec, 2019 21:46 чем добавлять этот путь в системную переменную %PATH%
В системную переменную обычно добавляют корректно написанные инсталляторы. Китайцы - авторы FastCopy - не озаботились, но это - пока; могут и добавить.
Можно, конечно, искать в Start-МЕНЮ (у меня есть такой скрипт, могу одолжить). Это было, наверно, удобно, но конкретно FastCopy можно устанавливать без образования ярлыков Extract only. Можно при первом запуске сигнализировать и спрашивать путь; затем запоминать его. Это вообще было бы универсально. А так, как сейчас -
И, кстати, может, стоило бы запускать её с SW_SHOWMINIMIZED или даже SW_HIDE - раз уж "фоновое"
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Фоновое копирование с помощью FastCopy

Post by zg »

DV wrote: Sun 01 Dec, 2019 21:464. Так вот, win.SearchPath не находит путь C:\Progs\FastCopy\FastCopy.exe, который я прописал в переменной %PATH% непосредственно перед запуском FAR !
а у вас точно FastCopy.exe имеет путь C:\Progs\FastCopy\FastCopy.exe\FastCopy.exe или всё таки C:\Progs\FastCopy\FastCopy.exe?
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

zg wrote: Mon 02 Dec, 2019 00:08или всё таки C:\Progs\FastCopy\FastCopy.exe?
Точно :) Таки win.SearchPath работает, как надо :)
buniak_a_h wrote: Sun 01 Dec, 2019 22:13И, кстати, может, стоило бы запускать её с SW_SHOWMINIMIZED или даже SW_HIDE - раз уж "фоновое"
Перепробовал SW_HIDE, SW_SHOWNOACTIVATE, SW_SHOWMINNOACTIVE и прочие варианты с запуском FastCopy, калькулятора (calc) и блокнота (notepad). Почему-то при запуске FastCopy и notepad со свёрнутым окном фокус ввода не возвращается в FAR Manager! То есть указанная программа запускается свёрнутой - а фокус ввода оказывается непонятно где, но точно не у окна FAR Manager. (В то время, как calc, похоже, вообще игнорирует то, что передано в nShowCmd).
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Фоновое копирование с помощью FastCopy

Post by buniak_a_h »

DV wrote: Mon 02 Dec, 2019 12:24 Перепробовал SW_HIDE, SW_SHOWNOACTIVATE, SW_SHOWMINNOACTIVE и прочие варианты с запуском FastCopy, калькулятора (calc) и блокнота (notepad). Почему-то при запуске FastCopy и notepad со свёрнутым окном фокус ввода не возвращается в FAR Manager! То есть указанная программа запускается свёрнутой - а фокус ввода оказывается непонятно где, но точно не у окна FAR Manager. (В то время, как calc, похоже, вообще игнорирует то, что передано в nShowCmd).
Я тоже … :-)
На самом деле SW_HIDE было бы нормально (фокус остаётся у ФАРа), но вот только потом уже на запущенное приложение (FastCopy) не переключиться. Если надо снять - только через список процессов. "Запускать свёрнутым в трей" - такого нет…
Last edited by buniak_a_h on Mon 02 Dec, 2019 12:34, edited 1 time in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

Поэкспериментировав ещё c командами вида

Code: Select all

lua: win.ShellExecute(nil, nil, "notepad", nil, nil, 7)
выяснил, что при работе со стандартным консольным окном FAR Manager фокус ввода таки возвращается в FAR Manager.
А вот при работе с FAR Manager из-под ConEmu фокус ввода переходит непонятно куда...
Last edited by DV on Mon 02 Dec, 2019 13:30, edited 1 time in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

Версия 1.3.1:
- исправлены недочёты, обнаруженные buniak_a_h (спасибо!);
- если путь к FastCopy.exe не существует, кнопка [Edit...] в сообщении об ошибке позволяет отредактировать макрос с последующей перезагрузкой макросов (это я так схитрил, чтобы не делать полноценную конфигурацию :))
Last edited by DV on Mon 02 Dec, 2019 21:26, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Фоновое копирование с помощью FastCopy

Post by buniak_a_h »

DV wrote: Mon 02 Dec, 2019 21:26это я так схитрил
Да надо было просто, если путь введён корректно, запомнить его по mf.msave, а загружать по mf.mload. Тоже не полноценная конфигурация, но не редактирует скрипт и не требует перезагрузки макросов. И введённый путь не пропадёт при следующей версии скрипта. В остальном согласен: чем майстрячить конфигурацию проще один раз спросить, проверить, что указали правильно и запомнить.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

Версия 1.3.2:
- если макрос не находит FastCopy.exe, то по нажатию кнопки [Edit...] он автоматически создаёт файл настроек Plugin.FastCopy.cfg рядом с Plugin.FastCopy.lua, и при дальнейших вызовах читает настройки именно из этого файла.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Фоновое копирование с помощью FastCopy

Post by Xerox »

DV,
Eсли еще не решил все проблемы с фокусами?
.. то можно попробовать запускать с помощью:

Code: Select all

start /min "titel" "<your command/program here>"
"/мин" - это "start minimized".
"старт" даст еще гибкость в задавании приоритета и аффинити (у start-а дофига и других параметров запуска),
что для копирования важно, чтобы не убивать все ИО/ЦПУ
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

Xerox wrote: Sun 08 Dec, 2019 15:34"старт" даст еще гибкость в задавании приоритета и аффинити
Тогда появляются нюансы с мигающим окном консоли (в котором выполняется start), а также с поддержкой юникодных имён файлов...
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

Версия 1.3.3:
- в диалоги подтверждения добавлена кнопка [Config...] для настройки макроса.
Last edited by DV on Mon 30 Dec, 2019 19:31, edited 1 time in total.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Фоновое копирование с помощью FastCopy

Post by Xerox »

DV wrote: Mon 30 Dec, 2019 19:30
Xerox wrote: Sun 08 Dec, 2019 15:34"старт" даст еще гибкость в задавании приоритета и аффинити
Тогда появляются нюансы с мигающим окном консоли (в котором выполняется start), а также с поддержкой юникодных имён файлов...
Я бы сказал что пусть мигает, это доли секунды, но дело вкуса в общем.
То что могут быть проблемы с юникодными именами - согласен что это уже посерьезнее беда
Ну тут такие варианты на мой первый взгляд:
1.) кажется можно передавать ФастКопи параметры запуска в том числе имена в файле параметров?
2.) несколько извращенный вариант - создавать маленькие временные скрипты для cscript на jscript/vbscript, готов помочь
3.) Использовать для управления фокусом/запуском NirCmd - я бы сказал хороший вариант, NirCmd много чего умеет, не требует установки (почти)
4.) Использовать для управления фокусом/запуском AHK - много чего умеет, неплохой вариант, но кажется что более тяжеловесный чем варианты выше

Готов помочь если что, если есть какой критичный затык
Впрочем твоим скриптом уже как есть удовлетворен, пользуюсь, спасибо
Last edited by Xerox on Mon 30 Dec, 2019 23:17, edited 1 time in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

После множества экспериментов, выкладываю версию 1.4.0:
- теперь FastCopy по умолчанию запускается в фоне (с минимизированным окном);
- теперь в макросе запрещена обработка элемента ".." по аналогии со стандартными диалогами копирования/перемещения/удаления.

Внимание!
При наличии файла Plugin.FastCopy.cfg (рядом с Plugin.FastCopy.lua) удалите в Plugin.FastCopy.cfg подстроку "/open_window" из CopyCmd, MoveCmd и DeleteCmd, чтобы выглядело так:

Code: Select all

  CopyCmd        = '/cmd=diff /estimate /verify',
  MoveCmd        = '/cmd=move /estimate /verify',
  DeleteCmd      = '/cmd=delete /no_confirm_del',
Технические детали, касающиеся значения SetFocusTimeout:
При работе в Far Manager из-под ConEmu наблюдается следующая проблема: после запуска FastCopy с минимизированным окном фокус ввода не возвращается в Far Manager. Макрос решает эту проблему вызовом функции SetFocusDelayed(Cfg.SetFocusTimeout), которая сначала ждёт SetFocusTimeout миллисекунд, а потом возвращает фокус окну FAR явным вызовом SetForegroundWindow(farWnd). Однако, в зависимости от быстродействия вашей системы (например, у вас может быть HDD или SSD, современный или устаревший процессор) значение SetFocusTimeout может оказаться недостаточным для "холодного" (т.е. первого) запуска FastCopy, и тогда фокус ввода сначала вернётся в окно FAR, затем появится минимизированное окно FastCopy, в результате чего FAR потеряет фокус ввода.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Фоновое копирование с помощью FastCopy

Post by HaRT »

DV wrote: Thu 26 Nov, 2020 14:57в зависимости от быстродействия вашей системы (например, у вас может быть HDD или SSD, современный или устаревший процессор) значение SetFocusTimeout может оказаться недостаточным для "холодного" (т.е. первого) запуска FastCopy, и тогда фокус ввода сначала вернётся в окно FAR, затем появится минимизированное окно FastCopy, в результате чего FAR потеряет фокус ввода.
Разве сложно дождаться появления процесса FastCopy (но не более некоего таймаута) и уже тогда передать фокус?
Фар есть инструмент, а не нянька. © 2009 DrKnS
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

HaRT wrote: Thu 26 Nov, 2020 15:04Разве сложно дождаться появления процесса FastCopy (но не более некоего таймаута) и уже тогда передать фокус?
Нюанс в том, что появление процесса FastCopy и появление его окна - это не одномоментные события.
Ещё один нюанс в том, что я обычно запускаю несколько копий FastCopy - и при запуске второй копии процесс FastCopy уже существует. А запускаю я несколько копий потому, что в настройках FastCopy указал кол-во параллельных копирований = 1, т.е. все следующие копии FastCopy дожидаются выполнения предыдущих перед началом копирования, таким образом создавая очередь копирования.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Фоновое копирование с помощью FastCopy

Post by DV »

В принципе, можно попробовать отсчитывать тайм-аут от появления процесса "fastcopy.exe" - это, по идее, улучшило бы работу макроса при "холодном старте" FastCopy.
Однако, как написать на Lua что-то такое, я не знаю: https://stackoverflow.com/questions/865 ... -name-in-c
И привязываться к чему-то вроде [ tasklist /FI "IMAGENAME eq fastcopy.exe" ] тоже не хочется: во-первых, зависимость на внешнюю утилиту, во-вторых, надо как-то обработать результат её вызова (проанализировать консольный вывод?).
Post Reply

Return to “Обсуждение макросов”