vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Windows/System15.04.02
WaitForSingleObject-Funktion

Diese Funktion hält ein Programm an, bis ein Objekt einen signalisierenden Status erreicht hat oder das voreingestellte Zeitlimit erreicht wurde.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  21.809 

Deklaration:

Declare Function WaitForSingleObject Lib "kernel32.dll" ( _
  ByVal hHandle As Long, _
  ByVal dwMilliseconds As Long) As Long


Beschreibung:

Diese Funktion hält ein Programm an, bis ein Objekt einen signalisierenden Status erreicht hat oder das voreingestellte Zeitlimit erreicht wurde.


Parameter:

hHandleErwartet das Handle eines Objektes, das z.B. von einem Ereignis, Drucker-Job, Mutex, Prozess, etc. stammen kann.
dwMillisecondsErwartet 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.


dwMilliseconds Konstanten:

 
Const INFINITE = &HFFFF
' unendlich warten
 


Rückgabewert:

Ist die Funktion erfolgreich, liefert sie eine der Rückgabe-Konstanten. Istdie Rückgabe "WAIT_FAILED", so kann man die GetLastError-Funktion für erweiterte Fehlerinformationen aufrufen.


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
 


Beispiel:

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

 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.