Freigeben über


CMINVOKECOMMANDINFOEX-Struktur (shobjidl_core.h)

Enthält erweiterte Informationen zu einem Kontextmenübefehl. Diese Struktur ist eine erweiterte Version von CMINVOKECOMMANDINFO , die die Verwendung von Unicode-Werten ermöglicht.

Syntax

typedef struct _CMINVOKECOMMANDINFOEX {
  DWORD   cbSize;
  DWORD   fMask;
  HWND    hwnd;
  LPCSTR  lpVerb;
  LPCSTR  lpParameters;
  LPCSTR  lpDirectory;
  int     nShow;
  DWORD   dwHotKey;
  HANDLE  hIcon;
  LPCSTR  lpTitle;
  LPCWSTR lpVerbW;
  LPCWSTR lpParametersW;
  LPCWSTR lpDirectoryW;
  LPCWSTR lpTitleW;
  POINT   ptInvoke;
} CMINVOKECOMMANDINFOEX;

Member

cbSize

Art: DWORD

Die Größe dieser Struktur in Bytes. Dieses Element sollte von Aufrufern von IContextMenu::InvokeCommand ausgefüllt und von den Implementierungen getestet werden, um zu wissen, dass es sich bei der Struktur um eine CMINVOKECOMMANDINFOEX-Struktur und nicht um CMINVOKECOMMANDINFOINFO handelt.

fMask

Art: DWORD

Null oder mindestens eins der folgenden Flags werden festgelegt, um das gewünschte Verhalten anzugeben und anzugeben, dass andere Felder in der Struktur verwendet werden sollen.

CMIC_MASK_HOTKEY

Das dwHotKey-Element ist gültig.

CMIC_MASK_ICON

Das hIcon-Element ist gültig. Ab Windows Vista wird dieses Flag nicht verwendet.

CMIC_MASK_FLAG_NO_UI

Die Implementierung von IContextMenu::InvokeCommand wird daran gehindert, Benutzeroberflächenelemente (z. B. Fehlermeldungen) beim Ausführen eines Befehls anzuzeigen.

CMIC_MASK_UNICODE

Der Kontextmenühandler sollte die Elemente lpVerbW, lpParametersW, lpDirectoryW und lpTitleW anstelle ihrer ANSI-Entsprechungen verwenden. Da einige Kontextmenühandler Unicode möglicherweise nicht unterstützen, sollten Sie auch gültige ANSI-Zeichenfolgen in den Elementen lpVerb, lpParameters, lpDirectory und lpTitle übergeben.

CMIC_MASK_NO_CONSOLE

Wenn ein Kontextmenühandler einen neuen Prozess erstellen muss, erstellt er normalerweise eine neue Konsole. Das Festlegen des CMIC_MASK_NO_CONSOLE-Flags unterdrückt die Erstellung einer neuen Konsole.

CMIC_MASK_HASLINKNAME

Das lpTitle-Element enthält einen vollständigen Pfad zu einer Verknüpfungsdatei. Verwenden Sie in Verbindung mit CMIC_MASK_HASTITLE.

Hinweis Dieser Wert wird in Windows Vista und höheren Systemen nicht unterstützt.
 

CMIC_MASK_HASTITLE

Das lpTitle-Element ist gültig.

Hinweis Dieser Wert wird in Windows Vista und höheren Systemen nicht unterstützt.
 

CMIC_MASK_FLAG_SEP_VDM

Dieses Flag ist nur gültig, wenn auf eine 16-Bit-Windows-basierte Anwendung verwiesen wird. Wenn festgelegt, wird die Anwendung, auf die die Verknüpfung verweist, auf einen privaten virtuellen DOS-Computer (VDM) ausgeführt. Siehe Hinweise.

CMIC_MASK_ASYNCOK

