Shelllinks

Ein Shelllink ist ein Datenobjekt, das Informationen enthält, die für den Zugriff auf ein anderes Objekt im Shell-Namespace verwendet werden, d. h. jedes Objekt, das über Windows Explorer sichtbar ist. Zu den Objekttypen, auf die über Shelllinks zugegriffen werden kann, gehören Dateien, Ordner, Datenträgerlaufwerke und Drucker. Ein Shelllink ermöglicht es einem Benutzer oder einer Anwendung, von überall im Namespace auf ein Objekt zuzugreifen. Der Benutzer oder die Anwendung muss den aktuellen Namen und den aktuellen Speicherort des Objekts nicht kennen.

Der Benutzer erstellt einen Shelllink, indem er im Kontextmenü eines Objekts den Befehl Verknüpfung erstellen auswählt. Das System erstellt automatisch ein Symbol für den Shelllink, indem das Symbol des Objekts mit einem kleinen Pfeil (das systemdefinierte Linküberlagerungssymbol) kombiniert wird, der in der unteren linken Ecke des Symbols angezeigt wird. Eine Shellverknüpfung mit einem Symbol wird als Verknüpfung bezeichnet. Die Begriffe Shelllink und Shortcut werden jedoch häufig synonym verwendet. In der Regel erstellt der Benutzer Verknüpfungen, um schnellen Zugriff auf Objekte zu erhalten, die in Unterordnern oder in freigegebenen Ordnern auf anderen Computern gespeichert sind. Beispielsweise kann ein Benutzer eine Verknüpfung zu einem Microsoft Word-Dokument erstellen, das sich in einem Unterordner befindet, und das Verknüpfungssymbol auf dem Desktop platzieren. Anschließend kann der Benutzer das Dokument öffnen, indem er auf das Verknüpfungssymbol doppelklicken. Wenn das Dokument verschoben oder umbenannt wird, nachdem die Verknüpfung erstellt wurde, versucht das System, die Verknüpfung bei der nächsten Auswahl des Benutzers zu aktualisieren.

Anwendungen können auch Shelllinks und Tastenkombinationen erstellen und verwenden. Beispielsweise kann eine Textverarbeitungsanwendung einen Shelllink erstellen, um eine Liste der zuletzt verwendeten Dokumente zu implementieren. Eine Anwendung erstellt einen Shell-Link mithilfe der IShellLink-Schnittstelle , um ein Shell-Linkobjekt zu erstellen. Die Anwendung verwendet die IPersistFile - oder IPersistStream-Schnittstelle , um das Objekt in einer Datei oder einem Stream zu speichern.

Hinweis

Sie können IShellLink nicht verwenden, um einen Link zu einer URL zu erstellen.

 

In dieser Übersicht wird die IShellLink-Schnittstelle beschrieben und erläutert, wie sie zum Erstellen und Auflösen von Shell-Links in einer Microsoft Win32-basierten Anwendung verwendet wird. Da der Entwurf von Shelllinks auf dem OLE-Komponentenobjektmodell (COM) basiert, sollten Sie mit den grundlegenden Konzepten der COM- und OLE-Programmierung vertraut sein, bevor Sie diese Übersicht lesen.

Wenn ein Benutzer eine Verknüpfung zu einem Objekt erstellt und der Name oder der Speicherort des Objekts später geändert wird, führt das System automatisch Schritte aus, um die Verknüpfung beim nächsten Auswählen des Objekts zu aktualisieren oder aufzulösen. Wenn eine Anwendung jedoch einen Shelllink erstellt und in einem Stream speichert, versucht das System nicht automatisch, den Link aufzulösen. Die Anwendung muss den Link auflösen, indem die IShellLink::Resolve-Methode aufgerufen wird.

Wenn ein Shelllink erstellt wird, speichert das System Informationen zum Link. Beim Auflösen eines Links – entweder automatisch oder mit einem IShellLink::Resolve-Aufruf – ruft das System zuerst den Pfad ab, der dem Shell-Link zugeordnet ist, indem es einen Zeiger auf die Bezeichnerliste des Shelllinks verwendet. Weitere Informationen zur Bezeichnerliste finden Sie unter Elementbezeichner und Bezeichnerlisten. Das System sucht nach dem zugeordneten Objekt in diesem Pfad und löst den Link auf, wenn es das Objekt findet. Wenn das System das Objekt nicht finden kann, ruft es den DLT-Dienst ( Distributed Link Tracking and Object Identifiers ) auf, falls verfügbar, um das Objekt zu suchen. Wenn der DLT-Dienst nicht verfügbar ist oder das Objekt nicht finden kann, sucht das System im selben Verzeichnis nach einem Objekt mit der gleichen Dateierstellungszeit und denselben Attributen, aber mit einem anderen Namen. Diese Art der Suche löst einen Link zu einem objekt auf, das umbenannt wurde.

