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

как получить пути в FS плагине

Добавлено: Пн окт 24, 2011 17:05
zvyagaaa
Добрый день, хочу сделать FS плагин, сейчас разбираюсь, на дельфи. Вроде бы разобрался с обработкой нажатия на "файл" в окне WFS

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

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;
не могу разобраться как можно получать пути файлов, при их копировании в панель плагина.
Сейчас делаю так

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

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

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

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

Добавлено: Пн окт 24, 2011 20:17
zvyagaaa

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

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;


Добавлено: Пн окт 24, 2011 22:55
CaptainFlint
zvyagaaa
Ну и откуда тут может появиться скопированный файл? Ты всегда возвращаешь Тоталу информацию, что у тебя ровно один объект с именем [Запустить файл]. Как же Тотал может в этой ситуации показать что-либо иное?

Добавлено: Вт окт 25, 2011 04:56
zvyagaaa
а как тогда? есть пример кода?

Добавлено: Вт окт 25, 2011 10:05
MVV
Для начала, что должен делать плагин? Какие объекты он должен отображать? Для чего он?

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

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

Добавлено: Вт окт 25, 2011 10:54
zvyagaaa
Для начала, что должен делать плагин? Какие объекты он должен отображать? Для чего он?
Для пакетной обработки файлов. Объекты должен отображать - файлы (точнее ссылки на реальные файлы). Я вижу это так. Я копирую файлы на панель, потом жму на выполнить, список с панели обрабатывается. Как в Complex CD.
Изображение

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

Добавлено: Ср окт 26, 2011 16:04
zvyagaaa
с этим вопросом я разобрался, а подскажите как теперь мне сделать папку и все скопированные файлы, чтобы попадали в папку? с папкой не получается :(
может кто-нибудь на пальцах объяснить как тут папки делать?

Добавлено: Ср окт 26, 2011 18:30
MVV
Возвращаешь тоталу атрибут FILE_ATTRIBUTE_DIRECTORY у элементов, которые у тебя представляют папки. И когда тотал будет запрашивать их содержимое (это будет видно по пути при вызове FsFindFirst), перечисляешь уже не содержимое основной папки плагина, а этой подпапки.