Die Implementierung von IContextMenu::InvokeCommand kann einen neuen Thread oder Prozess zum Verarbeiten des Aufrufs ausgliedern und muss bei Abschluss der aufgerufenen Funktion nicht blockiert werden. Wenn das Verb beispielsweise "delete" lautet, wird der IContextMenu::InvokeCommand-Aufruf möglicherweise zurückgegeben, bevor alle Elemente gelöscht wurden. Da dies eine Empfehlung ist, kann das Aufrufen von Anwendungen, die dieses Flag angeben, nicht garantieren, dass diese Anforderung erfüllt wird, wenn sie nicht mit der Implementierung des Von ihnen aufgerufenen Verbs vertraut sind.

CMIC_MASK_NOASYNC

Windows Vista und höher. Die Implementierung von IContextMenu::InvokeCommand sollte synchron sein und nicht zurückgegeben werden, bevor sie abgeschlossen ist. Da dies empfohlen wird, kann das Aufrufen von Anwendungen, die dieses Flag angeben, nicht garantieren, dass diese Anforderung erfüllt wird, wenn sie mit der Implementierung des von ihnen aufgerufenen Verbs nicht vertraut sind.

CMIC_MASK_SHIFT_DOWN

Die UMSCHALTTASTE wird gedrückt. Verwenden Sie dies, anstatt den aktuellen Zustand der Tastatur abzurufen, der sich seit dem Aufruf des Verbs möglicherweise geändert hat.

CMIC_MASK_CONTROL_DOWN

Die STRG-TASTE wird gedrückt. Verwenden Sie dies, anstatt den aktuellen Zustand der Tastatur abzurufen, der sich seit dem Aufruf des Verbs möglicherweise geändert hat.

CMIC_MASK_FLAG_LOG_USAGE

Gibt an, dass die Implementierung von IContextMenu::InvokeCommand möglicherweise das Element nachverfolgen möchte, das für Features wie das Menü "Zuletzt verwendete Dokumente" aufgerufen wird.

CMIC_MASK_NOZONECHECKS

Führen Sie keine Zonenüberprüfung durch. Mit diesem Flag kann ShellExecuteEx die zonenüberprüfung umgehen, die von IAttachmentExecute eingerichtet wurde.

CMIC_MASK_PTINVOKE

Das ptInvoke-Element ist gültig.

hwnd

Typ: HWND

Ein Handle für das Fenster, das der Besitzer des Kontextmenüs ist. Eine Erweiterung kann dieses Handle auch als Besitzer aller angezeigten Meldungs- oder Dialogfelder verwenden. Aufrufer müssen einen legitimen HWND angeben, der als Besitzerfenster für jede angezeigte Benutzeroberfläche verwendet werden kann. Wenn beim Aufrufen von einem UI-Thread (einer mit bereits erstellten Fenstern) kein HWND angegeben wird, führt dies zu einer erneuten Registrierung und möglichen Fehlern bei der Implementierung eines IContextMenu::InvokeCommand-Aufrufs .

lpVerb

Typ: LPCSTR

Die Adresse einer null-beendeten Zeichenfolge, die den sprachunabhängigen Namen des auszuführenden Befehls angibt. Dieser Member ist in der Regel eine Zeichenfolge, wenn ein Befehl von einer Anwendung aktiviert wird. Das System stellt vordefinierte Konstantenwerte für die folgenden Befehlszeichenfolgen bereit.

Dauerhaft Befehlszeichenfolge
CMDSTR_RUNAS "RunAs"
CMDSTR_PRINT "Drucken"
CMDSTR_PREVIEW "Vorschau"
CMDSTR_OPEN "Öffnen"
 

Dies ist kein fester Satz. Neue kanonische Verben können von Kontextmenühandlern erfunden werden, und Anwendungen können sie aufrufen.

Wenn ein kanonisches Verb vorhanden ist und ein Menühandler das kanonische Verb nicht implementiert, muss ein Fehlercode zurückgegeben werden, damit der nächste Handler dieses Verb verarbeiten kann. Andernfalls wird die Funktionalität des Systems, einschließlich ShellExecute, unterbrochen.

