"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 60.379 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (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. |
sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |