"Läuft ein bestimmter Task noch - und wenn ja, wie kann ich diesen per Code beenden?" Diese oder ähnliche Fragen stehen in unseren Diskussionsforen zur Zeit hoch im Kurs. Und deshalb möchten wir Ihnen heute einen Weg zeigen, wie sich prüfen lässt, ob eine bestimmte Anwendung (ein Task) noch ausgeführt wird oder nicht. Allerdings müssen wir hierzu die TaskID kennen. Zusätzlich zeigen wir dann noch, wie sich ein Task automatisch per VB-Code beenden lässt. Erstellen Sie ein neues Projekt und fügen nachfolgende API-Deklarationen und Funktionen in ein neues Modul ein: Option Explicit ' hier die benötigten API-Deklarationen Private Declare Function CloseHandle Lib "kernel32" ( _ ByVal hObject As Long) As Long 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 Function TerminateProcess Lib "kernel32" ( _ ByVal hProcess As Long, _ ByVal uExitCode As Long) As Long Const STILL_ACTIVE = &H103 Const PROCESS_ALL_ACCESS = &H1F0FFF Const PROCESS_TERMINATE = &H1 ' Prüfen, ob ein Task mit einer bestimmten ' TaskID noch aktiv ist Public Function IsTaskActive(lTaskID As Long) As Boolean Dim lhwnd As Long Dim lExitCode As Long lhwnd = OpenProcess(PROCESS_ALL_ACCESS, False, lTaskID) Call GetExitCodeProcess(lhwnd, lExitCode) Call CloseHandle(lhwnd) IsTaskActive = (lExitCode = STILL_ACTIVE) End Function ' Task beenden Public Sub TerminateTask(lTaskID As Long) Dim lhwnd As Long Dim lResult As Long lhwnd = OpenProcess(PROCESS_TERMINATE, 0&, lTaskID) lResult = TerminateProcess(lhwnd, 1&) lResult = CloseHandle(lhwnd) End Sub Und um das ganze gleich einmal zu testen, plazieren Sie drei CommandButtons auf eine Form und nennen diese: cmdStart, cmdCheck und cmdExit. Über den ersten Button starten wir per Shell-Aufruf den Windows-Editor (Notepad). Den Rückgabewert des Shell-Aufruf (die TaskID) merken wir uns in der Variable lTaskID. Beim Klicken auf den 2. Button prüfen wir, ob die von uns aktivierte Instanz des Windows-Editor noch ausgeführt wird. Und über den dritten Button beenden wir Notepad letztendlich wieder. Und hier der Code: Option Explicit ' TaskID des von uns gestarteten Windows-Editor Private lTaskID As Long Private Sub cmdStart_Click() ' Notepad starten Dim sWinPath As String sWinPath = Environ("WinDir") If Right$(sWinPath, 1) <> "\" Then _ sWinPath = sWinPath & "\" lTaskID = Shell(sWinPath & "notepad.exe", vbNormalFocus) End Sub Private Sub cmdCheck_Click() ' Prüfen, ob das von uns gestartete Notepad ' noch läuft If IsTaskActive(lTaskID) Then MsgBox "Notepad wird noch ausgeführt!" Else MsgBox "Notepad wurde bereits beendet!" End If End Sub Private Sub cmdExit_Click() ' Die von uns gestartete Notepad-Instant ' beenden If IsTaskActive(lTaskID) Then TerminateTask lTaskID MsgBox "Notepad wurde geschlossen." Else MsgBox "Notepad wird nicht mehr ausgeführt!" End If End Sub Dieser Tipp wurde bereits 61.903 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 ![]() Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats sevZIP40 Pro DLL ![]() Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |