Написание плагина архиватора WCX

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Hram
Сообщения: 113
Зарегистрирован: Чт май 19, 2005 20:14
Откуда: Питер

Написание плагина архиватора WCX

Сообщение Hram »

Подскажите пожалуйста. Пишу плагин архиватора. После удаления файла из архива из списка файлов TC он не удаляется. И запрос на ReadHeader() также не вызывается? Если можно пример.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Может поможет, если пошлёшь окну тотала собщение об обенвлении, примерно так:

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

SendMessage (Totalcmd_Window_Handle,WM_USER,540{cm_RereadSource});
Я только не помню, где должна предаваться команда в lParam или wParam.
Hram
Сообщения: 113
Зарегистрирован: Чт май 19, 2005 20:14
Откуда: Питер

Сообщение Hram »

D1P Спасибо за ответ.
А как получить Totalcmd_Window_Handle напрямую в плагин он не передается. Или например запущено несколько TC как узнать какой из них вызвал плагин? И почему не вызывается
OpenArchive() with OpenMode==PK_OM_LIST
repeat
ReadHeader()
ProcessFile(...,PK_SKIP,...)
until error returned
CloseArchive()
После любой из операций над архивом происходит этот цикл вызова процедур, а после DeleteFiles() нет и в SetChangeVolProc() и SetProcessDataProc() hArcData=0xffffffff.
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

А как получить Totalcmd_Window_Handle
MSDN тебе в помощь и RTFM WinAPI :). Название функции запамятовал, то ли GetWindowHandle, то ли ещё как-то... в общем что-то такое.
NetSpider
Сообщения: 1
Зарегистрирован: Пт янв 13, 2006 19:19
Откуда: Елец

Сообщение NetSpider »

Не фиг париться. На самом деле все проще. На форуме Ghisler писал, что список файлов обновится, если изменить время доступа к архиву, либо его размер.
Время меняем через SetFileTime(HANDLE hFile, FILETIME *Creation, FILETIME *LastAccess, FILETIME *LastWrite). Кажется такая функция была. Я использовал

void WINAPI SetCurFileTime(HANDLE hFileHandle)
{
SYSTEMTIME time;
FILETIME MyFileTime, NEWFileTime;

GetLocalTime(&time);
SystemTimeToFileTime(&time,&MyFileTime);
LocalFileTimeToFileTime(&MyFileTime,&NEWFileTime);

SetFileTime(hFileHandle,NULL,&NEWFileTime,&NEWFileTime);
return;
}

После этого окно всегда обновлялось. А если послать сообщение, как вы писали, то в случае wcx плагина окажешься в директории с архивом, а не в архиве.
Аватара пользователя
Моторокер
Сообщения: 1517
Зарегистрирован: Пт май 06, 2005 08:22
Откуда: г. Пермь (читается Перьмь)
Контактная информация:

Сообщение Моторокер »

На форуме Ghisler писал, что список файлов обновится, если изменить время доступа к архиву, либо его размер.
До удаления ещё не дошёл.
А разве при удалении (т.е. изменении архива) его дата и размер не меняются?
плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми
Ответить