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 sie Shell-Vorgänge wie optimiertes Verschieben und delete_on_paste unterstützen. Shelldaten sind immer in einem Datenobjekt enthalten, das eine FORMATETC-Struktur als allgemeinere Möglichkeit zur Charakterisierung von Daten verwendet. Das cfFormat-Element der Struktur ist auf das Zwischenablageformat für das jeweilige Datenelement festgelegt. Die anderen Member stellen zusätzliche Informationen bereit, z. B. den Datenübertragungsmechanismus. Die Daten sind in einer begleitenden STGMEDIUM-Struktur enthalten.

Hinweis

Standard-Zwischenablageformatbezeichner haben das Format CF_XXX. Ein gängiges Beispiel ist CF_TEXT, das für die Übertragung 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 haben sie das Format CFSTR_XXX. 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 von dem 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 Zwischenablageformatwert zurück, der dann als cfFormat-Member einer FORMATETC-Struktur verwendet werden kann.

 

Die Shell-Zwischenablageformate sind hier in drei Gruppen unterteilt, je nachdem, wie sie verwendet werden.

Formate für die Übertragung von Dateisystemobjekten

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

CF_HDROP

Dieses Zwischenablageformat wird verwendet, wenn die Speicherorte einer Gruppe vorhandener Dateien übertragen werden. Im Gegensatz zu den anderen Shell-Formaten ist es vordefiniert, sodass registerClipboardFormat nicht aufgerufen werden muss. 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-Member .

Das pFiles-Element der DROPFILES-Struktur enthält einen Offset auf ein Array mit doppeltem NULL-Endzeichen, 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 beendenden 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 NULL-Zeichen darzustellen, nicht die Literalzeichen, die enthalten sein sollen.

Wenn das Objekt im Rahmen 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 gelöscht wurde. Sie können DragQueryPoint verwenden, um die Cursorkoordinaten zu extrahieren.

Wenn dieses Format in einem Datenobjekt vorhanden ist, simuliert eine OLE-Ziehschleife WM_DROPFILES Funktionalität mit Nicht-OLE-Ablagezielen. 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 wie eine Datei zu übertragen, unabhängig davon, wie sie tatsächlich gespeichert werden. Die Daten bestehen aus einer STGMEDIUM-Struktur , die den Inhalt einer Datei darstellt. Die Datei wird normalerweise als Streamobjekt dargestellt, wodurch vermieden wird, dass der Inhalt der Datei im Arbeitsspeicher abgelegt 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ären es eine Datei. Wenn das Ziel IDataObject::GetData aufruft, um die Daten zu extrahieren, gibt es eine bestimmte Datei an, indem es den Lindex-Member der FORMATETC-Struktur auf den nullbasierten Index der FILEDESCRIPTOR-Struktur der Datei im begleitenden CFSTR_FILEDESCRIPTOR-Format festlegt. 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. Diese Formate können beispielsweise 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 , gefolgt von einem Array, 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 so zu übertragen, als ob es sich um eine Gruppe von Dateien handelt, unabhängig davon, wie sie tatsächlich gespeichert werden. Aus Sicht des Ziels stellt jedes CFSTR_FILECONTENTS-Format eine einzelne Datei dar und wird entsprechend behandelt. Die Quelle kann die Daten jedoch auf beliebige Weise speichern. Ein CSFTR_FILECONTENTS-Format kann zwar einer einzelnen Datei entsprechen, aber es könnte beispielsweise 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 von CF_HDROP abgelöst, 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 in CF_HDROP Format umbenannt und übertragen wird. Die Daten bestehen aus einer STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Der hGlobal-Member der Struktur verweist auf ein Array mit doppeltem NULL-Endzeichen. 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 sind. Das Format des Zeichenarrays entspricht dem Format, 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. Der hGlobal-Member der Struktur verweist auf eine einzelne null-endende 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 eingebunden werden. Für Systeme mit Windows 2000 und höher mit einem NTFS-formatierten Laufwerk können Sie Volumes auch in leere Ordner einbinden. Mit dieser Funktion kann ein Volume eingebunden 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 seiten zu einem Eigenschaftenblatt für Laufwerkeigenschaften hinzufügen, indem Sie einen Eigenschaftenblatthandler implementieren. Wenn das Volume auf einem Laufwerkbuchstaben bereitgestellt wird, übergibt die Shell Pfadinformationen im CF_HDROP Format an den Handler. Bei Systemen unter Windows 2000 und höher wird das format CF_HDROP verwendet, wenn ein Volume auf einem Laufwerkbuchstaben bereitgestellt wird, genau wie bei früheren Systemen. Wenn jedoch ein Volume in einem Ordner eingebunden wird, wird anstelle von CF_HDROP die CFSTR_MOUNTEDVOLUME Formatbezeichner verwendet.

Wenn nur Laufwerkbuchstaben zum Einbinden von Volumes verwendet werden, werden nur CF_HDROP verwendet, und vorhandene Eigenschaftenblatthandler funktionieren wie bei früheren Systemen. Wenn Ihr Handler jedoch eine Seite für Volumes anzeigen soll, die in Ordnern eingebunden sind, sowie Laufwerkbuchstaben, muss der Handler in der Lage sein, sowohl das CSFTR_MOUNTEDVOLUME- als auch das CF_HDROP-Format zu verstehen.

CFSTR_SHELLIDLIST

Dieser Formatbezeichner wird verwendet, wenn die Speicherorte eines oder mehrerer vorhandener Namespaceobjekte übertragen werden. Es wird ähnlich wie CF_HDROP verwendet, enthält jedoch PIDLs anstelle von Dateisystempfaden. Mithilfe von PIDLs kann das CFSTR_SHELLIDLIST Format sowohl virtuelle Objekte als auch Dateisystemobjekte verarbeiten. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Der hGlobal-Member der Struktur verweist auf eine CIDA-Struktur .

Das aoffset-Element der CIDA-Struktur ist ein Array, das Offsets zum Anfang der ITEMIDLIST-Struktur für jede PIDL enthält, die übertragen wird. Um eine bestimmte PIDL zu extrahieren, bestimmen Sie zunächst dessen 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 zur vollqualifizierten 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 einer 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. Die 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 Wert, der von diesen Makros zurückgegeben wird, 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 einzelnen SHITEMID-Strukturen der ITEMIDLIST-Struktur durchlaufen, bis Sie den zwei-Byte-NULL-Wert erreichen, der 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. Der hGlobal-Member der Struktur verweist auf ein Array von POINT-Strukturen . Die erste Struktur gibt die Bildschirmkoordinaten der oberen linken Ecke des Rechtecks, das die Gruppe umschließt, in Pixel an. Die restlichen Strukturen geben die Positionen der einzelnen Objekte relativ zur Position der Gruppe an. Sie müssen in derselben Reihenfolge wie die zum Auflisten der Objekte im zugeordneten Format verwendet werden.

Formate für die Übertragung virtueller Objekte

Das CFSTR_SHELLIDLIST-Format kann zum Übertragen von Dateisystem- und virtuellen Objekten verwendet werden. Es gibt jedoch auch mehrere spezielle Formate für die Übertragung bestimmter Typen von virtuellen Objekten.

CFSTR_NETRESOURCES

Dieser Formatbezeichner wird beim Übertragen von Netzwerkressourcen verwendet, z. B. eine Domäne oder ein Server. Die Daten sind eine STGMEDIUM-Struktur , die ein globales Speicherobjekt enthält. Der hGlobal-Member der Struktur verweist auf eine NRESARRAY-Struktur . Der member nr dieser Struktur gibt eine NETRESOURCE-Struktur an, deren lpRemoteName-Member eine null-endende Zeichenfolge enthält, die die Netzwerkressource identifiziert. Das Ablageziel kann dann die Daten mit einer beliebigen Windows-Netzwerkfunktionen (WNet) verwenden, z. B. WNetAddConnection, 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. Der hGlobal-Member 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 einer einzelnen URL in der Zwischenablage. 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 bieten Anwendungen ein größeres Maß an Kontrolle über Vorgänge zum Verschieben, Kopieren, Einfügen oder Ziehen und Ablegen von 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. Der hGlobal-Member 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 0 (null) festgelegt ist, befindet sich das Datenobjekt nicht in einer Drag-and-Drop-Schleife.

