Shell-Links
Ein Shell-Link ist ein Datenobjekt, das Informationen enthält, die verwendet werden, um auf ein anderes Objekt im Shell-Namespace zuzugreifen– das heißt, jedes Objekt, das über Windows Explorer sichtbar ist. Die Arten von Objekten, auf die über Shell-Links zugegriffen werden kann, umfassen Dateien, Ordner, Datenträgerlaufwerke und Drucker. Ein Shell-Link ermöglicht einem Benutzer oder einer Anwendung den Zugriff auf ein Objekt an einer beliebigen Stelle im Namespace. Der Benutzer oder die Anwendung muss den aktuellen Namen und den Speicherort des Objekts nicht kennen.
Informationen zu Shell-Links
Der Benutzer erstellt einen Shell-Link, indem Er aus dem Kontextmenü eines Objekts den Befehl "Verknüpfung erstellen " auswählt. Das System erstellt automatisch ein Symbol für den Shell-Link, indem das Symbol des Objekts mit einem kleinen Pfeil (als systemdefiniertes Linküberlagerungssymbol bezeichnet) kombiniert wird, das in der unteren linken Ecke des Symbols angezeigt wird. Ein Shell-Link mit einem Symbol wird als Verknüpfung bezeichnet; Die Begriffe Shell-Verknüpfung und Verknüpfung werden jedoch häufig austauschbar 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. Ein Benutzer kann z. B. eine Verknüpfung zu einem Microsoft Word Dokument erstellen, das sich in einem Unterordner befindet und das Verknüpfungssymbol auf dem Desktop platzieren. Der Benutzer kann dann das Dokument öffnen, indem sie auf das Verknüpfungssymbol doppelklicken. Wenn das Dokument nach dem Erstellen der Verknüpfung verschoben oder umbenannt wird, versucht das System, die Verknüpfung beim nächsten Auswählen der Verknüpfung zu aktualisieren.
Anwendungen können auch Shell-Links und Verknüpfungen erstellen und verwenden. Beispielsweise kann eine Textverarbeitungsanwendung einen Shell-Link 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 verwendet wird, um Shell-Links aus einer Microsoft Win32-basierten Anwendung zu erstellen und zu beheben. Da das Design von Shell-Links auf dem OLE-Komponentenobjektmodell (COM) basiert, sollten Sie mit den grundlegenden Konzepten der COM- und OLE-Programmierung vertraut sein, bevor Sie diese Übersicht lesen.
Linkauflösung
Wenn ein Benutzer eine Verknüpfung zu einem Objekt erstellt und der Name oder die Position des Objekts später geändert wird, führt das System automatisch Schritte zum Aktualisieren oder Auflösen der Verknüpfung aus, wenn der Benutzer ihn ausgewählt hat. Wenn eine Anwendung jedoch einen Shell-Link erstellt und in einem Stream speichert, versucht das System nicht automatisch, den Link zu lösen. Die Anwendung muss den Link auflösen, indem Sie die IShellLink:: Resolve-Methode aufrufen.
Wenn ein Shell-Link erstellt wird, speichert das System Informationen über den 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 ein Zeiger auf die Bezeichnerliste des Shelllinks verwendet wird. Weitere Informationen zur Bezeichnerliste finden Sie unter Elementbezeichner und Bezeichnerlisten. Das System sucht nach dem zugeordneten Objekt in diesem Pfad, und wenn es das Objekt findet, löst den Link auf. Wenn das System das Objekt nicht finden kann, ruft er den DlT-Dienst ( Distributed Link Tracking and Object Identifiers ) auf, um das Objekt zu suchen. Wenn der DLT-Dienst nicht verfügbar ist oder das Objekt nicht finden kann, sucht das System im gleichen Verzeichnis für ein Objekt mit derselben Dateierstellungszeit und -attribute, aber mit einem anderen Namen. Dieser Suchtyp löst einen Link zu einem Objekt, das umbenannt wurde.
Wenn das System das Objekt weiterhin nicht finden kann, durchsucht er die Verzeichnisse, den Desktop und lokale Volumes und sucht rekursiv nach dem Verzeichnisstruktur für ein Objekt mit demselben Namen oder der Erstellungszeit. Wenn das System weiterhin keine Übereinstimmung findet, wird ein Dialogfeld angezeigt, das den Benutzer für einen Speicherort anfordert. Eine Anwendung kann das Dialogfeld unterdrücken, indem Sie den SLR_NO_UI Wert in einem Aufruf von IShellLink::Resolve angeben.
Initialisierung der Komponentenobjektbibliothek
Bevor eine Anwendung Verknüpfungen erstellen und auflösen kann, muss sie die Komponentenobjektbibliothek initialisieren, indem Sie die Funktion "CoInitialize " aufrufen. 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 bietet standortunabhängige Namen für Shell-Links zu Objekten, 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 Netzwerkressourcennamen (Universal Naming Convention, UNC) für das Objekt bereit. Da das System standortunabhängige Namen bereitstellt, kann ein Shell-Link als universeller Name für eine Datei dienen, die auf andere Computer übertragen werden kann.
Verknüpfen von Dateien
Wenn der Benutzer eine Verknüpfung zu einem Objekt erstellt, indem sie den Befehl "Verknüpfung erstellen" im Kontextmenü des Objekts auswählen, speichert Windows die Informationen, die er benötigt, um auf das Objekt in einer Linkdatei zuzugreifen – eine Binärdatei, die die Dateinamenerweiterung .lnk aufweist. Eine Linkdatei enthält die folgenden Informationen:
- Der Speicherort (Pfad) des Objekts, auf das durch die Verknüpfung verwiesen wird (als entsprechendes Objekt bezeichnet).
- Das Arbeitsverzeichnis des entsprechenden Objekts.
- Die Liste der Argumente, die das System an das entsprechende Objekt übergeben, wenn die IContextMenu::InvokeCommand-Methode für die Verknüpfung aktiviert wird.
- Der Befehl "Anzeigen", der zum Festlegen des anfänglichen Anzeigezustands des entsprechenden Objekts verwendet wird. Dies ist eine der in ShowWindow beschriebenen SW_ Werte.
- Der Speicherort (Pfad und Index) des Verknüpfungssymbols.
- Die Beschreibungszeichenfolge der Verknüpfung.
- Die Tastenkombination für die Tastenkombination.
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 Verknüpfungen nicht unabhängig voneinander.
Eine Anwendung kann eine Dateinamenerweiterung als Verknüpfungsdateityp registrieren. Wenn eine Datei eine Dateinamenerweiterung enthält, die als Verknüpfungsdateityp registriert wurde, fügt das System automatisch das systemdefinierte Linküberlagerungssymbol (ein kleiner Pfeil) zum Symbol der Datei hinzu. Um eine Dateinamenerweiterung als Verknüpfungsdateityp zu registrieren, müssen Sie den IsShortcut-Wert zur Registrierungsbeschreibung der Dateinamenerweiterung hinzufügen, wie im folgenden Beispiel dargestellt. Beachten Sie, dass die Shell für das Überlagerungssymbol neu gestartet werden muss, um wirksam zu werden. IsShortcut hat keinen Datenwert.
HKEY_CLASSES_ROOT
.xyz
(Default) = XYZApp
XYZApp
IsShortcut
Verknüpfungsnamen
Der Name der Verknüpfung, die eine Zeichenfolge ist, die unterhalb des Shell-Linksymbols angezeigt wird, ist tatsächlich der Dateiname der Verknüpfung selbst. Der Benutzer kann die Beschreibungszeichenfolge bearbeiten, indem sie ausgewählt und eine neue Zeichenfolge eingegeben wird.
Speicherort von Verknüpfungen im Namespace
Eine Verknüpfung kann auf dem Desktop oder an einer beliebigen Stelle im Shell-Namespace vorhanden sein. Ebenso kann das Objekt, das der Verknüpfung zugeordnet ist, auch überall im Shell-Namespace vorhanden sein. Eine Anwendung kann die IShellLink::SetPath-Methode verwenden, um den Pfad und den Dateinamen für das zugeordnete Objekt festzulegen, und die IShellLink::GetPath-Methode , um den aktuellen Pfad und den Dateinamen für das Objekt abzurufen.
Verknüpfungsverzeichnis
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 Arbeitsverzeichniss für das entsprechende Objekt. Eine Anwendung kann den Namen des Arbeitsverzeichniss für das entsprechende Objekt mithilfe der IShellLink::SetWorkingDirectory-Methode festlegen und den Namen des aktuellen Arbeitsverzeichniss für das entsprechende Objekt mithilfe der IShellLink::GetWorkingDirectory-Methode abrufen.
Befehlszeilenargumente für Tastenkombinationen
Eine Linkdatei enthält Befehlszeilenargumente, die die Shell an das entsprechende Objekt übergeben, wenn der Benutzer den Link auswählt. Eine Anwendung kann die Befehlszeilenargumente für eine Verknüpfung mithilfe der IShellLink::SetArguments-Methode festlegen. Es ist nützlich, Befehlszeilenargumente festzulegen, wenn die entsprechende Anwendung, z. B. ein Linker oder Compiler, spezielle Flags als Argumente verwendet. Eine Anwendung kann die Befehlszeilenargumente aus einer Verknüpfung mithilfe der IShellLink::GetArguments-Methode abrufen.
Tastenkombinationsbefehle 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 fest. Der Befehl "Anzeigen" kann eine der SW_ Werte sein, die in der Beschreibung der ShowWindow-Funktion enthalten sind. Eine Anwendung kann den Befehl "Anzeigen" für eine Verknüpfung mithilfe der IShellLink::SetShowCmd-Methode festlegen und den aktuellen Anzeigebefehl mithilfe der IShellLink::GetShowCmd-Methode abrufen.
Tastenkombinationssymbole
Wie andere Shell-Objekte verfügt eine Verknüpfung über ein Symbol. Der Benutzer greift auf das Objekt zu, das einer Verknüpfung zugeordnet ist, indem sie auf das Symbol der Verknüpfung doppelklicken. Wenn das System ein Symbol für eine Verknüpfung erstellt, wird die Bitmap des entsprechenden Objekts verwendet und das systemdefinierte Linküberlagerungssymbol (ein kleiner Pfeil) zur unteren linken Ecke hinzugefügt. Eine Anwendung kann den Speicherort (Pfad und Index) eines Verknüpfungssymbols mithilfe der IShellLink::SetIconLocation-Methode festlegen. Eine Anwendung kann diesen Speicherort mithilfe der IShellLink::GetIconLocation-Methode abrufen.
Verknüpfungsbeschreibungen
Tastenkombinationen verfügen über Beschreibungen, aber der Benutzer sieht sie nie. Eine Anwendung kann eine Beschreibung verwenden, um textinformationen zu speichern. Beschreibungen werden mithilfe der IShellLink::SetDescription-Methode festgelegt und mithilfe der IShellLink::GetDescription-Methode abgerufen.
Tastenkombinationen
Ein Verknüpfungsobjekt kann eine Tastenkombination aufweisen, die sie zugeordnet ist. Tastenkombinationen ermöglichen es einem Benutzer, eine Kombination von Tasten zu drücken, um eine Tastenkombination zu aktivieren. Eine Anwendung kann die Tastenkombination für eine Tastenkombination mithilfe der IShellLink::SetHotkey-Methode festlegen und die aktuelle Tastenkombination mithilfe der IShellLink::GetHotkey-Methode abrufen.
Elementbezeichner und Bezeichnerlisten
Die Shell verwendet Objektbezeichner im Namespace der Shell. Alle In der Shell sichtbaren Objekte (Dateien, Verzeichnisse, Server, Arbeitsgruppen usw.) verfügen über eindeutige Bezeichner zwischen den Objekten innerhalb ihres übergeordneten Ordners. Diese Bezeichner werden als Elementbezeichner bezeichnet, und sie haben den SHITEMID-Datentyp wie in der Shtypes.h-Headerdatei definiert. Ein Elementbezeichner ist ein variabler Bytestrom, der Informationen enthält, die ein Objekt in einem Ordner identifiziert. Nur der Ersteller eines Elementbezeichners kennt den Inhalt und das Format des Bezeichners. Der einzige Teil eines Elementbezeichners, den die Shell verwendet, ist die erste zwei Bytes, die die Größe des Bezeichners angeben.
Jeder übergeordnete Ordner verfügt über einen eigenen Elementbezeichner, der es innerhalb eines eigenen übergeordneten Ordners identifiziert. Daher kann jedes Shell-Objekt eindeutig durch eine Liste der Elementbezeichner identifiziert werden. Ein übergeordneter Ordner behält eine Liste der Bezeichner für die elemente, die er enthält. Die Liste verfügt über den ITEMIDLIST-Datentyp . Elementbezeichnerlisten werden der Shell zugewiesen und können über Shell-Schnittstellen wie IShellFolder übergeben werden. Es ist wichtig zu beachten, 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 auf ein Objekt festlegen, das keine Datei ist, z. B. ein Drucker oder Datenträgerlaufwerk. Eine Anwendung kann die Elementbezeichnerliste einer Verknüpfung mithilfe der IShellLink::GetIDList-Methode abrufen.
Verwenden von Shell-Links
Dieser Abschnitt enthält Beispiele, die veranschaulichen, wie Verknüpfungen innerhalb einer Win32-basierten Anwendung erstellt und aufgelöst werden. 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 umfassen einen Zeiger auf den Namen der Zu verknüpfenden Datei, 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 der Dateiname der Name der Datei ist, mit der eine Verknüpfung hergestellt werden soll.
Um eine Ordnerverknüpfung mithilfe der CreateLink-Beispielfunktion zu erstellen, rufen Sie CoCreateInstance mithilfe CLSID_FolderShortcut anstelle von CLSID_ShellLink auf (CLSID_FolderShortcut unterstützt IShellLink). Alle anderen Code bleiben gleich.
Da CreateLink die Funktion "CoCreateInstance " 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 bearbeiten. Dieser Vorgang wird als Auflösung der Verknüpfung bezeichnet.
Die anwendungsdefinierte ResolveIt-Funktion im folgenden Beispiel löst eine Verknüpfung auf. Die Parameter umfassen einen Fensterhandpunkt, einen Zeiger auf den Pfad der Verknüpfung und die Adresse eines Puffers, der den neuen Pfad zum Objekt empfängt. Der Fensterpunkt identifiziert das übergeordnete Fenster für alle Nachrichtenfelder, die die Shell möglicherweise anzeigen muss. Die Shell kann z. B. ein Meldungsfeld anzeigen, wenn sich der Link auf unharrigen Medien befindet, wenn Netzwerkprobleme auftreten, wenn der Benutzer einen Floppydatenträger einfügen muss und so weiter.
Die ResolveIt-Funktion ruft die Funktion "CoCreateInstance" auf und geht davon aus, dass die Funktion "CoInitialize " bereits aufgerufen wurde. Beachten Sie, dass ResolveIt die IPersistFile-Schnittstelle zum Speichern der Linkinformationen verwenden muss. IPersistFile wird vom IShellLink-Objekt implementiert. Die Linkinformationen müssen geladen werden, bevor die Pfadinformationen abgerufen werden, die später im Beispiel angezeigt werden. Fehler beim Laden der Linkinformationen führt dazu, dass die Aufrufe an den IShellLink::GetPath und IShellLink::GetDescription-Memberfunktionen fehlschlagen.
// 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 Nichtdateiobjekt, z. B. einem Drucker, ähnelt dem Erstellen einer Verknüpfung zu einer Datei, außer dass Sie den Pfad zur Datei festlegen, müssen Sie die Bezeichnerliste auf den Drucker festlegen. Um die Bezeichnerliste festzulegen, rufen Sie die IShellLink::SetIDList-Methode auf, die die Adresse einer Bezeichnerliste angibt.
Jedes Objekt im Namespace der Shell verfügt über einen Elementbezeichner. Die Shell verketten häufig Elementbezeichner in null-beendete 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, haben Sie bereits 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 Funktion "CoCreateInstance " aufrufen, um die Adresse der Schnittstelle abzurufen. Anschließend können Sie die Schnittstelle aufrufen, um die Objekte im Ordner aufzählen 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.