Deklaration: Declare Function WaitForSingleObject Lib "kernel32.dll" ( _ ByVal hHandle As Long, _ ByVal dwMilliseconds As Long) As Long
Const INFINITE = &HFFFF ' unendlich warten
Rückgabekonstanten: Const 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 Const WAIT_FAILED = &HFFFFFFFF ' die Funktion ist gescheitert Const WAIT_OBJECT_0 = &H0 ' das Objekt, das in hHandle spezifiziert ist, ist in einem signalisierenden Status Const WAIT_TIMEOUT = &H102 ' das Zeitlimit für eine Änderung des Thread-Status ist abgelaufen
Private Declare Function ShellExecuteEx Lib "shell32.dll" _ Alias "ShellExecuteExA" ( _ lpExecInfo As SHELLEXECUTEINFO) As Long Private Declare Function WaitForSingleObject Lib "kernel32.dll" ( _ ByVal hHandle As Long, _ ByVal dwMilliseconds As Long) As Long Private Type SHELLEXECUTEINFO cbSize As Long fMask As Long hwnd As Long lpVerb As String lpFile As String lpParameters As String lpDirectory As String nShow As Long hInstApp As Long lpIDList As Long lpClass As String hkeyClass As Long dwHotKey As Long hIcon As Long hProcess As Long End Type ' SHELLEXECUTEINFO fMask-Konstanten Private Const SEE_MASK_CLASSKEY = &H3 ' Struktur wird mit dem Handle des Registry- ' Schlüssels für die Klasse gefüllt Private Const SEE_MASK_CLASSNAME = &H1 ' Struktur wird mit dem Klassennamen oder GUID ' gefüllt der die Datei beschreibt Private Const SEE_MASK_CONNECTNETDRV = &H80 ' Struktur verbindet den PC mit einem ' Netzlaufwerk falls nötig, lpFile muss der UNC-Pfadname im Netzwerk sein Private Const SEE_MASK_DOENVSUBST = &H200 ' Struktur wird mit Umgebungsvariablen des ' Programms gefüllt, diese werden in lpDirectory oder lpFile gepackt Private Const SEE_MASK_FLAG_DDEWAIT = &H100 ' die Funktion wartet, dass die DDE ihre ' Vorgänge abgeschlossen hat und kehrt dann erst zurück Private Const SEE_MASK_FLAG_NO_UI = &H400 ' die Funktion zeigt keine Fehler-Dialogboxen an Private Const SEE_MASK_HOTKEY = &H20 ' dwHotkey wird gefüllt Private Const SEE_MASK_ICON = &H10 ' hIcon wird mit dem Icon Handle des ' Standardicons der Anwendung gefüllt Private Const SEE_MASK_IDLIST = &H4 ' benutzt die lpIDLIST-Option, um das Programm zu ' starten, das in ihr beschrieben ist Private Const SEE_MASK_INVOKEIDLIST = &HC ' benutzt die lpIDLIST-Option, um das ' Programm zu starten, das in ihr beschrieben ist Private Const SEE_MASK_NOCLOSEPROCESS = &H40 ' füllt die Struktur-Option hProcess ' mit dem Process-Handle der gestarteten Anwendung ' SHELLEXECUTEINFO nShow-Konstanten Private Const SW_HIDE = 0 ' versteckt das Fenster Private Const SW_MAXIMIZE = 3 ' maximiert das Fenster Private Const SW_MINIMIZE = 6 ' minimiert das Fenster Private Const SW_RESTORE = 9 ' stellt das Fenster wieder her Private Const SW_SHOW = 5 ' zeigt das Fenster an Private Const SW_SHOWMAXIMIZED = 3 ' zeigt das Fenster maximiert an Private Const SW_SHOWMINIMIZED = 2 ' zeigt das Fenster minimiert an Private Const SW_SHOWMINNOACTIVE = 7 ' zeigt das Fenster minimiert an aber aktiviert ' es nicht Private Const SW_SHOWNA = 8 ' zeigt das Fenster an, aber aktiviert es nicht Private Const SW_SHOWNOACTIVATE = 4 ' zeigt das Fenster in der besten Größe und ' Position an aber aktiviert es nicht Private Const SW_SHOWNORMAL = 1 ' zeigt das Fenster ganz normal an ' SHELLEXECUTEINFO hInstApp Rückgabe-Konstanten Private Const SE_ERR_ACCESSDENIED = 5 ' Zugriff verweigert Private Const SE_ERR_ASSOCINCOMPLETE = 27 ' Dateityp ist nicht ausreichend assoziiert Private Const SE_ERR_DDEBUSY = 30 ' DDE konnte nicht gestartet werden Private Const SE_ERR_DDEFAIL = 29 ' DDE ist gescheitert Private Const SE_ERR_DDETIMEOUT = 28 ' DDE-Zeitlimit wurde ereicht Private Const SE_ERR_DLLNOTFOUND = 32 ' eine benötigte Dll wurde nicht gefunden Private Const SE_ERR_FNF = 2 ' Datei wurde nicht gefunden Private Const SE_ERR_NOASSOC = 31 ' Dateityp ist nicht assoziiert Private Const SE_ERR_OOM = 8 ' nicht genügend Speicher verfügbar Private Const SE_ERR_PNF = 3 ' Pfad wurde nicht gefunden Private Const SE_ERR_SHARE = 26 ' Datei konnte nicht geöffnet werden da sie bereits ' verwendet wird ' SHELLEXECUTEINFO dwHotKey-Konstanten Private Const HOTKEYF_ALT = &H4 ' benutzt ALT für den Hotkey Private Const HOTKEYF_CONTROL = &H2 ' benutzt STRG für den Hotkey Private Const HOTKEYF_EXT = &H8 ' benutzt den Extendend-Key für den Hotkey Private Const HOTKEYF_SHIFT = &H1 ' benutzt Shift für den Hotkey ' WaitForSingleObject dwMillisekond-Konstante Private Const INFINITE = &HFFFF ' unendlich warten ' WaitForSingleObject Rückgabe-Konstanten Private Const WAIT_ABANDONED = &H80 ' der Mutex der in hHanlde 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 Private Const WAIT_FAILED = &HFFFFFFFF ' die Funktion ist gescheitert Private Const WAIT_OBJECT_0 = &H0 ' das Objekt, das in hHandle spezifiziert ist, ' ist in einem signalisierendem Status Private Const WAIT_TIMEOUT = &H102 ' das Zeitlimit für eine Änderung des ' Thread-Status ist abgelaufen ' Editor mit der Autoexec.bat Datei öffnen Private Sub Command1_Click() Dim Retval As Long, ShExInfo As SHELLEXECUTEINFO ' Startoptionen festlegen With ShExInfo .cbSize = Len(ShExInfo) .fMask = SEE_MASK_FLAG_NO_UI Or SEE_MASK_CLASSNAME Or SEE_MASK_NOCLOSEPROCESS .hwnd = Me.hwnd .lpVerb = "open" .lpFile = "c:\windows\notepad.exe" .lpParameters = "c:\autoexec.bat" .lpDirectory = "c:\" .nShow = SW_SHOWMAXIMIZED End With ' Programm ausführen Retval = ShellExecuteEx(ShExInfo) If Retval = 0 Then ' bei Fehler Text ausgeben Select Case ShExInfo.hInstApp Case SE_ERR_ACCESSDENIED Err.Raise 5, "ShellExecuteEx", "Zugriff verweigert" Case SE_ERR_FNF Err.Raise 5, "ShellExecuteEx", "Datei nicht gefunden" Case SE_ERR_NOASSOC Err.Raise 5, "ShellExecuteEx", "Datei ist mit keinem Programm verknüpft" End Select Else ' andernfalls Programmdaten ausgeben Debug.Print "Datei gestartet: " & ShExInfo.lpFile Debug.Print "Dateiklasse: " & ShExInfo.lpClass Debug.Print "Prozess Handle: " & ShExInfo.hProcess Debug.Print "Instanz Handle:" & ShExInfo.hInstApp End If ' warten, bis die Anwendung beendet wird Do DoEvents Loop Until WaitForSingleObject(ShExInfo.hProcess, 0) << WAIT_TIMEOUT ' beenden des Programms signalisieren MsgBox "Das Programm wurde beendet" End Sub Diese Seite wurde bereits 22.135 mal aufgerufen. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Buchempfehlung Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |