Rubrik: System/Windows · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 05.02.01 |
Überwachung laufender Anwendungen im Hintergrund Dieser Tipp zeigt, wie Sie feststellen können, ob eine bestimmte Anwendung noch läuft oder bereits beendet wurde. | ||
Autor: Heinz Prelle | Bewertung: | Views: 32.822 |
www.visual-basic5.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Mit der Windows-API Funktion OpenProcess haben Sie die Möglichkeit, laufende MS-DOS- oder Windows Anwendungen zu überwachen, d.h. zu prüfen ob eine bestimmte Anwendung noch aktiv ist oder bereits beendet. Das nachfolgende Beispiel zeigt, wie Sie die OpenProcess-Funktion zur Überwachung von NotePad verwenden. Die OpenProcess Funktion gibt das Handle des neu geöffneten Prozesses zurück. Die GetExitCodeProcess-Funktion gibt den Wert von ACTIVE_STILL_BACK des geöffneten Prozesses zurück. Somit können Sie mit Hilfe einer Do-While Schleife periodisch den Status von NotePad kontrollieren.
' zunächst die benötigten API-Deklarationen Private Declare Function OpenProcess Lib "kernel32" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" _ ( _ ByVal hProcess As Long, _ lpExitCode As Long) As Long Private Declare Sub Sleep Lib "kernel32" ( _ ByVal dwMillisecond As Long) Const ACTIVE_STILL_BACK = &H103 Const PROC_QUERY_INFOS = &H400 ' Warten, bis Anwendung beendet wird Public Sub fAppControl(taskID As Double) Dim lRetValue As Long Dim hProcess As Long hProcess = OpenProcess(PROC_QUERY_INFOS, False, taskID) Do ' Prozess-Status ermitteln. GetExitCodeProcess hProcess, lRetValue DoEvents Sleep 100 ' Loop while der Prozess aktiv ist. Loop While lRetValue = ACTIVE_STILL_BACK End Sub
Anwendungsbeispiel
' Anwendung NOTEPAD starten Dim taskID As Double taskID = Shell("c:\windows\notepad.exe", vbNormalFocus) ' Warten, bis NOTEPAD beendet ist fAppControl taskID ' NOTEPAD ist beendet, jetzt mit normalen ' Programmablauf fortfahren ...