Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ Visual Basic / VBA / VB.Net » VB6 - Prüfen, ob ein Task noch läuft und ggf. beenden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.12.2004, 15:38 Uhr
Audron-AT-www
http://www.sXene.de Audron@sxene.de
(Operator)


"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:


Visual Basic:
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.


Visual Basic:
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


--
Mit freundlichen Grüßen
Audron, audron@sxene.de

Dieser Post wurde am 26.09.2005 um 16:53 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ Visual Basic / VBA / VB.Net ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: