Что нового

Диалог "Extract files..." для 7-Zip

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Друзья, мне нужно немного изменить поведение этого архивтора при двойном клике на архиве. По умолчанию открывается файловый менеджер 7-Zip, а мне нужно, чтобы появлялось диалоговое окно для выбора пути, куда собственно нужно распаковывать архив. Этот же диалог появляется из контекстного меню архива - 7-Zip > Extract files... Причем уже с установленным путем, соответствующем имени архива (без расширения). Есть идеи.

Пока придумал так:

Код:
If $CmdLine[0] Then
	Run(RegRead('HKCU\Software\7-Zip', 'Path') & '\7zG.exe x -ad -o"' & StringLeft($CmdLine[1], StringInStr($CmdLine[1], '.', 0, -1) - 1) & '\" "' & $CmdLine[1] & '"')
EndIf


Этот скрипт компилируется в .exe и подменяется в реестре как дефолтная программа для .7z, .rar, .zip и т.д.

Но хотелось бы обойтись без дополнительных файлов...


Добавлено:
Сообщение автоматически объединено:

Вся загвоздка вот в чем:

7zG.exe x -ad -o"Путь" "Имя архива"

открывает этот диалог и вставляет в сторку указанный "Путь". Я не знаю может ли 7zG.exe автоматом добавить к "Пути" "\Имя архива\" (без расширения). По крайней мере, так получается через контекстное меню.



Добавлено:
Сообщение автоматически объединено:

Посмотрел переданную коммандную строку для процесса 7zG.exe... Оказывается ему передается уже сформированный путь.

:(

Может все же можно обойтись без дополнительных файлов?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied
А консольная версия не подойдёт, или нужно вызвать именно диалоговое окно?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Re: Диалог \"Extract files...\" для 7-Zip

Yashied [?]
Нужно именно окно с выбором пути
А разве FileSelectFolder не подойдёт?


Добавлено:
Сообщение автоматически объединено:

У 7zip же есть меню с пунктами, там есть Распаковать, который открывает диалог выбора пути для распаковки архива, вот нужно найти строчку в реестре которая это исполняет, и подставить её под действие по умолчанию, точнее это действие назначить действием по умолчанию :wacko:
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Yashied
Я тут накопал странный параметр, который срабатывает только при запуске через контекстное меню проводника...
Используется некая карта 7ZIP, но я не смог найти, что это такое...

Код:
"7zG.exe" x -o"X:\FOLDER\" -ad -slp- -an -ai#7zMap16795:54:7zEvent26436

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

И еще заметка: к моменту запуска 7zG.exe к пути распаковки уже добавлено имя архива без расширения как подпапка... То есть, это фокус не самого 7zG.exe, а 7-zip.dll...
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Диалог \"Extract files...\" для 7-Zip

CreatoR сказал(а):
...вот нужно найти строчку в реестре которая это исполняет, и подставить её под действие по умолчанию, точнее это действие назначить действием по умолчанию.

Все не так просто, контекстное меню создает ActiveX (7-zip.dll).

snoitaleR сказал(а):
Я тут накопал странный параметр, который срабатывает только при запуске через контекстное меню проводника...

Да, я про это писал. Это коммандная строка, которую передает 7-zip.dll в 7zG.exe.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Re: Диалог \"Extract files...\" для 7-Zip

Yashied [?]
Все не так просто, контекстное меню создает ActiveX
Вот ком. строка которая передаётся при этом (действие "Распаковать <-> Extract files...") в «7zG.exe»:

Код:
"C:\Program Files\7-Zip\7zG.exe" x -o"C:\FileName\" -ad -slp- -an -ai#7zExtractMapping31251:150:7zExtractMappingEndEvent31251


Добавлено:
Сообщение автоматически объединено:

Yashied [?]
Вся загвоздка вот в чем:
7zG.exe x -ad -o"Путь" "Имя архива"
открывает этот диалог и вставляет в сторку указанный "Путь"
Попробовал пропустить это дело через cmd.exe...

(это указывается в реестре в значении параметра для запуска файлов архива)
Код:
cmd.exe /c FOR /F "delims=" %i IN ("%1") DO start "" "C:\Progra~1\7-Zip\7zG.exe" x -ad -o"%~ni" "%1"
но оно вылетает и дело не доходит до запуска 7zG.exe, в чём дело даже и не знаю (точнее не помню, давно дело с батниками не имел), в командной строке это работает.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А что такое "%~ni"?
 

SyDr

Сидра
Сообщения
651
Репутация
158
%~nI - из переменной %I выделяется только имя файла

Нашёл необходимую командную строку для вызова диалога:
Пример,
"C:\Program Files\7-Zip\7zG.exe" x "A:\Разборки\SOWPODS-Scrabble-Dictionary.zip" -o"A:\Разборки\SOWPODS-Scrabble-Dictionary\" -ad -slp-

<Путь к 7zG> x <Путь к архиву> -o<Путь к каталогу рапаковки> -ad -slp-

x извлекать файлы из архива с полными путями
-ad в справке не описано (похоже указывает на то, что пользователь может изменить параметры)
-slp- по умолчанию выключено, но в контектстном меню всё равно передаётся. Можно убрать
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Yashied
Если я тебя правильно понял, тебе нужен контроль над окнами 7z?
Могу предложить модифицированный модуль для сборки архива
можно настроить полностью на тихую распаковку, оставить только 1 окно выбора пути, и т.п.
Я думаю разберешься :smile:
 

SyDr

Сидра
Сообщения
651
Репутация
158
CreatoR [?]
но оно вылетает и дело не доходит до запуска 7zG.exe, в чём дело даже и не знаю (точнее не помню, давно дело с батниками не имел), в командной строке это работает.
В батниках %% используется для переменных
cmd.exe /c FOR /F %%I IN ("%1") DO start "" "C:\Progra~1\7-Zip\7zG.exe" x -ad -o"%~nI" "%1"
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
SyDr [?]
В батниках %% используется для переменных
:laugh: спасибо, а я забыл!

Yashied
Вот тебе и решение, единственный минус - мерцание окна командника на долю секунды перед отображением диалога.
 
Верх