Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Prüfen ob ein Programm noch aktiv ist.

Forumthread: Prüfen ob ein Programm noch aktiv ist.

Prüfen ob ein Programm noch aktiv ist.
03.01.2006 15:27:40
xlforum
Hallöchen zusammen,
habe mal wieder eine Frage.
Ich habe mit ShellID = Shell(blablabla....) ein Programm gestartet und auch die PID in der Variable ShellID.
Das gestartete Programm wird irgendwann (hoffentlich ;-) von einem User per OK beendet, wie kann ich jetzt prüfen ob das Programm noch aktiv ist ?
Danke für eure Hilfe.
Grüße
Holger
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob ein Programm noch aktiv ist.
03.01.2006 23:35:47
Josef
Hallo Holger!
Beispiel!
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit
'Quelle -ActiveVB.de

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 start()

TaskID = Shell("notepad.exe", vbNormalFocus)

End Sub


Private Sub test()

If IsActive Then
  MsgBox "Anwendung Läuft noch!"
Else
  MsgBox "Anwendung Läuft nicht mehr!"
End If

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Prüfen ob ein Programm noch aktiv ist.
04.01.2006 09:48:00
Holger
Hi Sepp,
Danke für Deine Antwort einen änhlichen Ansatz mit OpenProcess habe ich auch schon probiert hat bei mir aber leider nicht so funktioniert wie ich mir das vorgestellt habe.
Ich habe mittlerweile eine Lösung gefunden die für mich funktioniert.
Vielen Dank.
Gruß
Holger
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Programmaktivität in Excel VBA prüfen


Schritt-für-Schritt-Anleitung

Um herauszufinden, ob ein gestartetes Programm in Excel noch aktiv ist, kannst du die OpenProcess-Funktion aus der Windows-API verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)", wähle "Einfügen" und dann "Modul".

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    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 As Long
    
    Private Function IsActive() As Boolean
       Dim Handle As Long, ExitCode As Long
       Handle = OpenProcess(PROCESS_ALL_ACCESS, False, TaskID)
       Call GetExitCodeProcess(Handle, ExitCode)
       Call CloseHandle(Handle)
       IsActive = (ExitCode = STILL_ACTIVE)
    End Function
    
    Private Sub start()
       TaskID = Shell("notepad.exe", vbNormalFocus)
    End Sub
    
    Private Sub test()
       If IsActive Then
           MsgBox "Anwendung läuft noch!"
       Else
           MsgBox "Anwendung läuft nicht mehr!"
       End If
    End Sub
  4. Programm starten: Führe die start-Sub aus, um das Programm zu starten.

  5. Aktivitätsprüfung: Rufe die test-Sub auf, um zu prüfen, ob das Programm noch aktiv ist.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"
    Lösung: Stelle sicher, dass du die richtigen Deklarationen für die Funktionen eingefügt hast.

  • Fehler: "Zugriffsverletzung"
    Lösung: Überprüfe, ob das Programm, das du überprüfst, mit den richtigen Berechtigungen ausgeführt wird.

  • Das Programm wird nicht gefunden.
    Lösung: Stelle sicher, dass der Prozessname korrekt ist und das Programm tatsächlich läuft.


Alternative Methoden

Wenn du eine einfachere Methode suchst, um zu überprüfen, ob ein Programm noch aktiv ist, kannst du auch die Tasklist-Kommandozeile verwenden, um die laufenden Prozesse aufzulisten und die Ergebnisse in Excel zu importieren. Das folgende VBA-Skript kann dir dabei helfen:

Sub CheckProcess()
    Dim objShell As Object
    Dim objExec As Object
    Dim strLine As String
    Dim processName As String
    processName = "notepad.exe"

    Set objShell = CreateObject("WScript.Shell")
    Set objExec = objShell.Exec("tasklist")

    Do While Not objExec.StdOut.AtEndOfStream
        strLine = objExec.StdOut.ReadLine
        If InStr(1, strLine, processName) > 0 Then
            MsgBox processName & " läuft."
            Exit Sub
        End If
    Loop
    MsgBox processName & " läuft nicht."
End Sub

Praktische Beispiele

Ein häufiges Beispiel ist die Überprüfung von Anwendungen wie notepad.exe oder excel.exe. Du kannst den oben genannten Code leicht anpassen, um andere Programme zu überprüfen, indem du den Prozessnamen änderst.


Tipps für Profis

  • Optimierung der Performance: Wenn du regelmäßig prüfen musst, ob ein Programm aktiv ist, erwäge, eine Schleife mit einer Verzögerung einzufügen, um die Systemressourcen zu schonen.

  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung in deinen Funktionen, um unerwartete Situationen elegant zu handhaben.

  • Dokumentation: Halte deinen Code gut kommentiert, damit du und andere Benutzer die Funktionsweise leicht nachvollziehen können.


FAQ: Häufige Fragen

1. Wie kann ich herausfinden, ob eine bestimmte Nummer aktiv ist?
Du kannst die PID (Process ID) verwenden, um zu überprüfen, ob eine spezifische Anwendung läuft, indem du den Code entsprechend anpasst.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in den meisten Excel-Versionen funktionieren, die VBA unterstützen, einschließlich Excel 2010 und neuer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige