FsContentGetDefaultView we wtyczce Total Commandera - problem

0

Witam,
Piszę wtyczkę (file system plugin - wfx) do TC, która wykorzystuje własne kolumny.
Nie rozumiem działania funkcji FsContentGetDefaultView.
Niezależnie od tego jak ją oprogramuję, w momencie uruchomienia mojej wtyczki, TC włącza widok własnych kolumn zapisany w pliku wincmd.ini.
Wygląda na to, że TC w ogóle nie wywołuje tej funkcji gdy w wincmd.ini jest zapisana sekcja [CustomFields] dotycząca mojej wtyczki.

W jaki sposób programowo zmienić widok własnych kolumn, bez używania narzędzia wbudowanego do TC?

0

Niewiele pomogę. Bo pod Delphi (chociaż pewnie piszesz to w czymś innym może) nie widziałem SDK do wszystkich rodzajów pluginów dla Total Commandera. Sam żadnego nie napisałem jedynie analizowałem sobie kod plugina do archiwów makebat, bo był pisany w Delphi. Jedyne co mogę doradzić, jeżeli tutaj nie dostaniesz odpowiedzi, bo widzę że pytałeś też na polskim forum Total Commandera, to może spróbuj i na forum http://www.ghisler.ch/board gdzie udziela się sam autor, ja czasami nawet od Niego dostawałem jakieś tam porady co do kodów w Delphi. Podejrzewam, że i poza nim są tam też ludzie którzy niejeden plugin analizowali czy napisali, więc moze warto spróbować zapytać, a nuż podzielą się swoją wiedzą. Powodzenia w tworzeniu :) A i sobie przypomniałem, jakby plugin był w Delphi albo jakbyś okiełznał API dla tych pluginów to przydał by mi się taki plugin właśnie do wyszukiwania, który pozwalał by jako wynik wyszukiwania podać tylko katalogi, jeśli wyszukiwaliśmy tylko na przykład pliki *.cfg z tekstem FOR_WINAPI. Po prostu chciałem mieć wyszukane katalogi z projektami w Delphi spełniającymi ten warunek. Jak zadałem takie pytanie na forum to polecili mi Script Content Plugin, a ja tam jak najdalej od jakiś wizual bejzikowych tworów, bo może jest prostsza metoda, niestety standardowy plugin "tc" CHYBA nie wyszuka samych katalogów zawierających pliki o jakimś rozszerzeniu z podanym w zakładce "Ogólne" tekstem, oraz do wyszukiwania *.cfg, a zaznaczenie w zakłądce "Zaawansowane" atrybutu Katalog - wyklucza znalezienie czego kolwiek. Musiałem sam sobie kombinować przy kopiowaniu takich katalogów do innej lokalizacji przerabiając plik *.bat wygenerowany właśnie przez inny plugin makebat.wcx, a fajnie by było jakby się dało przy użyciu plugina typu *.wdx.

0

2olesio
Nie ma znaczenia w czym się pisze wtyczki do TC. Nie jest do tego potrzebne żadne ekstra SDK ani API.
Wtyczka do TC to zwykła dll-ka z odpowiednio zmienionym rozszerzeniem. Można ją nawet skompresować UPX-em. W tej dll-ce po prostu oprogramowuje się funkcje, które potem wywołuje TC. Funkcje te dla poszczególnych rodzajów wtyczek są opisane w helpach na stronie programu. Są tam też pliki nagłówkowe, np fsplugin.h (dla C/C++) i fsplugin.pas (dla Delphi).
Programuję w Delphi więc z racji tego wtyczki do TC też robię w Delphi. Mam trochę doświadczenia z wfx i wlx.
Napisz program, który potrzebujesz w Delphi (ale najkrócej i najprościej jak się da, bez żadnych udziwnień) to spróbujemy z tego zrobić wtyczkę wfx.
Jeżeli rozumiesz po rosyjsku to poczytaj http://www.tckb.ru/wiki/%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_WFX-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0_%D0%BD%D0%B0_Borland_Delphi

