как получить пути в FS плагине
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Написание плагинов для Total Commander

#1: как получить пути в FS плагине Author: zvyagaaa PostPosted: Mon Oct 24, 2011 17:05
    —
Добрый день, хочу сделать FS плагин, сейчас разбираюсь, на дельфи. Вроде бы разобрался с обработкой нажатия на "файл" в окне WFS
Code:
function FsExecuteFile(MainWin:thandle;RemoteName,Verb:pchar):integer; stdcall;
var tempname:string;
Begin
//Запуск файла
result:=FS_EXEC_OK;
   tempname:= RemoteName;
if tempname='\[Запустить файл]' then
MessageBox (FindTCWindow,PAnsiChar(tempname),verb,MB_OK+MB_IconInformation);
End;

не могу разобраться как можно получать пути файлов, при их копировании в панель плагина.
Сейчас делаю так
Code:
 function FsPutFile(LocalName,RemoteName:pchar;CopyFlags:integer):integer; stdcall;
begin
//Копирование файла в файловую систему плагина
RemoteName:=LocalName;
result:=FS_FILE_OK;
end;

Файл копируется, никаких ошибок не вываливается, но в панели файл не появляется.
Подскажите, в какую сторону копать?

#2:  Author: CaptainFlintLocation: Москва PostPosted: Mon Oct 24, 2011 19:03
    —
zvyagaaa
"Копирование" является внутренней функцией плагина и должно реализовываться целиком и полностью разработчиком. Поскольку плагин предоставляет Тоталу содержимое виртуальной файловой системы, то эта файловая система должна где-то у плагина храниться. Когда Тотал запрашивает список через FsFindFirst/FsFindNext, плагин обращается к этой базе и отдаёт Тоталу актуальный список файлов. Когда пользователь хочет добавить новый файл, вызывается FsPutFile, и плагин должен обеспечить обновление содержимого базы, чтобы этот новый файл туда попал, а Тотал после этого снова обратится к плагину, перечитает список файлов и увидит, что новый файл там появился.

Как у тебя вообще сейчас реализованы FsFindFirst и FsFindNext?

#3:  Author: zvyagaaa PostPosted: Mon Oct 24, 2011 20:17
    —
Code:
function FsFindFirst(
  path :pchar;
  var FindData: tWIN32FINDDATA )
: thandle; stdcall;
begin
  FillChar( FindData, SizeOf( FindData ), 0 );
  StrPCopy( FindData.cFileName, '[Запустить файл]' );
  Result := 13;
end;

function FsFindNext(
  Hdl: thandle;
  var FindData:tWIN32FINDDATA )
: bool; stdcall;
begin
  Result := False;
end;


#4:  Author: CaptainFlintLocation: Москва PostPosted: Mon Oct 24, 2011 22:55
    —
zvyagaaa
Ну и откуда тут может появиться скопированный файл? Ты всегда возвращаешь Тоталу информацию, что у тебя ровно один объект с именем [Запустить файл]. Как же Тотал может в этой ситуации показать что-либо иное?

#5:  Author: zvyagaaa PostPosted: Tue Oct 25, 2011 04:56
    —
а как тогда? есть пример кода?

#6:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Oct 25, 2011 10:05
    —
Для начала, что должен делать плагин? Какие объекты он должен отображать? Для чего он?

Когда разберёшься, что будет храниться в файловой системе плагина, сразу станет понятно, список чего возвращать тоталу при запросе содержимого.

На FsFindFirst возвращаешь информацию о первом объекте, соответствующем запрашиваемому пути, на каждый вызов FsFindNext - очередной объект, пока не перечислишь все. Потом говоришь, что больше объектов нет. Например, если объекты у тебя хранятся тупо в массиве, то при возвращении очередного элемента увеличиваешь на 1 индекс в массиве, пока не дойдёшь до конца.

#7:  Author: zvyagaaa PostPosted: Tue Oct 25, 2011 10:54
    —
Quote:
Для начала, что должен делать плагин? Какие объекты он должен отображать? Для чего он?

Для пакетной обработки файлов. Объекты должен отображать - файлы (точнее ссылки на реальные файлы). Я вижу это так. Я копирую файлы на панель, потом жму на выполнить, список с панели обрабатывается. Как в Complex CD.

#8:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Oct 25, 2011 14:02
    —
В таком случае заведи себе массив (или динамический список, или очередь), куда добавляй файлы по FsPutFile, а по FsFindFirst/FsFindNext перечисляй содержимое массива. Инфу, которую тотал хочет получить по каждому файлу (структура WIN32FINDDATA), можно получить, вызывая виндовую функцию FindFirstFile, если передать ей путь к файлу.

#9:  Author: zvyagaaa PostPosted: Wed Oct 26, 2011 16:04
    —
с этим вопросом я разобрался, а подскажите как теперь мне сделать папку и все скопированные файлы, чтобы попадали в папку? с папкой не получается Sad
может кто-нибудь на пальцах объяснить как тут папки делать?

#10:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Oct 26, 2011 18:30
    —
Возвращаешь тоталу атрибут FILE_ATTRIBUTE_DIRECTORY у элементов, которые у тебя представляют папки. И когда тотал будет запрашивать их содержимое (это будет видно по пути при вызове FsFindFirst), перечисляешь уже не содержимое основной папки плагина, а этой подпапки.



Total Commander -> Написание плагинов для Total Commander


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

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group