Wenn das System das Objekt weiterhin nicht finden kann, durchsucht es die Verzeichnisse, den Desktop und die lokalen Volumes und sucht rekursiv durch die Verzeichnisstruktur nach einem Objekt mit demselben Namen oder der gleichen Erstellungszeit. Wenn das System immer noch keine Übereinstimmung findet, wird ein Dialogfeld angezeigt, in dem der Benutzer zur Eingabe eines Speicherorts aufgefordert wird. Eine Anwendung kann das Dialogfeld unterdrücken, indem sie den SLR_NO_UI-Wert in einem Aufruf von IShellLink::Resolve angibt.

Initialisierung der Komponentenobjektbibliothek

Bevor eine Anwendung Verknüpfungen erstellen und auflösen kann, muss sie die Komponentenobjektbibliothek initialisieren, indem sie die CoInitialize-Funktion aufruft . Jeder Aufruf von CoInitialize erfordert einen entsprechenden Aufruf der CoUninitialize-Funktion , die eine Anwendung aufrufen sollte, wenn sie beendet wird. Der Aufruf von CoUninitialize stellt sicher, dass die Anwendung erst beendet wird, wenn sie alle ausstehenden Nachrichten empfangen hat.

Location-Independent Namen

Das System stellt standortunabhängige Namen für Shelllinks zu Objekten bereit, die in freigegebenen Ordnern gespeichert sind. Wenn das Objekt lokal gespeichert wird, stellt das System den lokalen Pfad und dateinamen für das Objekt bereit. Wenn das Objekt remote gespeichert wird, stellt das System einen UNC-Netzwerkressourcennamen (Universal Naming Convention) für das Objekt bereit. Da das System standortunabhängige Namen bereitstellt, kann ein Shelllink als universeller Name für eine Datei dienen, die auf andere Computer übertragen werden kann.

Wenn der Benutzer eine Verknüpfung zu einem Objekt erstellt, indem er im Kontextmenü des Objekts den Befehl Verknüpfung erstellen auswählt, speichert Windows die Informationen, die er für den Zugriff auf das Objekt benötigt, in einer Linkdatei – einer Binärdatei mit der Dateinamenerweiterung LNK. Eine Linkdatei enthält die folgenden Informationen:

  • Die Position (Pfad) des Objekts, auf das von der Verknüpfung verwiesen wird (das entsprechende Objekt genannt).
  • Das Arbeitsverzeichnis des entsprechenden Objekts.
  • Die Liste der Argumente, die das System an das entsprechende Objekt übergibt, wenn die IContextMenu::InvokeCommand-Methode für die Verknüpfung aktiviert wird.
  • Der Show-Befehl, mit dem der anfängliche Show-Zustand des entsprechenden Objekts festgelegt wird. Dies ist einer der SW_ Werte, die in ShowWindow beschrieben werden.
  • Der Speicherort (Pfad und Index) des Verknüpfungssymbols.
  • Die Beschreibungszeichenfolge der Verknüpfung.
  • Die Tastenkombination für die Verknüpfung.

Wenn eine Linkdatei gelöscht wird, ist das entsprechende Objekt nicht betroffen.

Wenn Sie eine Verknüpfung zu einer anderen Verknüpfung erstellen, kopiert das System einfach die Linkdatei, anstatt eine neue Linkdatei zu erstellen. In diesem Fall sind die Tastenkombinationen nicht unabhängig voneinander.

Eine Anwendung kann eine Dateinamenerweiterung als Verknüpfungsdateityp registrieren. Wenn eine Datei über eine Dateinamenerweiterung verfügt, die als Verknüpfungsdateityp registriert wurde, fügt das System dem Symbol der Datei automatisch das systemdefinierte Linküberlagerungssymbol (ein kleiner Pfeil) hinzu. Um eine Dateinamenerweiterung als Verknüpfungsdateityp zu registrieren, müssen Sie den Wert IsShortcut der Registrierungsbeschreibung der Dateinamenerweiterung hinzufügen, wie im folgenden Beispiel gezeigt. Beachten Sie, dass die Shell neu gestartet werden muss, damit das Überlagerungssymbol wirksam wird. IsShortcut verfügt über keinen Datenwert.

HKEY_CLASSES_ROOT
   .xyz
      (Default) = XYZApp
   XYZApp
      IsShortcut

Verknüpfungsnamen

Der Name der Verknüpfung, bei dem es sich um eine Zeichenfolge handelt, die unter dem Shell-Linksymbol angezeigt wird, ist tatsächlich der Dateiname der Verknüpfung selbst. Der Benutzer kann die Beschreibungszeichenfolge bearbeiten, indem er sie auswählt und eine neue Zeichenfolge eingibt.

Speicherort von Verknüpfungen im Namespace

Eine Verknüpfung kann auf dem Desktop oder an einer beliebigen Stelle im Shell-Namespace vorhanden sein. Auf ähnliche Weise kann das Objekt, das der Verknüpfung zugeordnet ist, auch an einer beliebigen Stelle im Shell-Namespace vorhanden sein. Eine Anwendung kann die IShellLink::SetPath-Methode verwenden, um den Pfad und dateinamen für das zugeordnete Objekt festzulegen, und die IShellLink::GetPath-Methode , um den aktuellen Pfad und Dateinamen für das Objekt abzurufen.

Verknüpfungsarbeitsverzeichnis

Das Arbeitsverzeichnis ist das Verzeichnis, in dem das entsprechende Objekt einer Verknüpfung Dateien lädt oder speichert, wenn der Benutzer kein bestimmtes Verzeichnis identifiziert. Eine Linkdatei enthält den Namen des Arbeitsverzeichnisses für das entsprechende Objekt. Eine Anwendung kann den Namen des Arbeitsverzeichnisses für das entsprechende Objekt mithilfe der IShellLink::SetWorkingDirectory-Methode festlegen und den Namen des aktuellen Arbeitsverzeichnisses für das entsprechende Objekt mithilfe der IShellLink::GetWorkingDirectory-Methode abrufen.

Befehlszeilenargumente für Verknüpfungen

Eine Linkdatei enthält Befehlszeilenargumente, die die Shell an das entsprechende Objekt übergibt, wenn der Benutzer den Link auswählt. Eine Anwendung kann die Befehlszeilenargumente für eine Verknüpfung mit der IShellLink::SetArguments-Methode festlegen. Es ist hilfreich, Befehlszeilenargumente festzulegen, wenn die entsprechende Anwendung, z. B. ein Linker oder Compiler, spezielle Flags als Argumente annimmt. Eine Anwendung kann die Befehlszeilenargumente mithilfe der IShellLink::GetArguments-Methode aus einer Verknüpfung abrufen.

Befehle mit Tastenkombination anzeigen

Wenn der Benutzer auf eine Verknüpfung doppelklicken, startet das System die Anwendung, die dem entsprechenden Objekt zugeordnet ist, und legt den anfänglichen Anzeigezustand der Anwendung basierend auf dem durch die Verknüpfung angegebenen Befehl show fest. Der Befehl show kann jeder der SW_ Werte sein, die in der Beschreibung der ShowWindow-Funktion enthalten sind. Eine Anwendung kann den Show-Befehl für eine Verknüpfung mit der IShellLink::SetShowCmd-Methode festlegen und den aktuellen Show-Befehl mithilfe der IShellLink::GetShowCmd-Methode abrufen.

Tastenkombinationssymbole

Wie bei anderen Shellobjekten verfügt auch eine Verknüpfung über ein Symbol. Der Benutzer greift auf das Objekt zu, das einer Verknüpfung zugeordnet ist, indem er auf das Symbol der Verknüpfung doppelklicken. Wenn das System ein Symbol für eine Verknüpfung erstellt, verwendet es die Bitmap des entsprechenden Objekts und fügt das systemdefinierte Linküberlagerungssymbol (ein kleiner Pfeil) in der unteren linken Ecke hinzu. Eine Anwendung kann den Speicherort (Pfad und Index) des Verknüpfungssymbols mithilfe der IShellLink::SetIconLocation-Methode festlegen. Eine Anwendung kann diesen Speicherort mithilfe der IShellLink::GetIconLocation-Methode abrufen.