Einige Ablageziele können IDataObject::GetData aufrufen und versuchen, Daten zu extrahieren, während sich das Objekt noch innerhalb 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 die status der Drag-and-Drop-Schleife zu überprüfen und speicherintensives Rendern des Objekts zu vermeiden, bis es tatsächlich gelöscht wird. Die zu rendernden Formate sollten weiterhin im FORMATTC-Enumerator und in Aufrufen von IDataObject::QueryGetData enthalten sein. Wenn das Datenobjekt CFSTR_INDRAGLOOP nicht festgelegt, sollte es so handeln, als wäre der Wert auf 0 (null) festgelegt.

CFSTR_LOGICALPERFORMEDDROPEFFECT

Version 5.0. Dieser Formatbezeichner ermöglicht es einer Ablagequelle, 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. Der hGlobal-Member der Struktur verweist auf ein DWORD, das einen DROPEFFECT-Wert enthält.

Der CFSTR_PERFORMEDDROPEFFECT Formatbezeichners sollte dem Ziel ermöglichen, dem Datenobjekt anzugeben, welcher Vorgang tatsächlich stattgefunden hat. 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. Für instance muss die Quelle möglicherweise dennoch eine zugehörige 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 aus der Sicht des Benutzers geschieht, nachdem der Vorgang abgeschlossen ist. Wenn eine neue Datei erstellt und die ursprüngliche Datei gelöscht wird, wird dem Benutzer ein Verschiebungsvorgang angezeigt, und der Datenwert des Formats ist auf DROPEFFECT_MOVE festgelegt. Wenn die ursprüngliche Datei noch vorhanden ist, wird dem Benutzer ein Kopiervorgang angezeigt, und der Datenwert des Formats ist auf DROPEFFECT_COPY festgelegt. Wenn ein Link erstellt wurde, wird der Datenwert des Formats DROPEFFECT_LINK.

CFSTR_PASTESUCCEEDED

Dieser Formatbezeichner wird vom Ziel verwendet, um das Datenobjekt über seine IDataObject::SetData-Methode darüber zu informieren, dass ein Delete-on-Paste-Vorgang 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 darüber zu benachrichtigen, dass es den Ausschnittvorgang abschließen und die ursprünglichen Daten bei Bedarf löschen soll. Weitere Informationen finden Sie unter Delete-on-Paste-Vorgänge.

CFSTR_PERFORMEDDROPEFFECT

Dieser Formatbezeichner wird vom Ziel verwendet, um das Datenobjekt über seine IDataObject::SetData-Methode über das Ergebnis 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 verschieben oder kopieren kann, z. B. bei einem optimierten Vorgang zum Verschieben oder Löschen 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, weil der von DoDragDrop zurückgegebene Wert von pdwEffect nicht zuverlässig angibt, welcher Vorgang stattgefunden hatte. Das CFSTR_PERFORMEDDROPEFFECT-Format ist die zuverlässige Methode, um anzugeben, dass eine unoptimierte Verschiebung stattgefunden hat.

CFSTR_PREFERREDDROPEFFECT

Dieser Formatbezeichner wird von der Quelle verwendet, um anzugeben, ob die bevorzugte Methode der Datenübertragung das Verschieben oder Kopieren 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, oder DROPEFFECT_COPY, wenn ein Kopiervorgang bevorzugt wird.

