Entwickler-Ecke

Dateizugriff - Im Dateidialog eine Verknüpfung verfolgen


Peter18 - Di 10.11.09 16:06
Titel: Im Dateidialog eine Verknüpfung verfolgen
Ein freundliches Hallo an alle,

ich möchte im Datei-öffnen-Dialog einer Verknüpfung (.lnk) folgen, z.B. zu einem anderen Ordner. Im Windows Explorer klappt das hervorragend nur leider in Delphi 4 bisher nicht. Gibt es eine Procedure oder Systemaufruf mit dem ich den Pfad bekomme oder der Pfad umgestellt wird?

Dank euch im Voraus und Grüße von der Nordsee

Peter


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 15.09.2011 um 18:47


Peter18 - Do 15.09.11 17:13

Ein freundliches Hallo an alle,

für diejenigen, die das gleiche Problem vor sich herschieben, hier die Lösung:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure GetLinkInfo(const LinkName: Stringvar LinkObject,Arguments,Description: String);
var
  IObject        : IUnknown;
  ILink           : IShellLink;
  IFile           : IPersistFile;
  sObj,sArg,sDcr : Array [0..Max_Path] of Char;
  Find           : WIN32_FIND_DATA;
  LinkFile       : WideString;
  h               : THandle;

begin
  LinkFile:= LinkName;
  IObject := CreateComObject(CLSID_ShellLink);
  ILink   := IObject as IShellLink;
  IFile   := IObject as IPersistFile;

  h := FindFirstFile(PChar(LinkName), Find);
  If h <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(h);
    IFile.Load(PWChar(LinkFile), STGM_READ);
    ILink.GetPath(@sObj, Max_Path, Find, SLGP_RAWPATH);
    ILink.GetArguments(@sArg, Max_Path);
    ILink.GetDescription(@sDcr, Max_Path);
  end;
  LinkObject  := sObj;
  Arguments    := sArg;
  Description := sDcr;
end;

Sie ist sehr tief in der Hilfe versteckt. Da muß man lange und tief graben.

Ich hoffe damit jemanden helfen zu können und sende freundliche Grüße von der Nordsee :D

Peter