ShellExecuteA-Funktion (shellapi.h)
Führt einen Vorgang für eine angegebene Datei aus.
Syntax
HINSTANCE ShellExecuteA(
[in, optional] HWND hwnd,
[in, optional] LPCSTR lpOperation,
[in] LPCSTR lpFile,
[in, optional] LPCSTR lpParameters,
[in, optional] LPCSTR lpDirectory,
[in] INT nShowCmd
);
Parameter
[in, optional] hwnd
Typ: HWND-
Ein Handle für das übergeordnete Fenster, das zum Anzeigen einer Benutzeroberfläche oder fehlermeldung verwendet wird. Dieser Wert kann NULL- werden, wenn der Vorgang keinem Fenster zugeordnet ist.
[in, optional] lpOperation
Typ: LPCTSTR-
Ein Zeiger auf eine null-terminated string, die in diesem Fall als Verbbezeichnet wird, das die auszuführende Aktion angibt. Die Gruppe der verfügbaren Verben hängt von der jeweiligen Datei oder dem jeweiligen Ordner ab. Im Allgemeinen sind die im Kontextmenü eines Objekts verfügbaren Aktionen verfügbar. Die folgenden Verben werden häufig verwendet:
redigieren
Startet einen Editor und öffnet das Dokument zur Bearbeitung. Wenn lpFile- keine Dokumentdatei ist, schlägt die Funktion fehl.
erforschen
Untersucht einen ordner, der durch lpFile-angegeben wird.
finden
Initiiert eine Suche, die mit dem durch lpDirectoryangegebenen Verzeichnis beginnt.
offen
Öffnet das durch den parameter lpFile angegebene Element. Das Element kann eine Datei oder ein Ordner sein.
Druckt die durch lpFileangegebene Datei. Wenn lpFile- keine Dokumentdatei ist, schlägt die Funktion fehl.
runas
Startet eine Anwendung als Administrator. Die Benutzerkontensteuerung (User Account Control, UAC) fordert den Benutzer auf, der Anwendung mit erhöhten Rechten zuzustimmen oder die Anmeldeinformationen eines Administratorkontos einzugeben, mit dem die Anwendung ausgeführt wird.
NULL
Das Standardverb wird verwendet, falls verfügbar. Andernfalls wird das Verb "open" verwendet. Wenn kein Verb verfügbar ist, verwendet das System das erste Verb, das in der Registrierung aufgeführt ist.
[in] lpFile
Typ: LPCTSTR-
Ein Zeiger auf eine NULL--terminated string, die die Datei oder das Objekt angibt, für die das angegebene Verb ausgeführt werden soll. Um ein Shell-Namespaceobjekt anzugeben, übergeben Sie den vollqualifizierten Analysenamen. Beachten Sie, dass nicht alle Verben für alle Objekte unterstützt werden. Beispielsweise unterstützen nicht alle Dokumenttypen das Verb "print". Wenn ein relativer Pfad für den parameter lpDirectory verwendet wird, verwenden Sie keinen relativen Pfad für lpFile-.
[in, optional] lpParameters
Typ: LPCTSTR-
Wenn lpFile- eine ausführbare Datei angibt, ist dieser Parameter ein Zeiger auf eine NULL--terminated-Zeichenfolge, die die Parameter an die Anwendung angibt. Das Format dieser Zeichenfolge wird durch das Verb bestimmt, das aufgerufen werden soll. Wenn lpFile- eine Dokumentdatei angibt, sollte lpParameters-NULL-sein.
[in, optional] lpDirectory
Typ: LPCTSTR-
Ein Zeiger auf eine NULL--terminated-Zeichenfolge, die das Standardverzeichnis (Arbeitsverzeichnis) für die Aktion angibt. Wenn dieser Wert NULL-ist, wird das aktuelle Arbeitsverzeichnis verwendet. Wenn bei lpFileein relativer Pfad bereitgestellt wird, verwenden Sie keinen relativen Pfad für lpDirectory.
[in] nShowCmd
Typ: INT-
Die Flags, die angeben, wie eine Anwendung angezeigt werden soll, wenn sie geöffnet wird. Wenn lpFile- eine Dokumentdatei angibt, wird das Flag einfach an die zugeordnete Anwendung übergeben. Es liegt an der Anwendung, zu entscheiden, wie sie behandelt werden soll. Dabei kann es sich um einen beliebigen Wert handeln, der im nCmdShow Parameter für die ShowWindow--Funktion angegeben werden kann.
Rückgabewert
Typ: HINSTANCE-
Wenn die Funktion erfolgreich ist, wird ein Wert zurückgegeben, der größer als 32 ist. Wenn die Funktion fehlschlägt, wird ein Fehlerwert zurückgegeben, der die Ursache des Fehlers angibt. Der Rückgabewert wird als HINSTANCE für die Abwärtskompatibilität mit 16-Bit-Windows-Anwendungen umgedreht. Es ist jedoch keine wahre HINSTANCE. Sie kann nur in eine INT_PTR und im Vergleich zu entweder 32 oder den folgenden Fehlercodes unten in einen INT_PTR umwandeln.
Rückgabecode | Beschreibung |
---|---|
|
Das Betriebssystem ist nicht genügend Arbeitsspeicher oder Ressourcen. |
|
Die angegebene Datei wurde nicht gefunden. |
|
Der angegebene Pfad wurde nicht gefunden. |
|
Die .exe Datei ist ungültig (nicht-Win32-.exe oder Fehler in .exe Bild). |
|
Das Betriebssystem hat den Zugriff auf die angegebene Datei verweigert. |
|
Die Zuordnung des Dateinamens ist unvollständig oder ungültig. |
|
Die DDE-Transaktion konnte nicht abgeschlossen werden, da andere DDE-Transaktionen verarbeitet wurden. |
|
Fehler bei der DDE-Transaktion. |
|
Die DDE-Transaktion konnte nicht abgeschlossen werden, da die Anforderung ein Timeout hat. |
|
Die angegebene DLL wurde nicht gefunden. |
|
Die angegebene Datei wurde nicht gefunden. |
|
Der angegebenen Dateinamenerweiterung ist keine Anwendung zugeordnet. Dieser Fehler wird auch zurückgegeben, wenn Sie versuchen, eine Nicht druckbare Datei zu drucken. |
|
Es war nicht genügend Arbeitsspeicher vorhanden, um den Vorgang abzuschließen. |
|
Der angegebene Pfad wurde nicht gefunden. |
|
Es ist ein Freigabeverstoß aufgetreten. |
Rufen Sie GetLastError- für erweiterte Fehlerinformationen auf.
Bemerkungen
Da ShellExecute- die Ausführung an Shell-Erweiterungen (Datenquellen, Kontextmenühandler, Verbimplementierungen) delegieren kann, die mithilfe von Component Object Model (COM) aktiviert werden, sollte COM initialisiert werden, bevor ShellExecute- aufgerufen wird. Für einige Shellerweiterungen ist der COM-Singlethread-Apartmenttyp (STA) erforderlich. In diesem Fall sollte COM wie hier gezeigt initialisiert werden:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
Es gibt sicherlich Fälle, in denen ShellExecute keinen dieser Arten von Shell-Erweiterung verwendet, und diese Instanzen würden überhaupt keine COM initialisiert werden müssen. Dennoch empfiehlt es sich, vor der Verwendung dieser Funktion immer COM zu initialisieren.
Mit dieser Methode können Sie alle Befehle im Kontextmenü eines Ordners ausführen oder in der Registrierung gespeichert sein.
Verwenden Sie zum Öffnen eines Ordners eine der folgenden Aufrufe:
ShellExecute(handle, NULL, <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
oder
ShellExecute(handle, "open", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
Verwenden Sie den folgenden Aufruf, um einen Ordner zu erkunden:
ShellExecute(handle, "explore", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
Verwenden Sie den folgenden Aufruf, um das Find-Hilfsprogramm der Shell für ein Verzeichnis zu starten.
ShellExecute(handle, "find", <fully_qualified_path_to_folder>, NULL, NULL, 0);
Wenn lpOperation-NULL-ist, öffnet die Funktion die durch lpFile-angegebene Datei. Wenn lpOperation "open" oder "explore" ist, versucht die Funktion, den Ordner zu öffnen oder zu erkunden.
Verwenden Sie ShellExecuteEx-, um Informationen über die Anwendung zu erhalten, die durch aufrufen ShellExecutegestartet wird.
Anmerkung
Der shellapi.h-Header definiert ShellExecute 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
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | shellapi.h |
Library | Shell32.lib |
DLL- | Shell32.dll (Version 3.51 oder höher) |
Siehe auch
Starten von Anwendungen (ShellExecute, ShellExecuteEx, SHELLEXECUTEINFO)