Dieses Feature wird verwendet, wenn eine Quelle entweder einen Verschiebungs- oder Kopiervorgang unterstützen kann. Es verwendet das CFSTR_PREFERREDDROPEFFECT-Format , um seine Präferenz an das Ziel zu kommunizieren. Da das Ziel nicht verpflichtet ist, die Anforderung zu erfüllen, 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 Vorgang zum Löschen beim Einfügen wird das CFSTR_PREFERREDDROPFORMAT-Format verwendet, um dem Ziel mitzuteilen, ob die Quelle einen Ausschnitt oder eine Kopie durchgeführt hat. Bei einem Drag-and-Drop-Vorgang können Sie CFSTR_PREFERREDDROPFORMAT verwenden, um die Aktion der Shell anzugeben. Wenn dieses Format nicht vorhanden ist, führt die Shell eine Standardaktion basierend auf dem Kontext aus. Wenn ein Benutzer instance eine Datei von einem Volume zieht und sie auf einem anderen Volume abwirft, besteht die Standardaktion der Shell darin, die Datei zu kopieren. Indem Sie ein CFSTR_PREFERREDDROPFORMAT-Format in das Datenobjekt einschließen, können Sie die Standardaktion überschreiben 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_PREFERREDDROPFORMAT den Standardbefehl im Kontextmenü zum Ziehen und Ablegen an. Der Benutzer kann weiterhin andere Befehle im Menü auswählen.

Vor der Microsoft Internet Explorer 4.0 hat eine Anwendung angegeben, dass sie Verknüpfungsdateitypen überträgt, indem sie FD_LINKUI im dwFlags-Element der FILEDESCRIPTOR-Struktur festgelegt hat. 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 darin, das CFSTR_PREFERREDDROPEFFECT Format zu verwenden, das auf DROPEFFECT_LINK festgelegt ist. Aus Gründen der Abwärtskompatibilität mit älteren Systemen sollten Quellen jedoch weiterhin das flag FD_LINKUI festlegen.

CFSTR_TARGETCLSID

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

Dieses Format wird in erster Linie verwendet, um das Löschen von Objekten durch Ziehen in den Papierkorb zu ermöglichen. Wenn ein Objekt im Papierkorb abgelegt wird, wird die IDataObject::SetData-Methode der Quelle aufgerufen, wobei ein CFSTR_TARGETCLSID Format auf die CLSID des Papierkorbs (CLSID_RecycleBin) 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 Vorgänge per Drag-and-Drop blockiert oder aufgefordert werden können, die aus dem Internet Explorer in Verbindung mit dem flag URLACTION_SHELL_ENHANCED_DRAGDROP_SECURITY stammen.

CFSTR_UNTRUSTEDDRAGDROP von der Quelle eines Drag-and-Drop-Vorgangs hinzugefügt wird, 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-Wert , der auf ein entsprechendes URL-Aktionsflag festgelegt ist, um eine Richtlinienüberprüfung über die IInternetSecurityManager::P rocessUrlAction-Methode unter Verwendung des PUAF_ENFORCERESTRICTED-Flags zu veranlassen.

DragWindow

Dieses Format wird in einem Drag-and-Drop-Vorgang verwendet, um das Ziehbild (Fenster) eines Objekts zu identifizieren, sodass seine visuellen Informationen dynamisch aktualisiert werden können. Wenn ein Objekt über ein Ablageziel gezogen wird, aktualisiert eine Anwendung ihre DROPDESCRIPTION-Struktur als Reaktion auf die IDropTarget::D ragOver - oder IDropSource::GiveFeedback-Methode . DROPDESCRIPTION wird mit einem neuen DROPIMAGETYPE-Wert aktualisiert, der die Dekoration angibt, die auf das Visual des Ziehfensters angewendet werden soll. für instance ein Hinweis darauf, dass die Datei kopiert und nicht verschoben wird oder dass das Objekt nicht an diesem Speicherort abgelegt werden kann. Bis das Objekt jedoch eine DDWM_UPDATEWINDOW-Meldung empfängt, werden die Visuals nicht aktualisiert. Dieses Format stellt die HWND des Empfängerfensters bereit, um auf den Absender der DDWM_UPDATEWINDOW Nachricht zu ziehen.

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

Für dieses Format ist die Aufnahme von Shlobj.h nicht erforderlich.