0

Proszę moderatora aby zmienił słowa kluczowe commander wtyczki wfx total na TotalCommander wtyczki wfx.

0

Rosyjskiego nie znam ni cholery, a google translate pewnie i tak by dziwnie przetłumaczyło. O tym, że pluginy to dllki z innym rozszerzeniem to nie musisz mi tłumaczyć, bo na ogół taka jest idea pluginów, ze są to dllki, tylko ważne jest dla programu jakie konkretnie funkcje ekxportują. Dokładne deklaracje. Pisałem już proste pluginy dla Expressivo, XMPlay'a oraz WinAMP'a i coś tam dla AQQ. Na własny użytek. Także trochę znam temat. A do wcx'a widziałem źródła z tego makebat'a. Anyway, potrzebne są takie pliki API jak podałeś, o pliku fsplugin.pas nie wiedziałem. Natomiast jak coś możemy przenieść rozmowę na PW żeby nie wydłużać wątku, ale sądzę, że może komuś się jeszcze nasza wymiana zdan przyda. Ogólnie w Delphi mógłbym sobie napisać program do tego, a przynajmniej spróbować, ale wolę mieć to pod reką czyli używanym przeze mnie niemal zawsze podczas jakiejkolwiek pracy na moim komputerze Total Commandera. Chodzi o to żeby plugin *.wdx potrafił coś takiego, że naciskam Alt+F7, w zakładce "Ogólne" podaje jakiś plik do wyszukania albo rozszerzenie lub rozszerzenia, na przykład *.cfg i w polu "Znajdź tekst" jakiś tekst, a następnie wybieram plugin wfx i on sprawi, że jak wyszukiwarka znajdzie jakiś plik o takich założeniach to zwróci mi jako wynik ścieżkę z katalogiem (w oknie wyników będzie z domyślną ikonką żółtego folderu). Czyli na przykład znalazło tekst FOR_WINAPI w pliku C:\PROGRAM FILES (X86)\DELPHI7\PROJECTS\DEMOTYWATORY_DOWNLOADER_WINAPI\demotywatory_downloader.cfg, a jako rezultat mam nie ten plik, tylko samą ścieżkę C:\PROGRAM FILES (X86)\DELPHI7\PROJECTS\DEMOTYWATORY_DOWNLOADER_WINAPI, bo jak rozumiem do tego służą pluginy o rozszerzeniu *wdx. Jakbym zobaczył Twój kod w Delphi takiego plugina to już bym umiał ogarnąć temat. Chyba, że jest to trudne do zrobienia. A może znasz jakiś plugin o rozszerzeniu *.wdx już napisany w Delphi, którego kod byłby dostępny na totalcmd.net czy gdzieś indziej? Bo takiego nie szukałem, nie chciało mi się pobierać wszystkich możłiwych i sprawdzać czy mają źródła, a czasem o tym autorzy nie wspominają jak i o użytym języku do napisania. A i mi nie chodzi o uzyskiwanie swoich kolumn w widoku, chcę się tylko wspomóc przy wyszukiwaniu plików i wpłynąc na sposób ich wyświetlenia, a raczej elementów do wyświetlenia, o ile jest to możliwe. Dasz radę pomóc? Bo ja w Twoim problemie nie bardzo, raczej na anglojęzycznym oficjalnym forum Total Commandera powinni być w stanie coś lepiej Ciebie naprowadzić.

EDIT: znalazłem już: http://www.totalcmd.net/plugring/decwdx.html - póki co rozgryzam, ale jakbyś umiał mnie naprowadzić to proszę o odzew, jak nie - to również. Tylko widze, że będę musiał się wgłebić czy do działania pluginu potrzebne są na pewno te wszystkie moduły bo wolał bym aby mój plugin był jak najmniejszy objętościowo i optymalny, czyli najlepiej napisany w WinAPI na co ostatnio mam "zajawkę" i różne downloadery pisałem w WinAPI lub przepisałem jak w przypadku tego do Demotywatorów czy Wrzuty z VCL na WinAPI. Może potrzebne są tylko kluczowe definicje struktur oraz eksportowane rzeczy i nie musi być taki spucnnięty plik wynikowy z pluginem, nawet po UPX'nięciu.

