TC4Shell - использование WCX плагинов в Проводнике
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next  :| |:
Total Commander -> Программное обеспечение

#91:  Author: Dec PostPosted: Tue Apr 11, 2017 23:52
    —
Flasher wrote:
А вот если получатель - архив, то прогресса нет.
Стандартной практикой в shell подсистеме является отсутствие диалогов в ситуации, когда в операцию не передан дескриптор какого нибудь окна, которое станет родительским по отношению к создаваемым в случае необходимости создания окон. Я придерживаюсь этой практики. Поскольку wscript.exe не передает ни какой дескриптор окна, TC4Shell считает, что UI не нужен. Ну а раз UI не нужен, то и окно прогресса не нужно.

Flasher wrote:
После того как...
Я поизучаю, как работает SHFileOperation с этим флагом.

Flasher wrote:
Речь про web-связку. Т.е. с этим проблем нет?
Проблем нет. Это фишка Проводника, я пока не планирую ее повторять.

#92:  Author: FlasherLocation: Москва PostPosted: Tue Apr 11, 2017 23:56
    —
Dec wrote:
отсутствие диалогов в ситуации, когда в операцию не передан дескриптор какого нибудь окна
Например? Дескриптор какого окна может быть передан, если мы задаём только пути?
Dec wrote:
Это фишка Проводника, я пока не планирую ее повторять.
Ясно.

#93:  Author: Dec PostPosted: Wed Apr 12, 2017 00:42
    —
Flasher wrote:
Дескриптор какого окна может быть передан, если мы задаём только пути?
Я говорю в целом о shell подсистеме. Например, при операции drag&drop (при которой вызывается тот же самый код, что и при работе скрипта), мне передается дескриптор окна, соответственно я отображаю UI при необходимости. Средствами vbs дескриптор не передать. Ну а раз нет ножек, значит нет и мультиков.

#94:  Author: FlasherLocation: Москва PostPosted: Wed Apr 12, 2017 00:58
    —
Dec wrote:
Ну а раз нет ножек, значит нет и мультиков.
Так я выше написал, что мультики есть в случае папок без окон. Вот и спрашиваю, откуда там дескриптор?

#95:  Author: Dec PostPosted: Wed Apr 12, 2017 01:01
    —
Flasher wrote:
Вот и спрашиваю, откуда там дескриптор?
Ну, MS славится нарушением собственных стандартов. Возможно, они показывают прогресс всегда независимо от наличия переданного дескриптор.

Добавлено спустя 1 час 55 минут:

Flasher wrote:
При попытке скопировать файлы в этот архив выпадает окно с ошибкой
Поправил свой код. Проверяй.

#96:  Author: FlasherLocation: Москва PostPosted: Wed Apr 12, 2017 04:07
    —
Порядок.
1. Что по 4096 и MoveHere?
2. А какие вообще плюсы у создания tmp в том же каталоге с заменой архива? Я утилитой могу распаковать файлы и переместить в архив. Я полагался на перенос, равносильный тому, что происходит между папками. В чём же тут виртуальность?
3. И ещё насчёт разрешения ассоциации для exe. Что нужно сделать, чтобы оно распространялось и на обсуждаемые методы?

#97:  Author: Dec PostPosted: Wed Apr 12, 2017 04:13
    —
Flasher wrote:
1. Что по 4096 и MoveHere?
(Экий ты быстрый) Изучаю вопрос.

Flasher wrote:
А какие вообще плюсы у создания tmp в том же каталоге с заменой архива?
Как бы ты не упаковывал, чем бы ты не упаковывал, что бы ты не упаковывал, tmp файл будет создаваться в любом случае.

Flasher wrote:
И ещё насчёт разрешения ассоциации для exe. Что нужно сделать, чтобы оно распространялось и на обсуждаемые методы?
Не понят вопроса.

#98:  Author: FlasherLocation: Москва PostPosted: Wed Apr 12, 2017 04:24
    —
Dec wrote:
Экий ты быстрый
Просто постоянная переустановка из-за каждой незначительной правки с вероятностью нарваться на перезагрузку системы как-то не радует. Проще подождать нескольких правок, тем более, что на данном этапе это не горит.
Dec wrote:
чем бы ты не упаковывал, что бы ты не упаковывал, tmp файл будет создаваться в любом случае.
В смысле? Сама упаковка из общих папок никаких tmp не подразумевает. Если бы такое было, я бы это ещё 100 лет назад заметил.
Dec wrote:
Не понят вопроса.
Мы обсуждаем методы CopyHere/MoveHere. Если источник exe, то как заставить их с ним работать?

#99:  Author: Dec PostPosted: Wed Apr 12, 2017 04:34
    —
