Entwickler-Ecke

Dateizugriff - Erklärung zum FAQ Beitrag


kaiserbert - Sa 24.07.04 15:45
Titel: Erklärung zum FAQ Beitrag
Hallo,

könnte mir bitte Jemand bitte den FAQ Beitrag

http://www.delphi-forum.de/viewtopic.php?p=64542

erklären, habe einige Parameter die der Funktion übergeben werden nicht
verstanden

Hier ncoh mal der Code aus dem Faq:

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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
unit uLinkFile;

interface

  function LinkFileExists(ID: Integer; var LinkPath: String): Boolean;
  function LinkFile(ID: Integer; Link: Boolean; Param: String): Boolean;

implementation

uses
  Windows, ComObj, ActiveX, SysUtils, Shlobj;

{ID's (kleine Auswahl) 
  CSIDL_STARTUP = Autostart
  CSIDL_DESKTOP = Desktop
  CSIDL_SENDTO = Senden an
  CSIDL_STARTMENU = Startmenü
  CSIDL_PROGRAM_FILES = Programme
  ...
}


  {Liefert den Pfad eines virtuellen Ordners}
function SpecialDirectory(ID: Integer): String;
var
  pidl : PItemIDList;
  Path : PChar;
begin
  if SUCCEEDED(SHGetSpecialFolderLocation(0, ID, pidl)) then begin
    Path := StrAlloc(max_path);
    SHGetPathFromIDList(pidl, Path);
    Result := String(Path);
    if Result[Length(Result)] <> '\' then Result := Result + '\';
  end else Result := '';
end;

  {Erstellt eine Verknüpfung in einem Ordner - LANG}
procedure CreateShortCut(ShortCut, Application, Parameters, WorkDir: String;
  SW_State: Integer; IconFile: String; IconIndex: Byte);
var
  SCObject: IUnknown;
  SCSLink: IShellLink;
  SCPFile: IPersistFile;
  WFName: WideString;
begin
  SCObject := CreateComObject(CLSID_ShellLink);
  SCSLink := SCObject as IShellLink;
  SCPFile := SCObject as IPersistFile;
  with SCSLink do begin
    SetPath(PChar(Application));
    SetArguments(PChar(Parameters));
    SetWorkingDirectory(PChar(WorkDir));
    SetShowCmd(SW_State);
    SetIconLocation(PChar(IconFile), IconIndex);
  end;
  WFName := ShortCut;
  SCPFile.Save(PWChar(WFName), False);
end;

  {Prüft ob Link bereits vorhanden}
function LinkFileExists(ID: Integer; var LinkPath: String): Boolean;
begin
  LinkPath := SpecialDirectory(ID) +
    ExtractFileName(ChangeFileExt(ParamStr(0), '.lnk'));
  Result := FileExists( LinkPath );
end;

  {Erstellt eine Verknüpfung in einem Ordner - KURZ}
function LinkFile(ID: Integer; Link: Boolean; Param: String): Boolean;
var
  LinkPath: String;
begin
  Result := LinkFileExists(ID, LinkPath);
  if Link then begin if not FileExists(LinkPath) then
    CreateShortCut(LinkPath, ParamStr(0), Param, ExtractFilePath(ParamStr(0)),
      SW_SHOWNORMAL, ParamStr(0), 0);
  end else DeleteFile(LinkPath);
end;


(*Dann kommt da noch*)
uses Shlobj {Shlobj für die Konstanten};

  {CheckBox setzten}
procedure TForm1.FormCreate(Sender: TObject);
var
  Dummy: String;
begin
  CheckBox_Autostart.Checked := LinkFileExists(CSIDL_STARTUP, Dummy);
end;

  {Verknüpfung erstellen oder löschen (abhängig von CheckBox)}
procedure TForm1.CheckBox_AutostartClick(Sender: TObject);
begin
  LinkFile(CSIDL_STARTUP, CheckBox_Autostart.Checked, '-parameter');
end;



1.)Wofür steht die Variable dummy in Zeile 86?
Ist das etwa der Pfad zu der verknüpfenden Anwendung?
2.)Was verbirgt sich hinter CSIDL_STARTUP ?
Ist das eine Systemvariable, die das System in eine Integer Zahl umsetzt?
3.)Wofür steht die Variable LinkPath in Zeile 70 ?
Müsste doch das gleiche wie die Variable dummy sein?
4.)Was soll in zeile 94 für '-parameter' übergeben werden?


mfg bert


Matthias-K - Mo 26.07.04 00:22

die dummy variable ist einfach nur eine variable, könnte auch den namen "xyz" haben. wenn du dir die funktion LinkFileExists einmal näher betrachtest, dann wird dir klar, was diese variable zu tun hat.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function LinkFileExists(ID: Integer; var LinkPath: String): Boolean;
begin
  LinkPath := SpecialDirectory(ID) +
    ExtractFileName(ChangeFileExt(ParamStr(0), '.lnk'));
  Result := FileExists( LinkPath );
end;


kurz gesagt, es ist der Pfad der zu verknüpfenden anwendung.

am anfang der unit steht das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
{ID's (kleine Auswahl) 
  CSIDL_STARTUP = Autostart
  CSIDL_DESKTOP = Desktop
  CSIDL_SENDTO = Senden an
  CSIDL_STARTMENU = Startmenü
  CSIDL_PROGRAM_FILES = Programme
  ...
}


CSIDL_STARTUP ist einfach die ID für den autostartordner

ja, linkpath ist das selbe wie dummy! (es sei den, ich hab den code falsch verstanden.)

für die 4. frage: schau dir dir funktion "createshortcut" an, zerpflücke diesen code, und versuche mal nachzuvollziehen, was dieser parameter macht.

mfg, matthias