Shell-Zwischenablageformate

Shell-Zwischenablageformate werden verwendet, um den Typ der Shelldaten zu identifizieren, die über die Zwischenablage übertragen werden. Die meisten Shell-Zwischenablageformate identifizieren einen Datentyp, z. B. eine Liste von Dateinamen oder Zeigern auf Elementbezeichnerlisten (PIDLs). Einige Formate werden jedoch für die Kommunikation zwischen Quelle und Ziel verwendet. Sie können den Datenübertragungsprozess beschleunigen, indem Shell-Vorgänge wie optimiertes Verschieben und delete_on_paste unterstützt werden. Shelldaten sind immer in einem Datenobjekt enthalten, das eine FORMATETC-Struktur als allgemeinere Möglichkeit zum Charakterisieren von Daten verwendet. Das cfFormat-Element der Struktur wird auf das Zwischenablageformat für das jeweilige Datenelement festgelegt. Die anderen Mitglieder stellen zusätzliche Informationen bereit, z. B. den Datenübertragungsmechanismus. Die Daten sind in einer begleitenden STGMEDIUM-Struktur enthalten.

Hinweis

Standardmäßige Bezeichner des Zwischenablageformats weisen das Formular CF_XXX auf. Ein gängiges Beispiel ist CF_TEXT, das zum Übertragen von ANSI-Textdaten verwendet wird. Diese Bezeichner verfügen über vordefinierte Werte und können direkt mit FORMATTC-Strukturen verwendet werden. Mit Ausnahme von CF_HDROP sind Shellformatbezeichner nicht vordefiniert. Mit Ausnahme von DragWindow weisen sie das Formular CFSTR_XXX auf. Um diese Werte von vordefinierten Formaten zu unterscheiden, werden sie häufig als einfache Formate bezeichnet. Im Gegensatz zu vordefinierten Formaten müssen sie jedoch sowohl von der Quelle als auch vom Ziel registriert werden, bevor sie zum Übertragen von Daten verwendet werden können. Um ein Shell-Format zu registrieren, schließen Sie die Headerdatei "Shlobj.h" ein, und übergeben Sie den CFSTR_XXX-Formatbezeichner an RegisterClipboardFormat. Diese Funktion gibt einen gültigen Wert für das Format der Zwischenablage zurück, der dann als cfFormat-Element einer FORMATTC-Struktur verwendet werden kann.

 

Die Shell-Zwischenablageformate sind hier in drei Gruppen unterteilt, je nach Verwendung.

Formate für das Übertragen von Dateisystemobjekten

Diese Formate werden verwendet, um ein oder mehrere Dateien oder andere Shell-Objekte zu übertragen.

CF_HDROP

Dieses Format der Zwischenablage wird beim Übertragen der Speicherorte einer Gruppe vorhandener Dateien verwendet. Im Gegensatz zu den anderen Shell-Formaten ist sie vordefiniert, daher ist es nicht erforderlich, RegisterClipboardFormat aufzurufen. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine DROPFILES-Struktur als hGlobal-Element.

Das Element "pFiles" der DROPFILES-Struktur enthält einen Offset zu einem doppelten Null-beendeten Zeichenarray, das die Dateinamen enthält. Wenn Sie ein CF_HDROP Format aus einem Datenobjekt extrahieren, können Sie DragQueryFile verwenden, um einzelne Dateinamen aus dem globalen Speicherobjekt zu extrahieren. Wenn Sie ein CF_HDROP Format erstellen, das in einem Datenobjekt platziert werden soll, müssen Sie das Dateinamenarray erstellen.

Das Dateinamenarray besteht aus einer Reihe von Zeichenfolgen, die jeweils den vollqualifizierten Pfad einer Datei enthalten, einschließlich des endenden NULL-Zeichens . An die endgültige Zeichenfolge wird ein zusätzliches NULL-Zeichen angefügt, um das Array zu beenden. Wenn beispielsweise die Dateien c:\temp1.txt und c:\temp2.txt übertragen werden, sieht das Zeichenarray wie folgt aus:

c:\temp1.txt'\0'c:\temp2.txt'\0''\0'

Hinweis

In diesem Beispiel wird "\0" verwendet, um das Nullzeichen darzustellen, nicht die Literalzeichen, die eingeschlossen werden sollen.