Flasher wrote:
Сама упаковка из общих папок никаких tmp не подразумевает. Если бы такое было, я бы это ещё 100 лет назад заметил.
Т.е. ты хочешь сказать, что 7z умеет обновлять архивы без создания временных файлов?

Flasher wrote:
Если источник exe, то как заставить их с ним работать?
Для кого я это писал?

#100:  Author: FlasherLocation: Москва PostPosted: Wed Apr 12, 2017 05:31
    —
Dec wrote:
Т.е. ты хочешь сказать, что 7z умеет обновлять архивы без создания временных файлов?
Не, не умеет. Но она хотя бы в Temp их кидает.

Dec wrote:
Для кого я это писал?
Это я помню. Мы же там обсуждали, как разобраться отдельно с exe.

Quote:
А вот если получатель - архив, то прогресса нет.
Ошибочка. Без привязи к TC4Shell он есть:

Так что запрос остаётся актуальным. Если не получится, то по умолчанию TC4Shell лучше отвязать от ProgID zip-а.

Насчёт диалога ассоциаций. А можешь сделать, чтобы при применении обновлялись только изменённые значения вместо полной перезаписи?

#101:  Author: Dec PostPosted: Wed Apr 12, 2017 06:59
    —
Flasher wrote:
Что по 4096?

Я так и не понял, за что этот флаг отвечает.

Flasher wrote:
Что по MoveHere?

Как ни странно, но как для сценариев, где указана функция CopyHere, так и для сценариев, где указана функция MoveHere, wscript.exe передает набор флагов [DROPEFFECT_COPY, DROPEFFECT_MOVE, DROPEFFECT_LINK], что обозначает, что я сам должен выбрать из этих вариантов, что мой код будет делать (мой код выбирает всегда DROPEFFECT_COPY). Т.е. я не могу в своем коде отличить CopyHere от MoveHere.

Flasher wrote:
Но она хотя бы в Temp их кидает.

А чем Temp лучше директории архива? Я лишь вижу две причины, чем хуже.

1) Temp может располагаться на другом физическом диске. Это обозначает, что после создания новой версии архива новый файл нужно КОПИРОВАТЬ с диска на диск вместо простого удаления исходного архива и переименования новой копии.

2) Для shell важна скорость, с которой обновляется файл. Если исходный архив удалить и начать копировать его новую версию из другой папки, то shell будет считать, что файл удален, и окна с архивами, открытые в Проводнике, просто закроются. А если удалить и быстро переименовать, то для shell это будет обновленный файл, поэтому окна с архивами, открытые в Проводнике, просто обновятся в соответствии с новым содержимым архива.

Flasher wrote:
Если не получится, то по умолчанию TC4Shell лучше отвязать от ProgID zip-а.
Если тебе не нужна ассоциация между zip и TC4Shell, то просто не включай ее. Или что то иное подразумевалось?

Flasher wrote:
А можешь сделать, чтобы при применении обновлялись только изменённые значения вместо полной перезаписи?
Нет. Это механизм самодиагностики и подчистки ненужных файлов.

#102:  Author: FlasherLocation: Москва PostPosted: Wed Apr 12, 2017 07:50
    —
Dec wrote:
Я так и не понял, за что этот флаг отвечает.
А просто добавить его можно, чтобы избежать проблем?
Dec wrote:
Т.е. я не могу в своем коде отличить CopyHere от MoveHere.
Предлагаю по неиспользуемому флагу. 64, например.

Dec wrote:
А чем Temp лучше директории архива?
Никогда не любил, когда времянки создавались в том же каталоге. Во всех скриптах скидывал их только в Temp. 7z.exe, кстати, так же делает. Не всегда ясно без сигналов, откуда этот tmp прибыл. В моменты операций с файлами в той же панели этот файл может случайно оказаться в обрабатываемом списке после групповых выделений, что крайне нежелательно.
1) В крайнем случае можно сравнивать буквы дисков и в случае совпадения, перемещать в Temp. Архивы в отличии от медиа чаще собирают на системном диске. В случае иных дисков можно искать в корне System Volume Information либо $RECYCLE.BIN и скидывать туда, если нет, то создавать папку с атрибутом "скрытый".
2) Окна с архивами в Проводнике как-то касаются скриптов? Зачем им окна?

Dec wrote:
Или что то иное подразумевалось?
Постараться выяснить, как отобразить прогресс аналогично системному поведению, добавить связанные флаги. Если не выйдет, то сделать привязку zip к ProgID системы по умолчанию, чтобы пользователю не рассказывать как специально добиться такого результата.

