ShellExecuteExA-Funktion (shellapi.h)
Führt einen Vorgang für eine angegebene Datei aus.
Syntax
BOOL ShellExecuteExA(
[in, out] SHELLEXECUTEINFOA *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 Shell-Erweiterungen (Datenquellen, Kontextmenühandler, Verbimplementierungen) delegieren kann, die mithilfe des Component Object Model (COM) aktiviert werden, sollte COM initialisiert werden, bevor ShellExecuteEx aufgerufen wird. Für einige Shell-Erweiterungen ist der COM-Typ "Singlethreaded 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 Arten von Shellerweiterungen 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 Ladeprogrammsperre 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 in Gegenwart einer Ladeprogrammsperre nicht ordnungsgemäß funktioniert, wodurch ein Deadlock und damit ein nicht reagierender Thread riskiert werden.
Wenn Sie bei mehreren Monitoren einen HWND angeben und den lpVerb-Member 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, wird der hInstApp-Member der SHELLEXECUTEINFO-Struktur auf einen Wert größer als 32 festgelegt. 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, handelt es sich nicht um eine echte HINSTANCE. Sie kann nur in ein 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 Bibliotheksdateien, die zum Ausführen der Anwendung erforderlich sind, wurde nicht gefunden. |
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 | Ein Verstoß gegen die Freigabe ist aufgetreten. |
Öffnen von Elementen aus einer URL Sie können Ihre Anwendung registrieren, um sie zu aktivieren, wenn URLs übergeben werden. Sie können auch angeben, welche Protokolle ihre Anwendung unterstützt. Weitere Informationen finden Sie unter Anwendungsregistrierung .
Unterstützung der Websitekette 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 (ShellExecute, 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 Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
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)