vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
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:  13.036 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    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

    Diese Seite wurde bereits 13.036 mal aufgerufen.

    nach obenzurück
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle 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.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel