Pfad aus Verknüpfung auslesen

Jo,ich steh mal wieder im Wald und komm nicht weiter ^^

Ich suche derzeit Möglichkeiten (wobei ich mit einer schon zufrieden wäre ^^), wie ich den Zielpfad einer Verknüpfung auslesen kann. Dazu hab ich bereits mehrere Ansätze gefunden. Zum einen einen Code auf SwissDelphiCenter hier, der zwar wohl funktioniert, nur hab ich dabei ein Problem:

Ich lese per Schleife nach und nach Items einer ListView-Komponente ein (also die Pfade der Verknüpfungen), jedoch bekomme ich die Meldung "Inkompatible Typen: TListItem und String" und wie ich sowas konvertieren kann hab ich leider auch noch nicht ergründet *g*

Zum anderen hab ich in Foren gelesen, es ginge per IShellLink (der fertige Code verfährt auch nach dem Prinzip). Da hab ich mich dann auf die Suche gemacht, jedoch bei Google nicht wirklich Gutes auf Deutsch gefunden und in der MS SDK findet sich zwar genug Material, jedoch ist es für C++ geschrieben und dass ich den Code in Delphi umschreiben kann,bezweifle ich stark ;)

Ich bräuchte nun entweder Hilfe zum Thema IShellLink,möglichst mit Beispielen oder eine Anregung, wie ich ListView Items in Strings umwandeln kann.Bin für jegliche Hilfe dankbar ;)
 
In der Delphi-Hilfe steht was von Eigenschaften von TListItems, u.a. Caption. Ohne je damit gearbeitet zu haben: könnte es damit funktionieren? Oder über SubItems? k.a., vielleicht klappt es ja damit...

lg Hellie

PS: Hab mir nen Bissl was zusammengebatzt und es scheint über die Cption zu gehen (bei ner sehr ... öhm... rudimentären :-) ListView )...
 
Zuletzt bearbeitet:
Also ich sollte vielleicht noch erwähnen, dass die ListView im Style vsReport ist,ist eventuell auch relevant.

Jedenfalls, wenn ich die Caption des ersten Items ansprechen will mit ...
Code:
  LinkInfo.FullPathAndNameOfLinkFile := GetDeskTopPath + '\' + ListView1.Items[0].Caption;

...kommt "Inkompatible Typen: Array und String" :-(
Ich hab den oben beschriebenen Code benutzt und außer die Meldung kommt nichts weiteres. Mit der Hilfe zu TListItems befass ich mich nachher,vielleicht ergibt sich noch etwas ;)
 
Also bei mir geht es trotzdem. Wenn der Fehler in der Zeile liegt, liegt das entweder an der Delphi-Version (ich benutze D7) oder an der Deklaration von LinkInfo.FullPathAndNameOfLinkFile oder GetDeskTopPath würde ich sagen. Wären für mich die logischsten Erklärungen...

lg Hellie
 
Hmm...also LinkInfo.FullPathOfNameAndLinkFile verlangt ein Array, jedoch sind GetDesktopPath sowie ListView1.Items[0].Caption Strings. Wie kann ich daraus ein Array machen, damit das passt?
Ansonsten seh ich auch keinen Fehler ;)

PS Delphi7 ;)
 
Wenn es um den Code aus dem Link geht und LinkInfo vom Typ TShellLinkInfoStruct ist, dann gibt es zwei Wege:

Es ist ein Array of Char, also eine Zeichenkette. Die ist in der Länge beschränkt und deshalb hat man das Array genommen. Ich habe den Code nicht genau angeschaut, aber theoretisch könnte man für jedes Array[0..maxLength] of Char auch string[maxlength+1] schreiben (begrenzt beides auf eine bestimmte Anzahl). Damit müsste es also gehen.
Ansonsten kann man das ganze auch in einer Zählschleife unterbringen, die bis maxlength geht (von 0), und dann in einer einseitigen Verzewigung schauen, ob der String wirklich so lang ist, wenn das der Fall ist, übernimmt man das i.te Zeichen, ansonsten nimmt man einfach #32 (Leerzeichen), um den Char auszufüllen. Damit solltest du auf der sicheren Seite sein.

lg Hellie //die sich jetzt ins Bettchen fallen lässt
 
Code:
for i:=1 to maxLenght+1 do
begin
pfad:=GetDeskTopPath + '\' + ListView1.Items[0].Caption;
if i<=length(pfad) then
     LinkInfo.FullPathAndNameOfLinkFile[i-1]:= pfad[i]
else
     LinkInfo.FullPathAndNameOfLinkFile[i-1]:= ' ';
end;

Is jetzt während eines Telefonates entstanden, einfach ausprobieren, vielleicht geht es ja :-)

lg Hellie

PS: Wenn nicht oder wenn Fragen, noch mal melden ^^
 
Jo,da hab ich viel zu fragen und zwar:

Was ist "i"? Ein Zähler,also vermutlich Integer.
Was ist "pfad"? Als was muss ich diese Variable deklarieren? Array [0..xx] Of Char?
Außerdem versteh ich "maxlength+1" nicht (übrigens Buchstabendreher drinne ;)) MaxLength von was?

Edit:
Ok,pfad ist wohl ein String,aber das "MaxLength+1" kann ich noch nicht einordnen...
 
Hatte mich vertan, hieß maxpath im Code, auf den du verlinkt hattest. Der gibt die maximale Länge des Strings an, die der Pfad haben kann. Und Pfad ist einfach nur ein String, um den gesamten Pfad speichern zu können...

Klappt es denn?:confused:

lg Hellie
 
Zurück