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.
CMIC_MASK_HASTITLE
Das lpTitle-Element ist gültig.
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.
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) |