Alternativ kann dieser Parameter anstelle eines Zeigers MAKEINTRESOURCE(offset) sein, wobei offset der Menübezeichneroffset des auszuführenden Befehls ist. Implementierungen können das makro IS_INTRESOURCE verwenden, um zu erkennen, dass diese Alternative verwendet wird. Die Shell verwendet diese Alternative, wenn der Benutzer einen Menübefehl auswäht.

lpParameters

Typ: LPCSTR

Optionale Parameter. Dieser Member ist immer NULL für Menüelemente, die von einer Shell-Erweiterung eingefügt werden.

lpDirectory

Typ: LPCSTR

Ein optionaler Arbeitsverzeichnisname. Dieser Member ist immer NULL für Menüelemente, die von einer Shell-Erweiterung eingefügt werden.

nShow

Typ: int

Ein Satz von SW_ Werten, die an die ShowWindow-Funktion übergeben werden sollen, wenn der Befehl ein Fenster anzeigt oder eine Anwendung startet.

dwHotKey

Art: DWORD

Eine optionale Tastenkombination, die jeder durch den Befehl aktivierten Anwendung zugewiesen werden soll. Wenn der fMask-Member keine CMIC_MASK_HOTKEY angibt, wird dieses Element ignoriert.

hIcon

Typ: HANDLE

Ein Symbol, das für jede Anwendung verwendet werden soll, die durch den Befehl aktiviert wird. Wenn der fMask-Member nicht CMIC_MASK_ICON angibt, wird dieses Element ignoriert.

lpTitle

Typ: LPCSTR

Ein ASCII-Titel.

lpVerbW

Typ: LPCWSTR

Ein Unicode-Verb für die Befehle, die es verwenden können.

lpParametersW

Typ: LPCWSTR

Ein Unicode-Parameter für die Befehle, die ihn verwenden können.

lpDirectoryW

Typ: LPCWSTR

Ein Unicode-Verzeichnis für die Befehle, die es verwenden können.

lpTitleW

Typ: LPCWSTR

Ein Unicode-Titel.

ptInvoke

Typ: POINT

Der Punkt, an dem der Befehl aufgerufen wird. Wenn der fMask-Member keine CMIC_MASK_PTINVOKE angibt, wird dieser Member ignoriert. Dieses Mitglied ist vor internet Explorer 4.0 ungültig.

Hinweise

Obwohl die IContextMenu::InvokeCommand-Deklaration eine CMINVOKECOMMANDINFO-Struktur für den pici-Parameter angibt, kann sie auch eine CMINVOKECOMMANDINFOEX-Struktur akzeptieren. Wenn Sie diese Methode implementieren, müssen Sie cbSize untersuchen, um festzustellen, welche Struktur übergeben wurde.

Standardmäßig werden alle 16-Bit-Windows-basierten Anwendungen als Threads in einem einzelnen, freigegebenen VDM ausgeführt. Der Vorteil der getrennten Ausführung besteht darin, dass ein Absturz nur den einzelnen VDM beendet. alle anderen Programme, die in unterschiedlichen VDMs ausgeführt werden, funktionieren weiterhin normal. Außerdem verfügen 16-Bit-Windows-basierte Anwendungen, die in separaten VDMs ausgeführt werden, über separate Eingabewarteschlangen. Das bedeutet, dass Anwendungen in separaten VDMs weiterhin Eingaben empfangen, wenn eine Anwendung vorübergehend nicht mehr reagiert. Der Nachteil der getrennten Ausführung besteht darin, dass dafür deutlich mehr Arbeitsspeicher benötigt wird.

CMINVOKECOMMANDINFOEX selbst ist in Shobjidl.h definiert, Sie müssen jedoch auch Shellapi.h einschließen, um vollzugriff auf alle Flags zu haben.

Hinweis Vor Windows Vista wurde diese Struktur in Shlobj.h deklariert.
 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional, Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile shobjidl_core.h (shobjidl.h einschließen)