Sign in Join
Wiki copytemporary

Filelink/de: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

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