' SHELLEXECUTEINFO hInstApp Rückgabe-Konstanten
Public Enum ShellExecuteError
SE_ERR_FNF = 2 ' Datei wurde nicht gefunden
SE_ERR_PNF = 3 ' Pfad wurde nicht gefunden
SE_ERR_ACCESSDENIED = 5 ' Zugriff verweigert
SE_ERR_OOM = 8 ' nicht genügend Speicher verfügbar
SE_ERR_BAD_FORMAT = 11 ' Falsches Format
SE_ERR_SHARE = 26 ' Datei konnte nicht geöffnet werden, da sie bereits verwendet wird
SE_ERR_ASSOCINCOMPLETE = 27 ' Dateityp ist nicht ausreichend assoziiert
SE_ERR_DDETIMEOUT = 28 ' DDE-Zeitlimit wurde ereicht
SE_ERR_DDEFAIL = 29 ' DDE ist gescheitert
SE_ERR_DDEBUSY = 30 ' DDE konnte nicht gestartet werden
SE_ERR_NOASSOC = 31 ' Dateityp ist nicht assoziiert
SE_ERR_DLLNOTFOUND = 32 ' eine benötigte Dll wurde nicht gefunden
End Enum
' SHELLEXECUTEINFO nShow-Konstanten
Public Enum ShellExecuteShowConstants
SE_SW_HIDE = 0 ' versteckt das Fenster
SE_SW_MAXIMIZE = 3 ' maximiert das Fenster
SE_SW_MINIMIZE = 6 ' minimiert das Fenster
SE_SW_RESTORE = 9 ' stellt das Fenster wieder her
SE_SW_SHOW = 5 ' zeigt das Fenster an
SE_SW_SHOWMAXIMIZED = 3 ' zeigt das Fenster maximiert an
SE_SW_SHOWMINIMIZED = 2 ' zeigt das Fenster minimiert an
SE_SW_SHOWMINNOACTIVE = 7 ' zeigt das Fenster minimiert an, aber aktiviert es nicht
SE_SW_SHOWNA = 8 ' zeigt das Fenster an, aber aktiviert es nicht
SE_SW_SHOWNOACTIVATE = 4 ' zeigt das Fenster in der besten Größe und Position an, aber aktiviert es nicht
SE_SW_SHOWNORMAL = 1 ' zeigt das Fenster ganz normal an
End Enum
' SHELLEXECUTEINFO fMask-Konstanten
Public Enum ShellExecuteMaskConstants
SEE_MASK_CLASSKEY = &H3 ' Struktur wird mit dem Handle des Registry - Schlüssels für die Klasse gefüllt
SEE_MASK_CLASSNAME = &H1 ' Struktur wird mit dem Klassennamen oder GUID gefüllt der die Datei beschreibt
SEE_MASK_CONNECTNETDRV = &H80 ' Struktur verbindet den PC mit einem Netzlaufwerk falls nötig, lpFile muss der UNC-Pfadname in dem Netzwerk sein
SEE_MASK_DOENVSUBST = &H200 ' Struktur wird mit Umgebungsvariablen des Programms gefüllt, diese werden in lpDirectory oder lpFile gepackt
SEE_MASK_FLAG_DDEWAIT = &H100 ' die Funktion wartet, dass die DDE ihre Vorgänge abgeschlossen hat und kehrt dann erst zurück
SEE_MASK_FLAG_NO_UI = &H400 ' die Funktion zeigt keine Fehler-Dialogboxen an
SEE_MASK_HOTKEY = &H20 ' dwHotkey wird gefüllt
SEE_MASK_ICON = &H10 ' hIcon wird gefüllt mit dem Icon-Handle des Standard-Icons der Anwendung
SEE_MASK_IDLIST = &H4 ' benutzt die lpIDLIST-Option um das Programm zu starten, das in ihr beschrieben ist
SEE_MASK_INVOKEIDLIST = &HC ' benutzt die lpIDLIST-Option um das Programm zu starten, das in ihr beschrieben ist
SEE_MASK_NOCLOSEPROCESS = &H40 ' füllt die Struktur-Option hProcess mit dem Process-Handle der gestarteten Anwendung
End Enum
Public Enum ShellExecuteOperation
SE_OPEN = 0
SE_EDIT = 1
SE_EXPLORE = 2
SE_FIND = 3
SE_PRINT = 4
SE_PROPERTIES = 5
End Enum
' SHELLEXECUTEINFO dwHotKey-Konstanten
Public Enum ShellExecuteHotkeyConstants
HOTKEYF_ALT = &H4 ' benutzt ALT für den Hotkey
HOTKEYF_CONTROL = &H2 ' benutzt STRG für den Hotkey
HOTKEYF_EXT = &H8 ' benutzt den Extendend-Key für den Hotkey
HOTKEYF_SHIFT = &H1 ' benutzt Shift für den Hotkey
End Enum
' WaitForSingleObject dwMillisekond - Konstante
Private Const INFINITE = &HFFFF ' unendlich warten
' WaitForSingleObject Rückgabe-Konstanten
Private Enum ShellExecuteWaitConstants
WAIT_ABANDONED = &H80 ' der Mutex, der in hHandle angegeben ist wird
' nicht freigegeben, so lange der Eltern-Thread zerstört ist. Der Mutex ist nun
' Bestandteil des aufrufenden Threads und ist nicht mehr im signalisierenden Status
WAIT_FAILED = &HFFFFFFFF ' die Funktion ist gescheitert
WAIT_OBJECT_0 = &H0 ' das Objekt. das in hHandle spezifiziert ist,
' ist in einem signalisierendem Status
WAIT_TIMEOUT = &H102 ' das Zeitlimit für eine Änderung des
' Thread-Statuses ist abgelaufen
End Enum
Public Enum wcWaitConstant
wcDontWait = 0
wcWaitUntilInitialized = 1
wcWaitUntilTerminated = 2
End Enum
' #############################################################################
' ##
' ## @Area = API-Strukturen
' ##
' #############################################################################
' wird als Parameter der Funktion ShellExecuteEx benötigt
Private Type SHELLEXECUTEINFO
cbSize As Long ' Erwartet die Größe der Struktur in Bytes.
fMask As Long ' Erwartet eine oder eine Kombination aus mehreren der "fMask"-Konstanten die beschreiben, welche Optionen der Struktur beim Funktionsaufruf gefüllt oder ausgelesen werden sollen.
hwnd As Long ' Erwartet das Fensterhandle des Fensters, das die Funktion aufruft, falls vorhanden.
lpVerb As String ' Erwartet einen String, der den Vorgang der Dateioperation beschreibt, der stattfinden soll. Gültige Werte sind "explore","open", "print".
lpFile As String ' Erwartet den Namen einer Datei, die ausgeführt werden soll. Handelt es sich nicht um eine ausführbare Datei, so wird das Programm, das mit dieser Datei assoziiert ist, gestartet.
lpParameters As String ' Erwartetet zusätzliche Parameter, die dem zu startenden Programm übergeben werden können.
lpDirectory As String ' Erwartet das Arbeitsverzeichnis, in dem das Programm arbeiten soll.
nShow As Long ' Erwartet eine "nShow"-Konstante, die beschreibt, wie das Fenster des zu startenden Programms angezeigt werden soll.
hInstApp As Long ' Ist die Funktion erfolgreich, so beinhaltet diese Variable das Instanzhandle der Anwendung, die gestartet wurde, andernfalls enthält sie den Fehlercode, der die Ursache des Misslingens beschreibt. Gültige Fehlercodes sind eine der "hInstApp"-Konstanten.
lpIDList As Long ' Erwartet einen Pointer zu einer ITEMIDLIST-Struktur, die gefüllt ist mit dem Pfad des zu startenden Programms, wenn die "SEE_MASK_IDLIST" oder "SEE_MASK_INVOKEIDLIST"-Konstante gesetzt ist.
lpClass As String ' Erwartet den Namen der Dateiklasse oder des GUIDs der Datei, falls die Konstante "SEE_MASK_CLASSNAME" gesetzt worden ist.
hkeyClass As Long ' Erwartet das Handle eines Registryschlüssels der Dateiklasse, falls die Konstante "SEE_MASK_CLASSKEY" gesetzt worden ist.
dwHotKey As Long ' Enthält nach erfolgreichem Aufruf der Funktion den Hotkey, der mit dem Programm assoziiert ist. Der Low-Order Word ist eine der Virtual-Keycode-Konstanten und der High-Order Word eine der "dwHotKey"-Konstanten, falls die "SEE_MASK_HOTKEY"-Konstante gesetzt worden ist.
hIcon As Long ' Enthält nach erfolgreichem Aufruf der Funktion das Handle des Standard-Icons der Anwendung, falls die "SEE_MASK_ICON"-Konstante gesetzt worden ist.
hProcess As Long ' Enthält nach erfolgreichem Aufruf der Funktion das Handle des Prozesses der Anwendung, falls die "SEE_MASK_NOCLOSEPROCESS"-Konstante gesetzt worden ist.
End Type
' #############################################################################
' ##
' ## @Area = API-Funktions Deklarationen
' ##
' #############################################################################
Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" _
(lpExecInfo As SHELLEXECUTEINFO) As Long
' @Desc = Diese Funktion startet ein Programm oder öffnet ein Dokument mit dem
' @Desc = assoziierten Programm und gibt Informationen über das gestartete Programm zurück.
' @Param lpExecInfo = Erwartet eine SHELLEXECUTEINFO-Struktur, die Informationen über das zu startende Programm enthält.
' @Return = Ist die Funktion erfolgreich, so ist die Rückgabe "ungleich 0", andernfalls ist die Rückgabe "0".
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
As String, ByVal lpFile As String, ByVal lpParameters _
As String, ByVal lpDirectory As String, ByVal nShowCmd _
As Long) As Long
' @Desc = Diese Funktion startet eine Anwendung oder ein Dokument mit der verknüpften
' @Desc = Anwendung, wobei man noch den Start- und Fenstermodus festlegen kann.
' @Param hwnd = Handle des aufrufenden Fensters
' @Param lpOperation = Erwartet eine Zeichenfolge, die beschreibt, welche Operation ausgeführt
' werden soll. Bei diesen Operationen handelt es sich um Befehle, die in der
' Windows-Registry stehen und auch im Kontextmenü der Datei im Windows-Explorer
' zu finden sind. Wird ein leerer String übergeben, wird der Standard-Öffnenbefehl benutzt. Ist
' @Param lpFile = Verzeichnisnamen, Datei oder Dokument, welches mit der verknüpften
' Anwendung geöffnet werden soll.
' @Param lpParameters = Optionale Angabe von zusätzlichen Aufruf-Parametern.
' @Param lpDirectory = Legt das Arbeitsverzeichnis fest.
' @Param nCmdShow = Erwartet ein Konstante, die beschreibt, wie sich das Anwendungs-Fenster
' berhalten soll.
' @Return = War der Funktionsaufruf erfolgreich, wird das Instanzhandle der gestarteten
' Anwendung zurückgegeben. Der Rückgabewert ist 0, wenn nicht genügend Systemressourcen
' zur Ausführung der Funktion vorhanden sind. Scheitert der Funktionsaufruf aus einem
' anderen Grund, so ist der Rückgabewert wie folgt zu interpretieren.
Private Declare Function WaitForSingleObject Lib "kernel32.dll" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
' @Desc = Diese Funktion hält ein Programm an, bis ein Objekt einen signalisierenden
' @Desc = Status erreicht hat oder das voreingestellte Zeitlimit erreicht wurde.
' @Param hHandle = Erwartet das Handle eines Objektes, das z.B. von einem Ereignis,
' Drucker-Job, Mutex, Prozess, etc. stammen kann.
' @Param dwMilliseconds = Erwartet die Anzahl an Millisekunden, die der Programmablauf
' angehalten wird, bis die Funktion eine Veränderung des Objektstatus feststellt.
' Soll kein Zeitlimit erreicht werden, so kann man die "dwMilliseconds"-Konstante angeben.
' @Return = Ist die Funktion erfolgreich, liefert sie eine der Rückgabe-Konstanten.
' Ist die Rückgabe "WAIT_FAILED", so kann man die GetLastError-Funktion für erweiterte
' Fehlerinformationen aufrufen
Private Declare Function WaitForInputIdle Lib "user32" ( _
ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long
' @Desc = Die Funktion WaitForInputIdle wartet, bis der spezifizierte Prozeß auf Benutzereingaben wartet,
' @Desc = obwohl keine erwartet werden, oder bis angegeben Time-out abgelaufen ist.
' @Param hProcess = [in] Handle zum Prozeß. Wenn der Prozess eine Konsolenanwendung oder keine Ereigniswarteschlange besitzt,
' wird die Funktion sofort wieder beendet zurück.
' @Param dwMilliseconds = [in] Timeout Angabe in Millisekunden.
' Wenn der Paramenter Unendlich(INFINITE) ist, die Funktion kehrt nicht zurück,
' solange der Prozeß untätig ist
' @Return = 0, wenn warten Erfolgreich. WAIT_TIMEOUT, wenn Wartezeit durch Timeout überschritten wurde.
' WAIT_FAILED, wenn ein Fehler aufgetreten ist, Fehler mit GetLastDLLError ermitteln.
Private Declare Function TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, ByVal uExitCode As Long) As Long