Filelink/de
Dieser Artikel behandelt ausschließlich Windows.
Siehe auch: Multiplatform Programming Guide/de
│
Deutsch (de) │
English (en) │
Zurück zu den Zusätzlichen Informationen.
Dieses Tutorial handelt von der Windowsprogrammierung.
Dieses Tutorial zeigt, wie man unter Windows einen Dateilink erstellt.
Folgende Units werden dafür benötigt:
uses
Registry, ActiveX, ComObj, ShlObj, SysUtils;
Um der Funktion mitzuteilen, wo der Link gespeichert werden soll wird eine Aufzählung verwendet.
Diese Aufzählung muss je nachdem wo die Funktion aufgerufen wird entweder im interface oder im implementation Abschnitt der Unit deklariert werden.
Definition der Aufzählung:
type
ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);
Die Funktion für das Erstellen eines Links (Dateilinks) sieht wie folgt aus:
// Diese Funktion arbeitet mit den Daten des aktuellen Users
function funErstelleLink( // Funktionsname
const strQuelldatei: string; // Pfad und Name der Originaldatei
const enuSpeicherort: ShortcutType; // Wo soll der Shortcut gespeichert werden
const strUnterverzeichnis: string = ''; // Optional: Alternativer Pfad zum
// speichern des Links
const strArbeitsverzeichnis: string = ''; // Optional: Pfad oder Verzeichnis in dem
// das Programm arbeiten soll
const strParameter: string = ''; // Optional: Übergabeparameter an das Programm
const strBeschreibung: string = ''; // Optional: Beschreibung des Shortcuts
const strIconDatei: string = ''; // Optional: Datei, die das Icon enthält
const intIconNummer: integer = 0 // Optional: Das wievielte Icon das aus
// der Icondatei genommen werden soll
// (Die Zählung der Icons begint bei 1)
): string;
const
SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer';
QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv';
var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
Reg: TRegIniFile;
strVerzeichnis: string = '';
strLinkName: string = '';
wstrDateiname: WideString = '';
begin
Result := '';
// Erstellt die Objekte
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
// Erstellt den Namen des Links
strLinkName := ChangeFileExt(strQuelldatei, '.lnk');
strLinkName := ExtractFileName(strLinkName);
// Liest den Speicherort aus der Registry aus
if enuSpeicherort = _QUICKLAUNCH then
begin
Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT);
try
strVerzeichnis := Reg.ReadString('MapGroups', 'Quick Launch', '');
finally
Reg.Free;
end;
end
else
begin
Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT);
try
case enuSpeicherort of
_OTHERFOLDER: strVerzeichnis := strUnterverzeichnis;
_DESKTOP: strVerzeichnis := Reg.ReadString('Shell Folders', 'Desktop', '');
_STARTMENU: strVerzeichnis := Reg.ReadString('Shell Folders', 'Start Menu', '');
_SENDTO: strVerzeichnis := Reg.ReadString('Shell Folders', 'SendTo', '');
end;
finally
Reg.Free;
end;
end;
// Falls etwas schief lief ist das Programm hier zu Ende
// ein Link wird dabei nicht erstellt
if strVerzeichnis = '' then
exit;
// Übergibt den Objekten die entsprechenden Parameter
MySLink.SetPath(PChar(strQuelldatei));
MySLink.SetArguments(PChar(strParameter));
MySLink.SetDescription(PChar(strBeschreibung));
// Wenn die angaben zum Icon plausibel sind werden Sie übernommen
// andernfalls werden die Standardeinstellungen genommen
if (strIconDatei <> '') and (intIconNummer > 0) then
MySLink.SetIconLocation(PChar(strIconDatei), intIconNummer);
// Legt fest, in welchem Verzeichnis der Link gespeichert wird
if (strUnterverzeichnis <> '') and (enuSpeicherort <> _OTHERFOLDER) then
wstrDateiname := strVerzeichnis + '\' + strUnterverzeichnis + '\' + strLinkName
else
wstrDateiname := strVerzeichnis + '\' + strLinkName;
// Legt fest, in welchem Verzeichnis das Programm ausgeführt wird
if strArbeitsverzeichnis = '' then
MySLink.SetWorkingDirectory(PChar(ExtractFilePath(strQuelldatei)))
else
MySLink.SetWorkingDirectory(PChar(strArbeitsverzeichnis));
// Erstellt den Link
MyPFile.Save(PWideChar(wstrDateiname), False);
// Übergibt den Pfad des Links als Rückgabewert
Result := string(wstrDateiname);
end;
Die Funktion kann wie folgt aufgerufen werden.
funErstelleLink(
'E:\Test\Test.Exe', // Pfad und Name der Originaldatei
_DESKTOP, // Hier soll der Link gespeichert werden
'', // Optional: Ein alternativer Pfad zum speichern des Links
'', // Optional: Das Arbeitsverzeichnis des Programms
'', // Optional: Übergabeparameter an das Programm
'Dies ist ein Test', // Optional: Eine Beschreibung des Shortcuts
'E:\Test\Test.Exe', // Optional: Eine Datei, die das alternative Icon enthält
2 // Optional: Das Icon das aus der Icondatei angezeigt werden soll
// (Die Zählung der Icons beginnt bei 1)
);