ShellExecuteExW-Funktion (shellapi.h)
Führt einen Vorgang für eine angegebene Datei aus.
Syntax
BOOL ShellExecuteExW(
[in, out] SHELLEXECUTEINFOW *pExecInfo
);
Parameter
[in, out] pExecInfo
Typ: SHELLEXECUTEINFO*
Ein Zeiger auf eine SHELLEXECUTEINFO-Struktur , die Informationen über die ausgeführte Anwendung enthält und empfängt.
Rückgabewert
Typ: BOOL
Gibt TRUE zurück, wenn dies erfolgreich war. andernfalls FALSE. Rufen Sie GetLastError für erweiterte Fehlerinformationen auf.
Hinweise
Da ShellExecuteEx die Ausführung an Shellerweiterungen (Datenquellen, Kontextmenühandler, Verbimplementierungen) delegieren kann, die mithilfe des Com-Komponentenobjektmodells (Component Object Model) aktiviert werden, sollte COM initialisiert werden, bevor ShellExecuteEx aufgerufen wird. Für einige Shell-Erweiterungen ist der COM-Typ "Single-Threaded Apartment" (STA) erforderlich. In diesem Fall sollte COM wie hier gezeigt initialisiert werden:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
Es gibt Instanzen, in denen ShellExecuteEx keinen dieser Shellerweiterungstypen verwendet, und für diese Instanzen muss COM überhaupt nicht initialisiert werden. Dennoch empfiehlt es sich, com immer zu initialisieren, bevor Sie diese Funktion verwenden.
Wenn DLLs in Ihren Prozess geladen werden, erhalten Sie eine Sperre, die als Ladesperre bezeichnet wird. Die DllMain-Funktion wird immer unter der Ladesperre ausgeführt. Es ist wichtig, dass Sie ShellExecuteEx nicht aufrufen, während Sie eine Ladesperre halten. Da ShellExecuteEx erweiterbar ist, können Sie Code laden, der nicht ordnungsgemäß funktioniert, wenn eine Ladeprogrammsperre vorhanden ist, wodurch ein Deadlock und damit ein nicht reagierender Thread riskiert werden.
Wenn Sie bei mehreren Monitoren einen HWND angeben und das lpVerb-Element der SHELLEXECUTEINFO-Struktur , auf die von lpExecInfo verwiesen wird, auf "Eigenschaften" festlegen, werden alle von ShellExecuteEx erstellten Fenster möglicherweise nicht an der richtigen Position angezeigt.
Wenn die Funktion erfolgreich ist, legt sie das hInstApp-Element der SHELLEXECUTEINFO-Struktur auf einen Wert größer als 32 fest. Wenn die Funktion fehlschlägt, wird hInstApp auf den SE_ERR_XXX Fehlerwert festgelegt, der die Ursache des Fehlers am besten angibt. Obwohl hInstApp als HINSTANCE für die Kompatibilität mit 16-Bit-Windows-Anwendungen deklariert wird, ist dies kein wahrer HINSTANCE-Wert. Es kann nur in einen int umgewandelt werden und kann nur mit dem Wert 32 oder den SE_ERR_XXX Fehlercodes verglichen werden.
Die SE_ERR_XXX Fehlerwerte werden aus Gründen der Kompatibilität mit ShellExecute bereitgestellt. Verwenden Sie GetLastError, um genauere Fehlerinformationen abzurufen. Es kann einen der folgenden Werte zurückgeben.
Fehler | BESCHREIBUNG |
---|---|
ERROR_FILE_NOT_FOUND | Die angegebene Datei wurde nicht gefunden. |
ERROR_PATH_NOT_FOUND | Der angegebene Pfad wurde nicht gefunden. |
ERROR_DDE_FAIL | Fehler bei der DDE-Transaktion (Dynamic Data Exchange). |
ERROR_NO_ASSOCIATION | Der angegebenen Dateinamenerweiterung ist keine Anwendung zugeordnet. |
ERROR_ACCESS_DENIED | Der Zugriff auf die angegebene Datei wird verweigert. |
ERROR_DLL_NOT_FOUND | Eine der zum Ausführen der Anwendung erforderlichen Bibliotheksdateien kann nicht gefunden werden. |
ERROR_CANCELLED | Die Funktion hat den Benutzer zur Eingabe zusätzlicher Informationen aufgefordert, aber der Benutzer hat die Anforderung abgebrochen. |
ERROR_NOT_ENOUGH_MEMORY | Es ist nicht genügend Arbeitsspeicher vorhanden, um die angegebene Aktion auszuführen. |
ERROR_SHARING_VIOLATION | Es ist eine Freigabeverletzung aufgetreten. |
Öffnen von Elementen über eine URL Sie können Ihre Anwendung registrieren, um bei übergebenen URLs zu aktivieren. Sie können auch angeben, welche Protokolle Ihre Anwendung unterstützt. Weitere Informationen finden Sie unter Anwendungsregistrierung .
Site Chain-Unterstützung Ab Windows 8 können Sie einen Site Chain-Zeiger auf die ShellExecuteEx-Funktion bereitstellen, um die Elementaktivierung mit Diensten von diesem Standort zu unterstützen. Weitere Informationen finden Sie unter Starten von Anwendungen (ShellExecuteEx, SHELLEXECUTEINFO).
Hinweis
Der shellapi.h-Header definiert ShellExecuteEx als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | shellapi.h |
Bibliothek | Shell32.lib |
DLL | Shell32.dll (Version 3.51 oder höher) |
Weitere Informationen
Starten von Anwendungen (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)