Wenn das Objekt als Teil eines Drag-and-Drop-Vorgangs in die Zwischenablage kopiert wurde, enthält das pt-Element der DROPFILES-Struktur die Koordinaten des Punkts, an dem das Objekt abgelegt wurde. Mit DragQueryPoint können Sie die Cursorkoordinaten extrahieren.

Wenn dieses Format in einem Datenobjekt vorhanden ist, simuliert eine OLE-Ziehschleife WM_DROPFILES Funktionalität mit Nicht-OLE-Dropzielen. Dies ist wichtig, wenn Ihre Anwendung die Quelle eines Drag-and-Drop-Vorgangs auf einem Windows 3.1-System ist.

CFSTR_FILECONTENTS

Dieser Formatbezeichner wird mit dem CFSTR_FILEDESCRIPTOR Format verwendet, um Daten zu übertragen, als ob es sich um eine Datei handelt, unabhängig davon, wie sie tatsächlich gespeichert wird. Die Daten bestehen aus einer STGMEDIUM-Struktur , die den Inhalt einer Datei darstellt. Die Datei wird normalerweise als Datenstromobjekt dargestellt, wodurch verhindert wird, dass der Inhalt der Datei im Arbeitsspeicher platziert werden muss. In diesem Fall wird das tymed-Element der STGMEDIUM-Struktur auf TYMED_ISTREAM festgelegt, und die Datei wird durch eine IStream-Schnittstelle dargestellt. Die Datei kann auch ein Speicher- oder globales Speicherobjekt (TYMED_ISTORAGE oder TYMED_HGLOBAL) sein. Das zugeordnete CFSTR_FILEDESCRIPTOR Format enthält eine FILEDESCRIPTOR-Struktur für jede Datei, die den Namen und die Attribute der Datei angibt.

Das Ziel behandelt die Daten, die einem CFSTR_FILECONTENTS Format zugeordnet sind, als wäre es eine Datei. Wenn das Ziel IDataObject::GetData aufruft, um die Daten zu extrahieren, gibt es eine bestimmte Datei an, indem das Lindex-Element der FORMATTC-Struktur auf den nullbasierten Index der FILEDESCRIPTOR-Struktur der Datei im zugehörigen CFSTR_FILEDESCRIPTOR-Format festgelegt wird. Das Ziel verwendet dann den zurückgegebenen Schnittstellenzeiger oder das globale Speicherhandle, um die Daten zu extrahieren.

CFSTR_FILEDESCRIPTOR

Dieser Formatbezeichner wird mit dem CFSTR_FILECONTENTS Format verwendet, um Daten als Gruppe von Dateien zu übertragen. Diese beiden Formate sind die bevorzugte Methode zum Übertragen von Shell-Objekten, die nicht als Dateisystemdateien gespeichert sind. Beispielsweise können diese Formate verwendet werden, um eine Gruppe von E-Mail-Nachrichten als einzelne Dateien zu übertragen, obwohl jede E-Mail tatsächlich als Datenblock in einer Datenbank gespeichert wird. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine FILEGROUPDESCRIPTOR-Struktur , auf die ein Array folgt, das eine FILEDESCRIPTOR-Struktur für jede Datei in der Gruppe enthält. Für jede FILEDESCRIPTOR-Struktur gibt es ein separates CFSTR_FILECONTENTS Format, das den Inhalt der Datei enthält. Um das CFSTR_FILECONTENTS Format einer bestimmten Datei zu identifizieren, legen Sie den lIndex-Wert der FORMATTC-Struktur auf den nullbasierten Index der FILEDESCRIPTOR-Struktur der Datei fest.

Das CFSTR_FILEDESCRIPTOR-Format wird häufig verwendet, um Daten zu übertragen, als ob es sich um eine Gruppe von Dateien handelt, unabhängig davon, wie es tatsächlich gespeichert wird. Aus Der Perspektive des Ziels stellt jedes CFSTR_FILECONTENTS Format eine einzelne Datei dar und wird entsprechend behandelt. Die Quelle kann die Daten jedoch beliebig speichern. Ein CSFTR_FILECONTENTS-Format kann zwar einer einzelnen Datei entsprechen, kann aber auch Daten darstellen, die von der Quelle aus einer Datenbank oder einem Textdokument extrahiert wurden.

CFSTR_FILENAME

Dieser Formatbezeichner wird verwendet, um eine einzelne Datei zu übertragen. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine einzelne null-beendete Zeichenfolge, die den vollqualifizierten Dateipfad der Datei enthält. Dieses Format wurde durch CF_HDROP ersetzt, wird jedoch aus Gründen der Abwärtskompatibilität mit Windows 3.1-Anwendungen unterstützt.

CFSTR_FILENAMEMAP

Dieser Formatbezeichner wird verwendet, wenn eine Gruppe von Dateien im CF_HDROP Format umbenannt und übertragen wird. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf ein doppeltes null-beendetes Zeichenarray. Dieses Array enthält einen neuen Namen für jede Datei in derselben Reihenfolge, in der die Dateien im zugehörigen CF_HDROP Format aufgeführt werden. Das Format des Zeichenarrays entspricht dem, das von CF_HDROP zum Auflisten der übertragenen Dateien verwendet wird.

CFSTR_MOUNTEDVOLUME

Dieser Formatbezeichner wird verwendet, um einen Pfad auf einem bereitgestellten Volume zu übertragen. Es ähnelt CF_HDROP, enthält aber nur einen einzelnen Pfad und kann die längeren Pfadzeichenfolgen verarbeiten, die möglicherweise erforderlich sind, um einen Pfad darzustellen, wenn das Volume in einem Ordner bereitgestellt wird. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine einzelne null-beendete Zeichenfolge, die den vollqualifizierten Dateipfad enthält. Die Pfadzeichenfolge muss mit einem "\"-Zeichen enden, gefolgt von der endenden NULL.

Vor Windows 2000 konnten Volumes nur auf Laufwerkbuchstaben bereitgestellt werden. Für Windows 2000- und höher-Systeme mit einem formatierten NTFS-Laufwerk können Sie Volumes auch in leeren Ordnern bereitstellen. Mit diesem Feature kann ein Volume bereitgestellt werden, ohne einen Laufwerkbuchstaben aufzunehmen. Das bereitgestellte Volume kann jedes derzeit unterstützte Format verwenden, einschließlich FAT, FAT32, NTFS und CDFS.

Sie können einem Eigenschaftenblatt "Drive Properties" Seiten hinzufügen, indem Sie einen Eigenschaftenblatthandler implementieren. Wenn das Volume auf einem Laufwerkbuchstaben bereitgestellt wird, übergibt die Shell Pfadinformationen an den Handler mit dem CF_HDROP-Format . Mit Windows 2000- und höher-Systemen wird das CF_HDROP-Format verwendet, wenn ein Volume auf einem Laufwerkbuchstaben bereitgestellt wird, genau wie bei früheren Systemen. Wenn jedoch ein Volume in einem Ordner bereitgestellt wird, wird der CFSTR_MOUNTEDVOLUME Formatbezeichner anstelle von CF_HDROP verwendet.

Wenn nur Laufwerkbuchstaben zum Bereitstellen von Volumes verwendet werden, werden nur CF_HDROP verwendet, und vorhandene Eigenschaftenblatthandler funktionieren wie bei früheren Systemen. Wenn der Handler jedoch eine Seite für Volumes anzeigen soll, die in Ordnern und Laufwerkbuchstaben bereitgestellt werden, muss der Handler sowohl die formate CSFTR_MOUNTEDVOLUME als auch CF_HDROP verstehen können.

CFSTR_SHELLIDLIST

Dieser Formatbezeichner wird beim Übertragen der Speicherorte eines oder mehrerer vorhandener Namespaceobjekte verwendet. Sie wird ähnlich wie CF_HDROP verwendet, enthält jedoch PIDLs anstelle von Dateisystempfaden. Mithilfe von PIDLs kann das CFSTR_SHELLIDLIST-Format virtuelle Objekte sowie Dateisystemobjekte verarbeiten. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine CIDA-Struktur .

Das aoffset-Element der CIDA-Struktur ist ein Array mit Offsets am Anfang der ITEMIDLIST-Struktur für jede PIDL, die übertragen wird. Um eine bestimmte PIDL zu extrahieren, bestimmen Sie zuerst den Index. Fügen Sie dann den aoffset-Wert hinzu, der diesem Index entspricht, der Adresse der CIDA-Struktur .