EDIT2: ech przepraszam Cie, moje gapiostwo, nie dostrzegłem dokładnie o jaki typ pluginu pytasz, nie wiem co mi się na początku ubzdurało że FSInit jest również w wdx i o niego pytasz. Ale nic, może komuś się nasze wypociny na coś przydadzą. Jak miałbyś jakieś doświadczenie w tworzeniu *.wdx to daj znać. Póki co mało mi się podoba, że to korzysta z inców Jedi - nie wiem jeszcze po co, jak i wielu modułów, ale może da się prościej, przede wszystkim w WinAPI na czym mi zależy.

0

Tak jak pisałem mam niewielkie doświadczenie w wfx i wlx. Z pozostałymi nie próbowałem.
Na szybko napisałem przykład bardzo prostej wtyczki wfx, która wyszukuje pliki w podanym katalogu a wynik umieszcza w panelu TC.

library wfx_test;

uses
  fsPlugin,
  Windows,
  SysUtils;

var
  sr:TSearchRec;
  PathToSearch:string;

{$E wfx}
{$R *.res}

function FsInit(PluginNr:integer; pProgressProc:tProgressProc; pLogProc:tLogProc;
                pRequestProc:tRequestProc):Integer; stdcall;
begin
  Result:=0;
end;

function AddToResult:TWIN32FINDDATA;
begin
  with Result do
  begin
    dwFileAttributes:=sr.Attr;
    nFileSizeHigh:=0;
    nFileSizeLow:=sr.Size;
    StrPCopy(cFileName,sr.Name);
  end;
end;

function FsFindFirst(path:pchar; var FindData:TWIN32FINDDATA):THandle; stdcall;
begin
  if FindFirst(PathToSearch,faAnyFile,sr)=0 then
  begin
    FindData:=AddToResult;
    Result:=0;
  end
  else Result:=INVALID_HANDLE_VALUE;
end;

function FsFindNext(Hdl:THandle; var FindData:TWIN32FINDDATA):bool; stdcall;
begin
  if FindNext(sr)=0 then
  begin
    FindData:=AddToResult;
    Result:=True;
  end
  else Result:=False;
end;

function FsFindClose(Hdl:thandle):Integer; stdcall;
begin
  FindClose(sr);
  Result:=0;
end;

exports
  FsInit,
  FsFindFirst,
  FsFindNext,
  FsFindClose;

begin
  PathToSearch:='C:\Windows\*.bmp';
end.

Plik fsPlugin.pas wyciągnij sobie z helpa, który można pobrać ze strony TC.
Ponadto polecam przeanalizować kody, które są w linku podanym w poprzednim poście. Wprawdzie artykuł jest w języku rosyjskim ale przykładowe kody w Delphi.

0

Ok. A odpowidzieli Tobie na forum? Bo chyba tam się coś popsuło w sensie pomocy. Kiedyś mi szybko i kilka razy odpowiadał sam Ghisler albo ktoś inny, jak pytalem o developerskie zagadnienia, a teraz cisza. Zalożyłem wczoraj temat: http://www.ghisler.ch/board/viewtopic.php?p=227781#227781 i jak widzisz poradziłem sobie, da się jednak napisać taki plugin jak chciałem, ale trzeba wykorzystać zewnętrzny plik - najlepiej typu ini do pobrania dodatkowych danych. Do tego posta dołączam zip którym po wejściu w archiwum sam się instaluje jeżeli to potwierdzimy. Więcej szczegółów w postcie pod adresem podanym powyżej. I wiem, że mój angielski jest taki sobie, ale coż poradzić. Za stary jestem na dokształcanie się w piśmie i mowie, to co wiem uważam za wystarczające :) I dodam, że gdyby nie kod tego plugina do opisów zawartych w systemie NTFS dla plików i katalogów to bym nie napisal tak zgrabnego pluginu pod WinAPI, które dla mnie rządzi i ostatnio staram się głownie w nim rzeźbić pod Delphi. Ok, to kończę rozpiskę. I może komuś się przyda po lekturze tego wątku, mój albo Twój kod. A może i Ty znajdziesz jednak pomoc na forum, może spróbuj e-mailowo poprosić Ghislera i poczekać na odpowiedź. A może jak ja znajdziesz źródło plugina wfx, tak jak ja znalazłem wdx, ktory naprowadzi Ciebie na osiągnięcie celu :)

