vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
DTA-Dateien erstellen inkl. BLZ-/Kontonummernpr?fung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2014
 
zurück
Rubrik: System/Windows · Prozesse/Tasks   |   VB-Versionen: VB4, VB5, VB614.03.02
Pr?fen, ob ein Task noch l?uft und ggf. beenden

Dieses Beispiel zeigt, wie sich pr?fen l?sst, ob ein bestimmter Task noch l?uft. Dieser l?sst sich dann auf Wunsch per Code beenden.

Autor:   Thomas BannertBewertung:     [ Jetzt bewerten ]Views:  37.878 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8 Beispielprojekt auf CD 

"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 37.878 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2014 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