pliki LNK - odczyt ścieżki

0

Zastanawiam się jak pobrać ścieżkę do pliku z pliku "lnk" (czyli plik skrótu).
Otworzyłem skrót w notatniku i widzę, że pokazuje ścieżki itd (w tym krzaki, a dodatkowo wszystko rozdzielone "wieloma spacjami" (choć nie wiem co to za znaki, bo pewnie nie jest to spacja, a coś, co tylko notatnik czyta tak)...

Dlaczego, gdy ładuję np. 1000 znaków do bufora (tablicy) i chcę wszystkie 1000 wyświetlić w Memo to wyświetli mi (gdy akurat jest ciąg znaków) tylko kilka znaków, czasem krzaki, czasem ścieżkę do pliku, w zależności, gdzie ustawię "kursor" w pliku (lub znajdę ścieżkę za pomocą POS i od tego miejsca zacznę czytać nawet i wszystkie znaki to i tak tylko wyświetli mi samą ścieżkę, a po niej wszystko utnie, jakby blokował się na tych "spacjach")...

  1. Czy da radę w memo wyświetlić cały plik załadowany do bufora (tablicy)?, czy tylko tę część wskazaną przeze mnie, tzn. POS ścieżki, albo Seek w miejscu ścieżki i wyskoczy tylko ciąg znaków do "spacji" :-/

  2. ścieżka w pliku jest różnej długości więc jak określić jej położenie? Dać np. zmienną Pozycja1: Integer, użyć: Pozycja1:= Pos(':', bufor); a następnie PosEx by znalazł drugą pozycję :</b> (czyli fragment ścieżki) i gotowe? Ten sposób zaraz przetestuję i chyba się sprawdzi... (bo w notatniku widzę, że pierwsze :</b> to ścieżka do dysku, a drugie :</b> to ścieżka do pliku więc chyba nie będzie problemu z wyciąganiem ścieżek ze skrótów.

Jeszcze jestem ciekaw co to są te niby "spacje", że jak Memo, czy cokolwiek się na to natyka to przestaje dalej czytać, irytujące to :-[
Dałoby radę je wywalić? np. StringReplace i znak tego odstępu (nie wiem co to, #0, czy co innego, nie mam pojęcia o tym), ewentualnie odczytać tak jak to czyta notatnik, razem z tymi odstępami.

</li> </ol>

Proszę o pomoc.

//edit
Dobra, napisałem wyciąganie ścieżek z *.lnk i działa, po Pos, PosEx użyłem Copy, by skopiować z bufora ścieżkę z pozycji uzyskanej przez (PosEx - 1). Zwraca pełną ścieżkę.

Jednak nadal jestem ciekawy, dlaczego tych "odstępów" nie można czytać, dlaczego to na odstępie program kończy czytanie.

0

Nie kończy czytania, a kończy wyświetlanie. Czcionki z reguły nie mają zdefiniowanej obsługi znaków o numerze < 32, stąd nie wyświetla. Otwórz sobie plik hexedytorem, to zobaczysz dokładny format.

0

to jak odczytać wszystko?

//a hexedytor jakiś pobrałem, ale zamiast skrótów to otwiera mi plik ze ścieżki skrótu, chyba autor nie przewidział, że będę chciał *.lnk otworzyć ;-), pobrałem drugi i to samo
//Pewnie to będą #0
//to co, mam StringReplace użyć by znaki od #0 do #31 pozamieniało na coś?

0
pan_smierci napisał(a)

ta hexedytor jakiś pobrałem, ale zamiast skrótów to otwiera mi plik ze ścieżki skrótu, chyba autor nie przewidział, że będę chciał *.lnk otworzyć ;-), pobrałem drugi i to samo
Zmień rozszerzenie z lnk za coś innego.

0

pan_smierci: a po co tak kombinujesz - zamiast wpisać w google delphi link i z
tej strony http://www.delphipages.com/forum/showthread.php?t=151076 sobie
poprawić kod żeby był procedurą i pokazywał to co chcesz. Ja sprawdziłem go na
skrórcie od Gadu-Gadu, pokazał mi w Edit1 element docelowy, a w Edit3 katalog
roboczy. Aby kod zadziałał w uses trzeba mieć moduły ActiveX, ShlObj, ComObj i
pozbyć się tego typu ktory jest jako wynik funkcji, bo w Delphi 7 takiego nie ma.
A i poza tym jakiegoś badziewnego HexEdytora używasz, skoro otwiera Tobie on
to od czego prowadzi plik *.lnk, a nie sam lnk. Polecam Hiew, z chyba c0rk.org

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