Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - .lnk-Datei:Link zu einer Datei oder einem Ordner?


fuggaz - Sa 13.12.08 00:56
Titel: .lnk-Datei:Link zu einer Datei oder einem Ordner?
Hey,
Für ShellListView muss ich bei .lnk-Dateien differenzieren zw. denen, die auf eine Datei verweisen, und solchen, die auf Ordner verlinken.
Ist eine Datei verlinkt, dann deaktiviere ich AutoNavigate, wenn es ein Ornder ist aktiviere ich es.

Kann mir jemand bitte sagen wie das geht?
(Leider klappt es nicht mit der Abfrage if[...].isFolders[...])


jaenicke - Sa 13.12.08 01:20

Eine Möglichkeit wäre das Ziel der Verknüpfung auszulesen und dann zu schauen ob das ein Ordner ist.
http://www.swissdelphicenter.ch/de/showcode.php?id=970

Ob direkt in der .lnk Datei gespeichert ist, worum es sich bei dem Ziel handelt, weiß ich nicht.

// EDIT:
Es scheint da Unterschiede zu geben, neben dem Arbeitsverzeichnis, das bei Verknüpfungen zu Ordnern normalerweise leer ist, sind auch andere Teile der Datei unterschiedlich. Ob das am Typ des Ziels liegt und wenn ja ob das auch so einfach via Interface auszulesen ist, weiß ich aber nicht.


fuggaz - Sa 13.12.08 01:45

Hey,
Danke!!
Damit klappt das.
Das Arbeitsverzeichnis, wie du sagtest, ist leer.
Das kann ich dann einfach auslesen :-)


jaenicke - Sa 13.12.08 02:23

So meinte ich das eigentlich nicht, denn das Arbeitsverzeichnis kann auch bei Dateien leer sein. Das ist es nur normalerweise nicht. Das war eigentlich nur als Ergebnis des Dateivergleichs gemeint. ;-)

Ich meinte mit dem ersten Satz, dass es am besten wäre mit DirectoryExists zu prüfen ob das Ziel der Verknüpfung als Verzeichnis existiert.


fuggaz - Sa 13.12.08 04:17

achso ok.


fuggaz - Sa 13.12.08 15:03

noch ein Problem:

Wie wandel ich

Quelltext
1:
array[0..MAX_PATH] of Char;                    

in

Quelltext
1:
string                    

um?
Ich habe es schon mit einer Schleife versucht aber da wird anscheinend nichts ausgetauscht...


Quelltext
1:
2:
for wordpos:=1 to length(ShellListView1.SelectedFolder.PathName) do
      LinkInfo.FullPathAndNameOfLinkFile[wordpos]:=ShellListView1.SelectedFolder.PathName[wordpos];

FullPathAndNameOfLinkFile ist danach leer und die String-Variable nicht.

Wie wandele ich das um?


jaenicke - Sa 13.12.08 15:10

CopyMemory sollte helfen, hier findest du ein Beispiel dafür:
http://www.delphipraxis.net/post414811.html#414811


fuggaz - Sa 13.12.08 15:24

Wunderbar! Das klappt :-)