Sign in Join
Wiki copytemporary

Revision 2 of 3, by WikiArchive on 11-4-2026. The page as it is now.

Filelink/de

https://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Windows_logo_-_2012.svg/50px-Windows_logo_-_2012.svg.png

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:

pascal
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:

pascal
type
      ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER);

Die Funktion für das Erstellen eines Links (Dateilinks) sieht wie folgt aus:

pascal
// 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.

pascal
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)
        );

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.