Announcement

Collapse
No announcement yet.

Original zu einer Verknüpfung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Original zu einer Verknüpfung

    Hallo wer kann helfen:
    Wie findet man zu einer Verknüpfung (*.LNK) die zugehörige Originaldatei?
    Peter

  • #2
    Ich habe ein Lösung gefunden:<br>
    <br>
    function GetLinkedFileName (Const aPath: String; VAR Link:TWin32FindData):String;<br>
    // zu einem Link (Extension LNK) die Originaldatei suchen <br>
    // Parameter: aPath: absoluter Pfad des Link<br>
    // Link: FindData Struktur des Link (etwa aus FindFirst ...<br>
    // Ergebnis: Original Dateiname inkl. Pfad bei Erfolg, sonst Leerstring<br>
    var<br>
    aObject : IUnknown;<br>
    aSLink : IShellLink;<br>
    aPFile : IPersistFile;<br>
    sDirectory : Array[0..MAX_PATH-1] OF Char;<br>
    wsFileName : WideString;<br>
    HRes: HResult;<br>
    Begin<br>
    Result := '';<br>
    FillChar(sDirectory, SizeOf(sDirectory), #0);<br>
    aObject := CreateComObject(CLSID_ShellLink);<br>
    // Verbindung zum IShellLink-Interface herstellen<br>
    aSLink := aObject as IShellLink;<br>
    aPFile := aObject as IPersistFile;<br>
    wsFileName := aPath+Link.cFileName;<br>
    Hres := aPFile.Load(PWChar(wsFileName),STGM_READ);<br>
    IF HRes <> S_OK Then Exit;<br>
    with aSLink do begin<br>
    // Resolve aktualisiert den LINK<br>
    Hres := Resolve(HWND(NIL),SLR_ANY_MATCH + SLR_NO_UI); //NO_UI verhindert PoUp (darum kann hWnd NIL sein)<br>
    IF HRes <> S_OK Then Exit;<br>
    // GetPath ermittelt das Original<br>
    Hres := GetPath(sDirectory,MAX_PATH,Link,SLGP_UNCPRIORITY );<br>
    IF HRes <> S_OK Then Exit;<br>
    Result := sDirectory;<br>
    end;<br>
    End;<br>

    Ic habe das Gefühl, es sollte auch einen einfacheren Weg geben, aber so gehts jedenfalls auch <br>
    Pete

    Comment


    • #3
      Hallo Peter,

      Dein Gefühl trügt Dich nicht, es geht viel einfacher: Über die Komponente TShellLink.

      Beispiel zum Auslesen einer Verknüpfung:

      <b>var Link : TShelllink;

      if OpenDialog.Execute then
      <br> begin
      <br> if ExtractFileExt(lowerCase(OpenDialog.FileName))='.l nk' then
      <br> begin
      <br> Link:=TShellLink.Create;
      <br> Link.LoadFromFile(OpenDialog.FileName);
      <br> Pfad:=Link.Path;
      <br> Para:=Link.Arguments;
      <br> Link.Free;
      <br> end;</b>

      Diese Komponente gibt es kostenlos bei: http://homepages.regio.net/Thorsten.Vitt/main.html

      Gruß,
      Christia

      Comment

      Working...
      X