Страница 1 из 1

WCX не работает со всеми расширениями.

Добавлено: Вт мар 28, 2006 06:34
Dmitryk1
WCX не работает со всеми расширениями. Работает только с расширением зарегестрированным на него. А мне надо иметь возможность обрабатывать все расширения и выбирать нужное.
Так работает, например:
far2wc=448,%commander_path%\Plugins\WCX\FAR2WC\FAR2WC.WCX

в коде:

Код: Выделить всё

int __stdcall GetPackerCaps()
{
	return PK_CAPS_HIDE|PK_CAPS_BY_CONTENT;
}

Добавлено: Вт мар 28, 2006 13:43
vserd
Dmitryk1
Зарегистрируй плугин на отфонарное расширение, тогда, TC будет выполнять поиск через вызов CanHandleThisArchive.

Поиск архиваторного плугина осуществляется следующим образом.
1. Total Commander проверяет может ли он обработать файл с данным расширением.
2. Если может, осуществляется обработка. Дальнейший поиск не производится.
3. Если не может, тогда ищется расширение в wincmd.ini секция [PackerPlugins]
4. Если нашли, тогда передаем файл на обработку ему, поиск прекращаем. Даже если плугин предназначен для совершенно другого типа файлов, и возвращает ошибку, Total Commander не производит дальнейший поиск.
P Как пример можно привести расширение EXE. Под этим расширением может быть как "обычная" программа, так и самораспаковывающийся архив. Самораспаковывающийся архив может быть различного типа (RAR, ZIP, MS CAB, InstallShield инсталяция, InnoSetup и так далее).
5. Если расширения не найдено, Total Commander производит перебор всех плугинов из wincmd.ini секция [PackerPlugins] начиная с первого. Если плугин может обработать файл, он говорит об этом Total Commander-у и Total Commander прекращает поиск и вызывает плугин. Когда перебраны все записи о плугинах, Total Commander ничего не делает.

Отсюда следует вывод. Для успешной работы нескольких плугинов, которые могут обрабатывать одинаковые расширения, нужна только запись о плугине в wincmd.ini [PackerPlugins].
Под каким расширением будет зарегистрирован плугин, совершенно не важно.
Если несколько плугинов могут обработать один и тот-же тип архивов (например ms cab), будет вызван первый плугин в порядке очереди в [PackerPlugins].

Total Commander использует записи в wincmd.ini [PackerPlugins] для упаковки файлов. Вы можете выбрать тип архива из комбобокса и создать файл данного типа.
Применительно к MultiArc это означает что вы должны регистрировать только те типы Addon-ов которые будете использовать для создания архивов. Для распаковки архивов вам достаточно одной любой записи в wincmd.ini [PackerPlugins] в которой упоминается MultiArc.

Добавлено: Вт мар 28, 2006 14:19
Dmitryk1
Вот! Как тотал осуществляет проверку на :
1. Total Commander проверяет может ли он обработать файл с данным расширением

Собираю плагин. ставлю процесс на отладку и точку останова. захожу в архив с ассоциированным расширением.
Есть остановка в процедуре Load.

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

Точка останова в начале процедуры.

Я могу попросить юзера регистрировать плагин со всеми нужными расширениями, но мне надо получить именно возможность просмотре всех файлов.

Да. если мой плагин отправляет в ответ что плохой архив, будут дальше проверки, других плагинов, или коммандер сругается и всё?

Добавлено: Пт мар 31, 2006 11:05
Dmitryk1
Чего-то никто не отвечает...
в коде указал

Код: Выделить всё

int __stdcall GetPackerCaps()
{
	return PK_CAPS_HIDE|PK_CAPS_BY_CONTENT;
}
в коммандере в инишнике
ctconv=448,C:\Totalcmd\Plugins\WCX\CTConv\Debug\CTConv.wcx

в правильное расширение входит по ентеру (в ctconv). В остальные даже не пытается по контрол пейдждауну.

Где ещё эта возможность может скрываться?
Я начал просто добавлять нужные расширения в инишник. но он в них начинает тоже по ентеру входить а так не надо...

Добавлено: Пт мар 31, 2006 17:35
vserd
CanYouHandleThisFile обрабатываешь?

Добавлено: Пт мар 31, 2006 21:02
Lamer
Если я правильно понял вопрос,необходимо обеспечить,чтобы plugin проверял специфическую сигнатуру архива.Иначе его работа так и останется ограниченной зарегистрированными расширениями.В случае Multiarca сигнатура прописывается в строке ID=...

Добавлено: Пн апр 03, 2006 12:41
vserd
Lamer
необходимо обеспечить,чтобы plugin проверял специфическую сигнатуру архива.Иначе его работа так и останется ограниченной зарегистрированными расширениями.
Не совсем. Проерка сигнатуры это внутренняя проверка самого плугина. Но плугин должен сказать ТС может он обработать этот файл или нет. Это делает CanYouHandleThisFile.
Но проблема с CanYouHandleThisFile в том, что если расширение зарегистрировано на конкретный плугин, тогда ТС напрямую передает ему управление, без вызова CanYouHandleThisFile.
А вот если нет регистрации на это расширение, тогда тотал перебирает плугины с помощью CanYouHandleThisFile.

Dmitryk1
Попробуй поставить точки оснатова не только на Load, но и на CanYouHandleThisFile, OpenArchive.

Добавлено: Вт апр 04, 2006 09:43
Dmitryk1
vserd писал(а):CanYouHandleThisFile обрабатываешь?
Нет :)
Ща поищу, что и где такое :)

Добавлено: Вт апр 04, 2006 14:16
Dmitryk1
Dmitryk1 писал(а):
vserd писал(а):CanYouHandleThisFile обрабатываешь?
Нет :)
Ща поищу, что и где такое :)
не работает:( может примерчик есть у кого-то?
и цифру в ини какую ставить? на плагин...

Добавлено: Вт апр 04, 2006 19:23
vserd
Dmitryk1
Значит чего-то не так делаешь. MultiArc то именно так говорит TC может он обработать файл или нет.
Смотри исходники MA.

Добавлено: Ср апр 05, 2006 13:52
Dmitryk1
vserd писал(а):Dmitryk1
Значит чего-то не так делаешь. MultiArc то именно так говорит TC может он обработать файл или нет.
Смотри исходники MA.
Спасибо за советы. Скачал исходники мультиарка. действительно там заработало. Причём у меня так и не работает :) Ищу грабли. надеюсь не детские ;) Ещё раз спасибо за советы!

Добавлено: Чт май 18, 2006 08:19
Dmitryk1
Действительно, детские грабли были :) ... слабо разбираюсь в С++.
И несколько ещё вопросов возникло, исключительно по с++ Применительно к коммандеру.
Отсюда просьба, если у кого-то есть время и желание отвечать иногда на мои, зачастую не сложные вопросы на эту тему, напишите в аську 122370935. Буду очень признателен.