Dec wrote:
Это механизм самодиагностики и подчистки ненужных файлов.
Не понял. Он так медленно срабатывает из-за чтения реестра? Диагностировать то он должен перед отрисовкой флагов в окне. А при чём тут применение?

#103:  Author: Dec PostPosted: Wed Apr 12, 2017 08:36
    —
Flasher wrote:
А просто добавить его можно, чтобы избежать проблем?
Добавляй, я просто игнорирую ее в своем коде.

Flasher wrote:
Предлагаю по неиспользуемому флагу.
Однозначно нет, никаких хаков я использовать не буду. Код обработки один для всего, и для твоих скриптов, и для Drag&Drop, и для Copy&Paste. Завтра еще кто-нибудь создаст какого нибудь клиента, который будет использовать NSE типа моего для манипуляций с архивами. И кто-то может случайно передать недокументированный флаг и потерять данные.

Flasher wrote:
Никогда не любил, когда времянки создавались в том же каталоге.
А я наоборот.

Flasher wrote:
В крайнем случае можно сравнивать буквы дисков и в случае совпадения, перемещать в Temp.
Одинаковые буквы дисков - это еще не обозначает, что файлы расположены на одном физическом диске, ибо есть такая штука, как hardlink.

Flasher wrote:
Окна с архивами в Проводнике как-то касаются скриптов?
Потому что код обработки один для всего, использовать хаки для определения того, какая операция выполняется я однозначно не буду.

Flasher wrote:
Постараться выяснить, как отобразить прогресс аналогично системному поведению
Это я и так знаю, как сделать. Но делать не буду. Нет переданного дескриптора окна - нет UI.

Flasher wrote:
добавить связанные флаги
Куда добавить? Какие флаги?

Flasher wrote:
Если не выйдет, то сделать привязку zip к ProgID системы по умолчанию, чтобы пользователю не рассказывать как специально добиться такого результата.
Не понимаю эту фразу. Если не нужна ассоциация между zip и TC4Shell, то просто не включай ее.

Flasher wrote:
Он так медленно срабатывает из-за чтения реестра?
Не занимался анализом.

Flasher wrote:
Диагностировать то он должен перед отрисовкой флагов в окне. А при чём тут применение?
Возможно, диагностика не совсем правильный термин. При применении происходит обновление всех записей в реестре на случай, если они были изменены, или была произведена установка ассоциаций с другими программами (в этом случае я удаляю ненужные записи в реестре).

#104:  Author: FlasherLocation: Москва PostPosted: Wed Apr 12, 2017 14:05
    —
Dec wrote:
Добавляй, я просто игнорирую ее в своем коде.
Я имел в виду тебя. Мне то зачем добавлять то, что не поможет? Проблему наличие неработающего флага не вызовет, проблему может вызвать как раз его неработоспособность.
Dec wrote:
Однозначно нет
Ну, если ты не сделаешь MoveHere, то все твои последние старания коту под хвост.
Dec wrote:
не обозначает, что файлы расположены на одном физическом диске, ибо есть такая штука, как hardlink.
Которая всегда расположена не то, что на одном физическом диске, а в пределах его одного тома. Very Happy
Dec wrote:
Куда добавить? Какие флаги?
В смысле куда? В код. 4 ты уже добавил. Остался 256.
Dec wrote:
Если не нужна ассоциация между zip и TC4Shell
Так это объяснять мне как автору скрипта придётся, что и нужно избежать.
Dec wrote:
При применении происходит обновление всех записей в реестре на случай, если они были изменены
Вот это вещь должна быть строго опциональной, ИМХО. Мало ли кто и по какой причине вносил правку. Было бы правильно флаг снизу добавить.

#105:  Author: Dec PostPosted: Wed Apr 12, 2017 14:38
    —
Flasher wrote:
Я имел в виду тебя.
А что мне добавить, если мы так и не выяснили, за что этот флаг отвечает.

Flasher wrote:
Ну, если ты не сделаешь MoveHere
А почему тебе так принципиально использовать именно MoveHere, почему не хочешь просто удалить файлы после CopyHere - Items.InvokeVerbEx("delete") (правда, тебе придется снова обновить TC4Shell с риском перезагрузки)

Flasher wrote:
Которая всегда расположена не то, что на одной физическом диске, а в пределах его одного тома. Very Happy
Ок, спутал с junctions points.

Flasher wrote:
Так это объяснять мне как автору скрипта придётся, что и нужно избежать.
Просто пиши комментарий в скрипте, что окна с прогрессом не будет, потому что автор TC4Shell не хочет его делать.



Total Commander -> Программное обеспечение


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next  :| |:
Page 7 of 8

Powered by phpBB © 2001, 2005 phpBB Group