Страница 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), перечисляешь уже не содержимое основной папки плагина, а этой подпапки.