VB 5/6-Tipp 0320: Feststellen ob ein Prozeß noch läuft
von ActiveVB
Beschreibung
Wer via WaitForSingleObject seinen Prozeß durch den Aufruf eines anderen nicht ruhen lassen will, aber trotzdem die sporadische Information über das Beenden des externen Programmes benötigt, kann mit der GetExitCode immer mal wieder nachtesten was dort Sache ist.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Timersteuerelement "Timer1" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit 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 Const STILL_ACTIVE = &H103 Const PROCESS_ALL_ACCESS = &H1F0FFF Dim TaskID& Private Function IsActive() As Boolean Dim Handle&, ExitCode& Handle = OpenProcess(PROCESS_ALL_ACCESS, False, TaskID) Call GetExitCodeProcess(Handle, ExitCode) Call CloseHandle(Handle) IsActive = IIf(ExitCode = STILL_ACTIVE, True, False) End Function Private Sub Command1_Click() TaskID = Shell("notepad.exe", vbNormalFocus) Timer1.Interval = 500 Timer1.Enabled = True Command1.Enabled = False End Sub Private Sub Timer1_Timer() Static z& If IsActive Then Me.Caption = "NotePad Läuft noch" Else Me.Caption = "NotePad Läuft nicht mehr" Timer1.Enabled = False Command1.Enabled = True End If z = z + 1 Label1.Caption = z End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von LinkeT am 11.07.2006 um 11:56
Zitat
Von shoy am 22.11.2005 um 14:39
naja der titel leitet etwas fehl... dieser code stellt nicht nur fest ob ein Prozess noch läuft.
Er startet zuerst einen Prozess und prüft dann ob dieser noch läuft...
( TaskID = Shell("notepad.exe", vbNormalFocus)
)
vllt weil es so einfacher zu demonstrieren ist bzw was ist daran so schlimm das man es nutzen könnte (wenn man die PID weist macht man den button aus und fertig ..
oder man nimmt
http://www.activevb.de/tipps/vb6tipps/tipp0273.html mit rein ... und sagt dann diesen Prozess beobachten.
immer diese gleinichkeiten
ansonsten:
cooles tool und source gut geschrieben (als function, schön praktisch, kann man glei mit strgc un v weider nutzen)
frage is nur wie läuft es auf 2k3 ?? das steht nich immer da schade ... man wirds sehen ;)
Kommentar von shoy am 22.11.2005 um 14:39
naja der titel leitet etwas fehl... dieser code stellt nicht nur fest ob ein Prozess noch läuft.
Er startet zuerst einen Prozess und prüft dann ob dieser noch läuft...
(
TaskID = Shell("notepad.exe", vbNormalFocus))
Kommentar von Micha55 am 10.02.2001 um 17:44
Frage: Die API "WaitForSingleObject" stoppt doch das Hauptprogramm, bis das Childprogramm beendet ist, oder?