Sign in Join
Wiki copytemporary

Filelink/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Filelink/de

OldNewLine
1+\
2+Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].\
3+\
4+Dieses Tutorial handelt von der Windowsprogrammierung.\
5+Dieses Tutorial zeigt, wie man unter Windows einen Dateilink erstellt.\
6+\
7+Folgende Units werden dafür benötigt:
8+
9+``` pascal
10+uses
11+ Registry, ActiveX, ComObj, ShlObj, SysUtils;
12+```
13+
14+\
15+Um der Funktion mitzuteilen, wo der Link gespeichert werden soll wird eine Aufzählung verwendet.\
16+Diese Aufzählung muss je nachdem wo die Funktion aufgerufen wird entweder im interface oder im implementation Abschnitt der Unit deklariert werden.\
17+Definition der Aufzählung:
18+
19+``` pascal
20+type
21+ ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);
22+```
23+
24+\
25+Die Funktion für das Erstellen eines Links (Dateilinks) sieht wie folgt aus:
26+
27+``` pascal
28+// Diese Funktion arbeitet mit den Daten des aktuellen Users
29+function funErstelleLink( // Funktionsname
30+ const strQuelldatei: string; // Pfad und Name der Originaldatei
31+ const enuSpeicherort: ShortcutType; // Wo soll der Shortcut gespeichert werden
32+ const strUnterverzeichnis: string = ''; // Optional: Alternativer Pfad zum
33+ // speichern des Links
34+ const strArbeitsverzeichnis: string = ''; // Optional: Pfad oder Verzeichnis in dem
35+ // das Programm arbeiten soll
36+ const strParameter: string = ''; // Optional: Übergabeparameter an das Programm
37+ const strBeschreibung: string = ''; // Optional: Beschreibung des Shortcuts
38+ const strIconDatei: string = ''; // Optional: Datei, die das Icon enthält
39+ const intIconNummer: integer = 0 // Optional: Das wievielte Icon das aus
40+ // der Icondatei genommen werden soll
41+ // (Die Zählung der Icons begint bei 1)
42+ ): string;
43+
44+const
45+ SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer';
46+ QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv';
47+
48+var
49+ MyObject: IUnknown;
50+ MySLink: IShellLink;
51+ MyPFile: IPersistFile;
52+ Reg: TRegIniFile;
53+ strVerzeichnis: string = '';
54+ strLinkName: string = '';
55+ wstrDateiname: WideString = '';
56+
57+begin
58+
59+ Result := '';
60+
61+ // Erstellt die Objekte
62+ MyObject := CreateComObject(CLSID_ShellLink);
63+ MySLink := MyObject as IShellLink;
64+ MyPFile := MyObject as IPersistFile;
65+
66+ // Erstellt den Namen des Links
67+ strLinkName := ChangeFileExt(strQuelldatei, '.lnk');
68+ strLinkName := ExtractFileName(strLinkName);
69+
70+ // Liest den Speicherort aus der Registry aus
71+ if enuSpeicherort = _QUICKLAUNCH then
72+ begin
73+ Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
74+ try
75+ strVerzeichnis := Reg.ReadString('MapGroups', 'Quick Launch', '');
76+ finally
77+ Reg.Free;
78+ end;
79+ end
80+ else
81+ begin
82+ Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT);
83+ try
84+ case enuSpeicherort of
85+ _OTHERFOLDER: strVerzeichnis := strUnterverzeichnis;
86+ _DESKTOP: strVerzeichnis := Reg.ReadString('Shell Folders', 'Desktop', '');
87+ _STARTMENU: strVerzeichnis := Reg.ReadString('Shell Folders', 'Start Menu', '');
88+ _SENDTO: strVerzeichnis := Reg.ReadString('Shell Folders', 'SendTo', '');
89+ end;
90+ finally
91+ Reg.Free;
92+ end;
93+ end;
94+
95+ // Falls etwas schief lief ist das Programm hier zu Ende
96+ // ein Link wird dabei nicht erstellt
97+ if strVerzeichnis = '' then
98+ exit;
99+
100+ // Übergibt den Objekten die entsprechenden Parameter
101+ MySLink.SetPath(PChar(strQuelldatei));
102+ MySLink.SetArguments(PChar(strParameter));
103+ MySLink.SetDescription(PChar(strBeschreibung));
104+ // Wenn die angaben zum Icon plausibel sind werden Sie übernommen
105+ // andernfalls werden die Standardeinstellungen genommen
106+ if (strIconDatei <> '') and (intIconNummer > 0) then
107+ MySLink.SetIconLocation(PChar(strIconDatei), intIconNummer);
108+ // Legt fest, in welchem Verzeichnis der Link gespeichert wird
109+ if (strUnterverzeichnis <> '') and (enuSpeicherort <> _OTHERFOLDER) then
110+ wstrDateiname := strVerzeichnis + '\' + strUnterverzeichnis + '\' + strLinkName
111+ else
112+ wstrDateiname := strVerzeichnis + '\' + strLinkName;
113+ // Legt fest, in welchem Verzeichnis das Programm ausgeführt wird
114+ if strArbeitsverzeichnis = '' then
115+ MySLink.SetWorkingDirectory(PChar(ExtractFilePath(strQuelldatei)))
116+ else
117+ MySLink.SetWorkingDirectory(PChar(strArbeitsverzeichnis));
118+
119+ // Erstellt den Link
120+ MyPFile.Save(PWideChar(wstrDateiname), False);
121+ // Übergibt den Pfad des Links als Rückgabewert
122+ Result := string(wstrDateiname);
123+
124+end;
125+```
126+
127+\
128+Die Funktion kann wie folgt aufgerufen werden.\
129+
130+``` pascal
131+funErstelleLink(
132+ 'E:\Test\Test.Exe', // Pfad und Name der Originaldatei
133+ _DESKTOP, // Hier soll der Link gespeichert werden
134+ '', // Optional: Ein alternativer Pfad zum speichern des Links
135+ '', // Optional: Das Arbeitsverzeichnis des Programms
136+ '', // Optional: Übergabeparameter an das Programm
137+ 'Dies ist ein Test', // Optional: Eine Beschreibung des Shortcuts
138+ 'E:\Test\Test.Exe', // Optional: Eine Datei, die das alternative Icon enthält
139+ 2 // Optional: Das Icon das aus der Icondatei angezeigt werden soll
140+ // (Die Zählung der Icons beginnt bei 1)
141+ );
142+```
143+
144+---
145+*From the Free Pascal wiki, page "Filelink/de", as it stood on 2020-02-15 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history