Pfad aus Verknüpfung auslesen

Naja, der Compiler gibt nun keine Fehlermeldung mehr von sich,allerdings wird wohl der "else" Teil deines Code Beispiels ausgeführt,ich seh also keinen Pfad :-(

Des Weiteren scheint der Code nicht richtig zu funktionieren, denn egal welche Verknüpfung ich angebe, ich erhalte in keinen Falle die Pfad zur verlinkten Datei,um den es mir ja eigentlich geht ;)
 
Wie hast du denn maxpath festgelegt? und welcher Code geht nicht? Der aus dem Link, meiner oder beide in Combi? Und das, was bei meinem kleinen Schnipselchen rauskommt, ist ein langer Code nur mit leerzeichen oder wie muss ich mir das vorstellen?

lg Hellie
 
Bei dem Code,den ich im ersten Beispiel gepostet habe,steht ein Beispielaufruf dabei.Den hab ich verwendet, um den Code zu testen und dazu hab ich als Verknüpfung eine x-beliebige genommen.Die Daten dieser Verknüpfung werden in einem MemoFeld aufgelistet, jedoch wird mir dort niemals die Datei, welche das Ziel meiner Verknüpfung ist, angezeigt.Es wird mir lediglich der Pfad der Verknüpfung aufgelistet.
Ergo:
"FullPathAndNameOfLinkFile" wird angezeigt
"FullPathAndNameOfFileToExecute" wird leider nicht angezeigt

Wenn ich nun deinen Beispielcode benutze (Maxlength hab ich durch Max_Path ersetzt,dann gings), wird mir leider nicht einmal "FullPathAndNameOfLinkFile" angezeigt, also muss sich ein Fehler eingeschlichen haben, der immer auf deinen "else" Teil verweist.

Ich hoffe,dass du mich verstehst ^^
 
Nimm den else-Teil einfach raus. Dadurch wird der String verfälscht und es findet die Datei nicht mehr. Sorry, ich wusste nicht, dass das so geht. Aber bei mir zeigt es jetzt den Pfad zur auszuführenden Datei dann an...

lg Hellie
 
Hmpf...bei mir ned :-(

Code:
procedure TForm1.Button1Click(Sender: TObject);
const
  br = #13#10;
var
  LinkInfo: TShellLinkInfoStruct;
  s: string;
  i: integer;
  pfad: string;
  begin
    for i:=1 to Max_Path+1 do
      begin
        pfad:=GetDeskTopPath + '\' + ListView1.Items[0].Caption;
        if i<=length(pfad) then
          LinkInfo.FullPathAndNameOfLinkFile[i-1]:= pfad[i];
    end;
  FillChar(LinkInfo, SizeOf(LinkInfo), #0);
  GetLinkInfo(@LinkInfo);
  s := LinkInfo.FullPathAndNameOfLinkFile + br + LinkInfo.FullPathAndNameOfFileToExecute;
  Memo1.Lines.Add(s);
end;

Jetzt werden leider nur 2 leere Zeilen ins Memo geschrieben ohne den "else" Teil...
 
Code:
procedure TForm1.Button1Click(Sender: TObject);
const
  br = #13#10;
var
  LinkInfo: TShellLinkInfoStruct;
  s, pfad: string;
  i:integer;
begin
  FillChar(LinkInfo, SizeOf(LinkInfo), #0);
  for i:=1 to Max_Path+1 do
      begin
        pfad:=ListView1.Items[0].Caption;
        if i<=length(pfad) then
          LinkInfo.FullPathAndNameOfLinkFile[i-1]:= pfad[i];
    end;
  GetLinkInfo(@LinkInfo);
  showmessage(linkinfo.FullPathAndNameOfFileToExecute);
  s := LinkInfo.FullPathAndNameOfLinkFile + br + LinkInfo.FullPathAndNameOfFileToExecute;
  Memo1.Lines.Add(s);
end;

So geht das bei mir. Habe allerdings der Einfachheit halber in dieses Listview eingegeben. Ich schätze es lag an der falschen Reihenfolge, weil FillChar glaub ich alle Strings auf '' setzt (hab ich grad rausgelesen zumindest). Hoffe, es geht jetzt...

lg Hellie

PS: Jetzt speicher ich das wohl besser doch mal ^^
 
Mühsam ernährt sich das Eichhörnchen ^^

Bei mir kommt jetzt zumindest mal FullPathAndNameOfLinkFile ins Memo,aber der 2. Teil immer noch ned und die Showmessage bleibt auch leer...zum Hühner melken...
 

Anhänge

  • delphi.zip
    3,8 KB · Aufrufe: 59
Zuletzt bearbeitet:
Der Dateiname wird ja nur bis vor dem '.lnk' angezeigt, das gehört aber auch mit zum Dateinamen, deshalb findet es wieder die Datei nicht. Deshalb muss der String Pfad noch um '.lnk' ergänzt werden. Dann haut es bei mir wieder hin...

lg Hellie
 
Zurück