EDIT: w poprzednim źródłe był błąd. Z dokumentacji wynika, że FieldValue powinno być wskaźnikiem i tak też zostało poprawione, teraz ponownie usunąłem i dodałem sowją odpowiedź. Jednak dołączony plik miał już jedno pobranie, więc zainteresowaną osobę ptoszę o ponowne pobranie dołaczonego pliku. I teraz wrzuciłem plugin pod inną nazwą - nie "autopormocyjną" ;) Dodałem readme.txt. A i może opublikuje ów plugin jak dostanę już dostęp do totalcmd.net na który czekam. Plugin już dostępny na: http://www.totalcmd.net/plugring/fileindir.html i wrzuciłem wersję 1.1, bo przez niedostateczne testy wcześniej nie zauważyłem, że trzeba dodać funkcję FindClose, bo inaczej po wyszukiwaniu plików dostęp do zawartości przeszukanych katalogów jest zablokowany.

0

Sam sobie odpowiedziałem http://ghisler.ch/board/viewtopic.php?p=228351#228351 ale wcale nie jestem zadowolony z takiego rozwiązania.

0

Czytałem. Ale może jest taka możliwość żeby się w przyszłości nie musiał restartować Total Commander i od razu działało to co chcesz, o ile dobrze zrozumiałem powód dla którego nie jesteś zadowolony. Tylko musiał byś to zaproponować pytając o możliwość na forum sugestii. Ja się nie mogę doprosić Ghislera by w nowych wersjach, w polskim pliku językowym zamienił 5664="Wpisz do okna na 5664="Wpisz do okn&a". Niby szczegół i można to zrobić ręcznie po instalacji, ale skoro klawisz w oknie wyszukiwanie, w oryginalnej wersji ma przypisaną literkę do skrotu to dlaczego ma jej nie mieć w polskiej wersji językowej, tymbardziej, że lewy Alt + A jest łatwo wcisnąć, a przeważnie po to się wyszukuje pliki czy katalogi aby wypisać wyniki do okna. Przynajmnie ja to robię najczęśćiej właśnie po to. Może jednak Ty ze swoją sugestią się przebijesz. Bo o ile pamiętam, ja na swoją sugestię nie dostałem nawet lakonicznej odpowiedzi, że "nie zrobię tego, bo cośtam".

0

Fakt. Najlepiej żeby user nie musiał restartować TC.
Poczekam jeszcze, może ktoś się odezwie.

olesio napisał(a)

Ja się nie mogę doprosić Ghislera by w nowych wersjach, w polskim pliku językowym zamienił...

Ja myślę, że w tej sprawie należałoby dotrzeć do tłumacza.

0
pelsta napisał(a)

Ja myślę, że w tej sprawie należałoby dotrzeć do tłumacza.

Może i tak, ale za ostateczny wygląd programu, jego funkcjonalność bez wtyczek oraz zawartość instalki odpowiada Ghisler. Odgrzebałem swoją sugestię. Jest tutaj: http://www.ghisler.ch/board/viewtopic.php?t=23815 i jak widzisz nawet uzasadniłem swoją prośbę, tym że w wersji angielskiej jest takowy skrót. Niby nie problem wyedtować sobie plik o jeden znak, przeładować język i mieć to wedle swojego "widzimisię", ale powinno to byś zrobione na stałe - podejrzewam, że nie tylko dla mojej wygody.

1 użytkowników online, w tym zalogowanych: 0, gości: 1