Das erste Element von aoffset enthält einen Offset für die vollqualifizierte PIDL eines übergeordneten Ordners. Wenn diese PIDL leer ist, ist der übergeordnete Ordner der Desktop. Jedes der verbleibenden Elemente des Arrays enthält einen Offset zu einem der zu übertragenden PIDLs. Alle diese PIDLs sind relativ zur PIDL des übergeordneten Ordners.

Die folgenden beiden Makros können verwendet werden, um PIDLs aus einer CIDA-Struktur abzurufen. Der erste verwendet einen Zeiger auf die Struktur und ruft die PIDL des übergeordneten Ordners ab. Die zweite verwendet einen Zeiger auf die Struktur und ruft eine der anderen PIDLs ab, die durch ihren nullbasierten Index identifiziert werden.

#define GetPIDLFolder(pida) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[0])

#define GetPIDLItem(pida, i) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[i+1])

Hinweis

Der Von diesen Makros zurückgegebene Wert ist ein Zeiger auf die ITEMIDLIST-Struktur der PIDL. Da diese Strukturen in der Länge variieren, müssen Sie das Ende der Struktur bestimmen, indem Sie die SHITEMID-Strukturen der ITEMIDLIST-Struktur durchlaufen, bis Sie die Zwei-Byte-NULL erreicht haben, die das Ende markiert.

CFSTR_SHELLIDLISTOFFSET

Dieser Formatbezeichner wird mit Formaten wie CF_HDROP, CFSTR_SHELLIDLIST und CFSTR_FILECONTENTS verwendet, um die Position einer Gruppe von Objekten nach einer Übertragung anzugeben. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf ein Array von POINT-Strukturen . Die erste Struktur gibt die Bildschirmkoordinaten in Pixeln der oberen linken Ecke des Rechtecks an, das die Gruppe einschließt. Der Rest der Strukturen gibt die Positionen der einzelnen Objekte relativ zur Position der Gruppe an. Sie müssen in der gleichen Reihenfolge sein wie die Objekte, die zum Auflisten der Objekte im zugeordneten Format verwendet werden.

Formate für das Übertragen virtueller Objekte

Das CFSTR_SHELLIDLIST Format kann zum Übertragen von Dateisystem- und virtuellen Objekten verwendet werden. Es gibt jedoch auch mehrere spezielle Formate zum Übertragen bestimmter Typen virtueller Objekte.

CFSTR_NETRESOURCES

Dieser Formatbezeichner wird beim Übertragen von Netzwerkressourcen, z. B. einer Domäne oder eines Servers, verwendet. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine NRESARRAY-Struktur . Das nr-Element dieser Struktur gibt eine NETRESOURCE-Struktur an, deren lpRemoteName-Member eine null-beendete Zeichenfolge enthält, die die Netzwerkressource identifiziert. Das Ablageziel kann dann die Daten mit einem der Windows Networking (WNet)-API-Funktionen wie WNetAddConnection verwenden, um Netzwerkvorgänge für das Objekt auszuführen.

CFSTR_PRINTERGROUP

Dieser Formatbezeichner wird beim Übertragen der Anzeigenamen von Druckern verwendet. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf eine Zeichenfolge im gleichen Format wie bei CF_HDROP. Das pFiles-Element der DROPFILES-Struktur enthält jedoch einen oder mehrere Anzeigenamen von Druckern anstelle von Dateipfaden.

CFSTR_INETURL

Dieser Formatbezeichner ersetzt CFSTR_SHELLURL (veraltet). Wenn Ihre Anwendung ZWISCHENablage-URLs bearbeiten soll, verwenden Sie CFSTR_INETURL anstelle von CFSTR_SHELLURL (veraltet). Dieses Format bietet die beste Darstellung der Zwischenablage einer einzelnen URL. Wenn UNICODE nicht definiert ist, ruft die Anwendung die CF_TEXT/CFSTR_SHELLURL Version der URL ab. Wenn UNICODE definiert ist, ruft die Anwendung die CF_UNICODE Version der URL ab.

CFSTR_SHELLURL (veraltet)

Hinweis

Dieser Formatbezeichner ist veraltet; verwenden Sie stattdessen CFSTR_INETURL.

 

Formate für die Kommunikation zwischen Quelle und Ziel

Diese Formatbezeichner ermöglichen die Kommunikation zwischen Quelle und Ziel. Die Formate begleiten die Daten und geben Anwendungen eine größere Kontrolle über Verschieben-Kopieren-Einfügen- oder Drag-and-Drop-Vorgänge mit Shell-Objekten.

CFSTR_INDRAGLOOP

Dieser Formatbezeichner wird von einem Datenobjekt verwendet, um anzugeben, ob es sich in einer Drag-and-Drop-Schleife befindet. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf einen DWORD-Wert . Wenn der DWORD-Wert ungleich Null ist, befindet sich das Datenobjekt in einer Drag-and-Drop-Schleife. Wenn der Wert auf Null festgelegt ist, befindet sich das Datenobjekt nicht in einer Drag-and-Drop-Schleife.

Einige Dropziele rufen möglicherweise IDataObject::GetData auf und versuchen, Daten zu extrahieren, während sich das Objekt noch in der Drag-and-Drop-Schleife befindet. Das vollständige Rendern des Objekts für jedes solche Vorkommen kann dazu führen, dass der Ziehcursor angehalten wird. Wenn das Datenobjekt CFSTR_INDRAGLOOP unterstützt, kann das Ziel stattdessen dieses Format verwenden, um den Status der Drag-and-Drop-Schleife zu überprüfen und speicherintensives Rendern des Objekts zu vermeiden, bis es tatsächlich gelöscht wird. Die Formate, die für das Rendern intensiv sind, sollten weiterhin in den FORMATTC-Enumerationsgeber und in Aufrufen von IDataObject::QueryGetData enthalten sein. Wenn das Datenobjekt CFSTR_INDRAGLOOP nicht festgelegt hat, sollte es so handeln, als ob der Wert auf Null festgelegt ist.

CFSTR_LOGICALPERFORMEDDROPEFFECT

Version 5.0.Dieser Formatbezeichner ermöglicht es einer Dropquelle, die IDataObject::GetData-Methode des Datenobjekts aufzurufen, um das Ergebnis einer Shell-Datenübertragung zu bestimmen. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf ein DWORD, das einen DROPEFFECT-Wert enthält.

Der CFSTR_PERFORMEDDROPEFFECT Formatbezeichner sollte es dem Ziel ermöglichen, dem Datenobjekt anzugeben, welcher Vorgang tatsächlich ausgeführt wurde. Die Shell verwendet jedoch nach Möglichkeit optimierte Verschiebungen für Dateisystemobjekte. In diesem Fall legt die Shell normalerweise den CFSTR_PERFORMEDDROPEFFECT Wert auf DROPEFFECT_NONE fest, um dem Datenobjekt anzugeben, dass die ursprünglichen Daten gelöscht wurden. Daher kann die Quelle den CFSTR_PERFORMEDDROPEFFECT Wert nicht verwenden, um zu bestimmen, welcher Vorgang stattgefunden hat. Obwohl die meisten Quellen diese Informationen nicht benötigen, gibt es einige Ausnahmen. Auch wenn optimierte Verschiebungen die Notwendigkeit zum Löschen von Daten für eine Quelle vermeiden, muss die Quelle möglicherweise dennoch eine verknüpfte Datenbank aktualisieren, um anzugeben, dass die Dateien verschoben oder kopiert wurden.

Wenn eine Quelle wissen muss, welcher Vorgang ausgeführt wurde, kann sie die IDataObject::GetData-Methode des Datenobjekts aufrufen und das CFSTR_LOGICALPERFORMEDDROPEFFECT Format anfordern. Dieses Format spiegelt im Wesentlichen wider, was nach Abschluss des Vorgangs vom Benutzer aus der Sicht des Benutzers geschieht. Wenn eine neue Datei erstellt und die Ursprüngliche Datei gelöscht wird, wird dem Benutzer ein Verschiebungsvorgang angezeigt, und der Datenwert des Formats wird auf DROPEFFECT_MOVE festgelegt. Wenn die Ursprüngliche Datei noch vorhanden ist, wird dem Benutzer ein Kopiervorgang angezeigt, und der Datenwert des Formats wird auf DROPEFFECT_COPY festgelegt. Wenn eine Verknüpfung erstellt wurde, wird der Datenwert des Formats DROPEFFECT_LINK.