Tastenkombinationsbeschreibungen

Tastenkombinationen enthalten Beschreibungen, aber der Benutzer sieht sie nie. Eine Anwendung kann eine Beschreibung verwenden, um beliebige Textinformationen zu speichern. Beschreibungen werden mithilfe der IShellLink::SetDescription-Methode festgelegt und mit der IShellLink::GetDescription-Methode abgerufen.

Tastenkombinationen

Einem Tastenkombinationsobjekt kann eine Tastenkombination zugeordnet sein. Mit Tastenkombinationen kann ein Benutzer eine Tastenkombination drücken, um eine Tastenkombination zu aktivieren. Eine Anwendung kann die Tastenkombination für eine Verknüpfung mithilfe der IShellLink::SetHotkey-Methode festlegen und die aktuelle Tastenkombination mithilfe der IShellLink::GetHotkey-Methode abrufen.

Elementbezeichner und Bezeichnerlisten

Die Shell verwendet Objektbezeichner innerhalb des Namespace der Shell. Alle in der Shell sichtbaren Objekte (Dateien, Verzeichnisse, Server, Arbeitsgruppen usw.) verfügen über eindeutige Bezeichner unter den Objekten in ihrem übergeordneten Ordner. Diese Bezeichner werden als Elementbezeichner bezeichnet und verfügen über den in der Headerdatei Shtypes.h definierten SHITEMID-Datentyp . Ein Elementbezeichner ist ein Bytestream mit variabler Länge, der Informationen enthält, die ein Objekt in einem Ordner identifizieren. Nur der Ersteller eines Elementbezeichners kennt den Inhalt und das Format des Bezeichners. Der einzige Teil eines Elementbezeichners, den die Shell verwendet, sind die ersten beiden Bytes, die die Größe des Bezeichners angeben.

Jeder übergeordnete Ordner verfügt über einen eigenen Elementbezeichner, der ihn in seinem eigenen übergeordneten Ordner identifiziert. Daher kann jedes Shell-Objekt durch eine Liste von Elementbezeichnern eindeutig identifiziert werden. Ein übergeordneter Ordner enthält eine Liste mit Bezeichnern für die darin enthaltenen Elemente. Die Liste weist den ITEMIDLIST-Datentyp auf. Elementbezeichnerlisten werden von der Shell zugeordnet und können über Shellschnittstellen wie IShellFolder übergeben werden. Beachten Sie, dass jeder Bezeichner in einer Elementbezeichnerliste nur im Kontext des übergeordneten Ordners sinnvoll ist.

Eine Anwendung kann die Elementbezeichnerliste einer Verknüpfung mithilfe der IShellLink::SetIDList-Methode festlegen. Diese Methode ist nützlich, wenn Sie eine Verknüpfung für ein Objekt festlegen, bei dem es sich nicht um eine Datei handelt, z. B. einen Drucker oder ein Datenträgerlaufwerk. Eine Anwendung kann die Elementbezeichnerliste einer Verknüpfung mithilfe der IShellLink::GetIDList-Methode abrufen.

Dieser Abschnitt enthält Beispiele, die das Erstellen und Auflösen von Verknüpfungen in einer Win32-basierten Anwendung veranschaulichen. In diesem Abschnitt wird davon ausgegangen, dass Sie mit der Programmierung von Win32, C++ und OLE COM vertraut sind.

Erstellen einer Verknüpfung und einer Ordnerverknüpfung zu einer Datei

Die CreateLink-Beispielfunktion im folgenden Beispiel erstellt eine Verknüpfung. Die Parameter enthalten einen Zeiger auf den Namen der Datei, mit der eine Verknüpfung verknüpft werden soll, einen Zeiger auf den Namen der Verknüpfung, die Sie erstellen, und einen Zeiger auf die Beschreibung des Links. Die Beschreibung besteht aus der Zeichenfolge "Verknüpfung zum Dateinamen", wobei dateiname der Name der Datei ist, mit der eine Verknüpfung hergestellt werden soll.

Um mithilfe der CreateLink-Beispielfunktion eine Ordnerverknüpfung zu erstellen, rufen Sie CoCreateInstance mithilfe von CLSID_FolderShortcut anstelle von CLSID_ShellLink auf (CLSID_FolderShortcut IShellLink unterstützt). Der gesamte andere Code bleibt gleich.