CFSTR_PASTESUCCEEDED

Dieser Formatbezeichner wird vom Ziel verwendet, um das Datenobjekt über die IDataObject::SetData-Methode zu informieren, dass ein Löschvorgang erfolgreich war. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf ein DWORD , das einen DROPEFFECT-Wert enthält. Dieses Format wird verwendet, um das Datenobjekt zu benachrichtigen, dass er den Ausschneidevorgang abschließen und die ursprünglichen Daten ggf. löschen soll. Weitere Informationen finden Sie unter "Delete-on-Paste Operations".

CFSTR_PERFORMEDDROPEFFECT

Dieser Formatbezeichner wird vom Ziel verwendet, um das Datenobjekt über die IDataObject::SetData-Methode des Ergebnisses einer Datenübertragung zu informieren. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf einen DWORD-Wert , der auf den entsprechenden DROPEFFECT-Wert festgelegt ist, normalerweise DROPEFFECT_MOVE oder DROPEFFECT_COPY.

Dieses Format wird normalerweise verwendet, wenn das Ergebnis eines Vorgangs entweder verschoben oder kopiert werden kann, z. B. in einem optimierten Verschiebungs - oder Löschvorgang beim Einfügen. Es bietet eine zuverlässige Möglichkeit für das Ziel, dem Datenobjekt mitzuteilen, was tatsächlich passiert ist. Es wurde eingeführt, da der von DoDragDrop zurückgegebene Wert von pdwEffect nicht zuverlässig angibt, welche Operation stattgefunden hatte. Das CFSTR_PERFORMEDDROPEFFECT Format ist die zuverlässige Methode, um anzugeben, dass eine nicht optimierte Verschiebung stattgefunden hat.

CFSTR_PREFERREDDROPEFFECT

Dieser Formatbezeichner wird von der Quelle verwendet, um anzugeben, ob die bevorzugte Methode der Datenübertragung verschieben, kopieren oder verknüpfen ist. Ein Dropziel fordert dieses Format an, indem die IDataObject::GetData-Methode des Datenobjekts aufgerufen wird. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf einen DWORD-Wert . Dieser Wert wird auf DROPEFFECT_MOVE festgelegt, wenn ein Verschiebungsvorgang bevorzugt wird, DROPEFFECT_COPY, wenn ein Kopiervorgang bevorzugt wird, oder DROPEFFECT_LINK, wenn ein Verknüpfungsvorgang bevorzugt wird.

Dieses Feature wird verwendet, wenn eine Quelle einen Verschiebungs- oder Kopiervorgang unterstützen kann. Es verwendet das CFSTR_PREFERREDDROPEFFECT-Format , um seine Vorliebe an das Ziel zu übermitteln. Da das Ziel nicht verpflichtet ist, die Anforderung zu berücksichtigen, muss das Ziel die IDataObject::SetData-Methode der Quelle mit einem CFSTR_PERFORMEDDROPEFFECT Format aufrufen, um dem Datenobjekt mitzuteilen, welcher Vorgang tatsächlich ausgeführt wurde.

Bei einem Löschvorgang wird das CFSTR_PREFERREDDROPEFFECT Format verwendet, um dem Ziel mitzuteilen, ob die Quelle einen Ausschnitt oder eine Kopie ausgeführt hat. Mit einem Drag-and-Drop-Vorgang können Sie CFSTR_PREFERREDDROPEFFECT Format verwenden, um die Aktion der Shell anzugeben. Wenn dieses Format nicht vorhanden ist, führt die Shell basierend auf dem Kontext eine Standardaktion aus. Wenn ein Benutzer beispielsweise eine Datei von einem Volume zieht und sie auf einem anderen Volume abbricht, besteht die Standardaktion der Shell darin, die Datei zu kopieren. Indem Sie ein CFSTR_PREFERREDDROPEFFECT Format in das Datenobjekt einschließen, können Sie die Standardaktion außer Kraft setzen und die Shell explizit anweisen, die Datei zu kopieren, zu verschieben oder zu verknüpfen. Wenn der Benutzer mit der rechten Schaltfläche ziehen möchte, gibt CFSTR_PREFERREDDROPEFFECT Format den Standardbefehl im Kontextmenü "Drag-and-Drop " an. Der Benutzer kann weiterhin andere Befehle im Menü auswählen.

Vor Microsoft Internet Explorer 4.0 hat eine Anwendung angegeben, dass sie Verknüpfungsdateitypen überträgt, indem sie FD_LINKUI im dwFlags Member der FILEDESCRIPTORStruktur festlegt. Ziele mussten dann einen potenziell zeitaufwendigen Aufruf von IDataObject::GetData verwenden, um herauszufinden, ob das FD_LINKUI Flag festgelegt wurde. Die bevorzugte Methode, um anzugeben, dass Verknüpfungen übertragen werden, besteht nun darin, das auf DROPEFFECT_LINK festgelegte CFSTR_PREFERREDDROPEFFECT Format zu verwenden. Aus Gründen der Abwärtskompatibilität mit älteren Systemen sollten Quellen jedoch weiterhin das FD_LINKUI Flag festlegen.

CFSTR_TARGETCLSID

Dieser Formatbezeichner wird von einem Ziel verwendet, um die CLSID der Quelle bereitzustellen. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf die CLSID-GUID des Drop-Ziels.

Dieses Format wird hauptsächlich verwendet, um zuzulassen, dass Objekte gelöscht werden, indem sie in den Papierkorb gezogen werden. Wenn ein Objekt im Papierkorb abgelegt wird, wird die IDataObject::SetData-Methode der Quelle mit einem CFSTR_TARGETCLSID Format aufgerufen, das auf die CLSID (CLSID_RecycleBin) des Papierkorbs festgelegt ist. Die Quelle kann dann das ursprüngliche Objekt löschen.

CFSTR_UNTRUSTEDDRAGDROP

Dieser Formatbezeichner wird von Windows Internet Explorer und der Windows Shell verwendet, um einen Mechanismus bereitzustellen, über den Drag-and-Drop-Vorgänge blockiert oder zur Eingabe von Drag-and-Drop-Vorgängen aufgefordert werden, die aus Internet Explorer in Verbindung mit dem flag URLACTION_SHELL_ENHANCED_DRAGDROP_SECURITY stammen.

CFSTR_UNTRUSTEDDRAGDROP wird von der Quelle eines Drag-and-Drop-Vorgangs hinzugefügt, um anzugeben, dass das Datenobjekt möglicherweise nicht vertrauenswürdige Daten enthält. Die Daten werden durch eine STGMEDIUM-Struktur dargestellt, die ein globales Speicherobjekt enthält. Das hGlobal-Element der Struktur verweist auf einen DWORD-Satz auf ein entsprechendes URL-Aktionsflags , um eine Richtlinienüberprüfung über die IInternetSecurityManager::P rocessUrlAction-Methode mithilfe des PUAF_ENFORCERESTRICTED-Flags zu verursachen.

DragWindow

Dieses Format wird in einem Drag-and-Drop-Vorgang verwendet, um das Ziehbild (Fenster) eines Objekts zu identifizieren, damit die visuellen Informationen dynamisch aktualisiert werden können. Wenn ein Objekt über ein Drop-Ziel gezogen wird, aktualisiert eine Anwendung die DROPDESCRIPTION-Struktur als Reaktion auf die IDropTarget::D ragOver - oder IDropSource::GiveFeedback-Methode . Die DROPDESCRIPTION wird mit einem neuen DROPIMAGETYPE-Wert aktualisiert, der die Dekoration angibt, die auf das visuelle Element des Ziehfensters angewendet werden soll. Beispielsweise ein Hinweis darauf, dass die Datei kopiert wird, anstatt verschoben zu werden oder dass das Objekt nicht an diesen Speicherort abgelegt werden kann. Solange das Objekt jedoch eine DDWM_UPDATEWINDOW Nachricht empfängt, werden die visuellen Elemente nicht aktualisiert. Dieses Format stellt den HWND des Empfängerziehfensters an den Absender der DDWM_UPDATEWINDOW Nachricht bereit .

Die Zwischenablagedaten sind vom Typ TYMED_HGLOBAL. Es handelt sich um eine DWORD-Darstellung eines HWND. Die Daten können an die in Basetsd.h definierte Funktion ULongToHandle übergeben werden, um eine 64-Bit-HWND für die Verwendung auf 64-Bit-Windows bereitzustellen.

Dieses Format erfordert keine Einbindung von Shlobj.h.