Da CreateLink die CoCreateInstance-Funktion aufruft , wird davon ausgegangen, dass die CoInitialize-Funktion bereits aufgerufen wurde. CreateLink verwendet die IPersistFile-Schnittstelle , um die Verknüpfung und die IShellLink-Schnittstelle zu speichern, um den Dateinamen und die Beschreibung zu speichern.

// CreateLink - Uses the Shell's IShellLink and IPersistFile interfaces 
//              to create and store a shortcut to the specified object. 
//
// Returns the result of calling the member functions of the interfaces. 
//
// Parameters:
// lpszPathObj  - Address of a buffer that contains the path of the object,
//                including the file name.
// lpszPathLink - Address of a buffer that contains the path where the 
//                Shell link is to be stored, including the file name.
// lpszDesc     - Address of a buffer that contains a description of the 
//                Shell link, stored in the Comment field of the link
//                properties.

#include "stdafx.h"
#include "windows.h"
#include "winnls.h"
#include "shobjidl.h"
#include "objbase.h"
#include "objidl.h"
#include "shlguid.h"

HRESULT CreateLink(LPCWSTR lpszPathObj, LPCSTR lpszPathLink, LPCWSTR lpszDesc) 
{ 
    HRESULT hres; 
    IShellLink* psl; 
 
    // Get a pointer to the IShellLink interface. It is assumed that CoInitialize
    // has already been called.
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); 
    if (SUCCEEDED(hres)) 
    { 
        IPersistFile* ppf; 
 
        // Set the path to the shortcut target and add the description. 
        psl->SetPath(lpszPathObj); 
        psl->SetDescription(lpszDesc); 
 
        // Query IShellLink for the IPersistFile interface, used for saving the 
        // shortcut in persistent storage. 
        hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); 
 
        if (SUCCEEDED(hres)) 
        { 
            WCHAR wsz[MAX_PATH]; 
 
            // Ensure that the string is Unicode. 
            MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH); 
            
            // Add code here to check return value from MultiByteWideChar 
            // for success.
 
            // Save the link by calling IPersistFile::Save. 
            hres = ppf->Save(wsz, TRUE); 
            ppf->Release(); 
        } 
        psl->Release(); 
    } 
    return hres; 

Auflösen einer Verknüpfung

Eine Anwendung muss möglicherweise auf eine zuvor erstellte Verknüpfung zugreifen und diese bearbeiten. Dieser Vorgang wird als Auflösen der Verknüpfung bezeichnet.

Die anwendungsdefinierte ResolveIt-Funktion im folgenden Beispiel löst eine Verknüpfung auf. Zu den Parametern gehören ein Fensterhandle, ein Zeiger auf den Pfad der Verknüpfung und die Adresse eines Puffers, der den neuen Pfad zum Objekt empfängt. Das Fensterhandle identifiziert das übergeordnete Fenster für alle Meldungsfelder, die die Shell möglicherweise anzeigen muss. Beispielsweise kann die Shell ein Meldungsfeld anzeigen, wenn sich der Link auf nicht freigegebenen Medien befindet, wenn Netzwerkprobleme auftreten, wenn der Benutzer einen Diskettendatenträger einfügen muss usw.

Die ResolveIt-Funktion ruft die Funktion CoCreateInstance auf und geht davon aus, dass die CoInitialize-Funktion bereits aufgerufen wurde. Beachten Sie, dass ResolveIt die IPersistFile-Schnittstelle verwenden muss, um die Linkinformationen zu speichern. IPersistFile wird vom IShellLink-Objekt implementiert. Die Linkinformationen müssen geladen werden, bevor die Pfadinformationen abgerufen werden. Dies wird später im Beispiel gezeigt. Wenn die Linkinformationen nicht geladen werden, schlagen die Aufrufe der Memberfunktionen IShellLink::GetPath und IShellLink::GetDescription fehl.

// ResolveIt - Uses the Shell's IShellLink and IPersistFile interfaces 
//             to retrieve the path and description from an existing shortcut. 
//
// Returns the result of calling the member functions of the interfaces. 
//
// Parameters:
// hwnd         - A handle to the parent window. The Shell uses this window to 
//                display a dialog box if it needs to prompt the user for more 
//                information while resolving the link.
// lpszLinkFile - Address of a buffer that contains the path of the link,
//                including the file name.
// lpszPath     - Address of a buffer that receives the path of the link
                  target, including the file name.
// lpszDesc     - Address of a buffer that receives the description of the 
//                Shell link, stored in the Comment field of the link
//                properties.

#include "stdafx.h"
#include "windows.h"
#include "shobjidl.h"
#include "shlguid.h"
#include "strsafe.h"
                            
HRESULT ResolveIt(HWND hwnd, LPCSTR lpszLinkFile, LPWSTR lpszPath, int iPathBufferSize) 
{ 
    HRESULT hres; 
    IShellLink* psl; 
    WCHAR szGotPath[MAX_PATH]; 
    WCHAR szDescription[MAX_PATH]; 
    WIN32_FIND_DATA wfd; 
 
    *lpszPath = 0; // Assume failure 

    // Get a pointer to the IShellLink interface. It is assumed that CoInitialize
    // has already been called. 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); 
    if (SUCCEEDED(hres)) 
    { 
        IPersistFile* ppf; 
 
        // Get a pointer to the IPersistFile interface. 
        hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf); 
        
        if (SUCCEEDED(hres)) 
        { 
            WCHAR wsz[MAX_PATH]; 
 
            // Ensure that the string is Unicode. 
            MultiByteToWideChar(CP_ACP, 0, lpszLinkFile, -1, wsz, MAX_PATH); 
 
            // Add code here to check return value from MultiByteWideChar 
            // for success.
 
            // Load the shortcut. 
            hres = ppf->Load(wsz, STGM_READ); 
            
            if (SUCCEEDED(hres)) 
            { 
                // Resolve the link. 
                hres = psl->Resolve(hwnd, 0); 

                if (SUCCEEDED(hres)) 
                { 
                    // Get the path to the link target. 
                    hres = psl->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA*)&wfd, SLGP_SHORTPATH); 

                    if (SUCCEEDED(hres)) 
                    { 
                        // Get the description of the target. 
                        hres = psl->GetDescription(szDescription, MAX_PATH); 

                        if (SUCCEEDED(hres)) 
                        {
                            hres = StringCbCopy(lpszPath, iPathBufferSize, szGotPath);
                            if (SUCCEEDED(hres))
                            {
                                // Handle success
                            }
                            else
                            {
                                // Handle the error
                            }
                        }
                    }
                } 
            } 

            // Release the pointer to the IPersistFile interface. 
            ppf->Release(); 
        } 

        // Release the pointer to the IShellLink interface. 
        psl->Release(); 
    } 
    return hres; 
}

Erstellen einer Verknüpfung zu einem Nichtdateiobjekt

Das Erstellen einer Verknüpfung zu einem nicht dateifremden Objekt, z. B. einem Drucker, ähnelt dem Erstellen einer Verknüpfung zu einer Datei, mit der Ausnahme, dass Sie die Bezeichnerliste auf den Drucker festlegen müssen, anstatt den Pfad zu der Datei festzulegen. Rufen Sie zum Festlegen der Bezeichnerliste die IShellLink::SetIDList-Methode auf, und geben Sie die Adresse einer Bezeichnerliste an.

Jedes Objekt im Namespace der Shell verfügt über einen Elementbezeichner. Die Shell verkettet Elementbezeichner häufig zu NULL-terminierten Listen, die aus einer beliebigen Anzahl von Elementbezeichnern bestehen. Weitere Informationen zu Elementbezeichnern finden Sie unter Elementbezeichner und Bezeichnerlisten.

Wenn Sie im Allgemeinen eine Verknüpfung auf ein Element festlegen müssen, das keinen Dateinamen hat, z. B. einen Drucker, verfügen Sie bereits über einen Zeiger auf die IShellFolder-Schnittstelle des Objekts. IShellFolder wird zum Erstellen von Namespaceerweiterungen verwendet.

Sobald Sie über den Klassenbezeichner für IShellFolder verfügen, können Sie die CoCreateInstance-Funktion aufrufen, um die Adresse der Schnittstelle abzurufen. Anschließend können Sie die -Schnittstelle aufrufen, um die Objekte im Ordner aufzulisten und die Adresse des Elementbezeichners für das Objekt abzurufen, nach dem Sie suchen. Schließlich können Sie die Adresse in einem Aufruf der IShellLink::SetIDList-Memberfunktion verwenden, um eine Verknüpfung zum Objekt zu erstellen.