Hallo,
Ich danke dir Vielmals.du bist der beste!!
*gg* dann schaun wir mal. Öffne Excel, geh zu VBA und füge eine Userform hinzu. Lege auf die Userform folgende Steuerelemente:
1.) Zwei Listboxen. ‚ListBox1‘ und ‚Listbox2‘.
2.) Zwei Button. ‚CommandButton1‘ und ‚CommandButton2‘.
Beschrifte den Button1 mit ‚Überwachung starten‘, den Button2 mit ‚Überwachung beenden‘
Öffne das Codefenster der Userform und füge den Code ein.
Starte ein Programm, das Du überwachen möchtest, danach starte unser neues Programm.
Suche das Programm, das überwacht werden soll in der Liste der laufenden Programme und klicke die Zeile an. Der Name wird dadurch in die zweite Liste eingetragen. Das kannst Du auch mit weiteren Programmen tun.
Dann klicke auf ‚Überwachung starten‘. Nun solltest Du zum Test mal eines der Programme beenden und neu starten, oder auch verschiedene immer mal wieder …
Irgendwann klickst Du dann auf ‚Überwachung beenden‘ und schließt Excel.
Danach findest Du in ‚C:‘ eine Datei ‚Überwachungsergebnis.log‘, in der steht, wann die Programme gestartet und beendet wurden.
Gut so? Wenn es immer die selben Programme sind, kannst Du die Namen auch direkt in den Code eintragen und die Auswahl über die Fenster wieder ‚ausbauen‘, die Listen durch Arrays ersetzen … zum Testen war es so einfacher, ich wollte Dir getesteten Code posten, der ohne Fehler läuft.
Wenn Du den Code verstanden hast, mußt Du ja Niemandem erzählen, daß Du Hilfe hattest. 
Option Explicit
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" \_
(ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias \_
"Process32First" (ByVal hSnapShot As Long, uProcess \_
As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias \_
"Process32Next" (ByVal hSnapShot As Long, uProcess \_
As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass \_
As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const TH32CS\_SNAPPROCESS As Long = 2&
Const MAX\_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String \* MAX\_PATH
End Type
Dim Flag As Boolean
Dim txt As String
Dim Zustand() As Boolean
Private Sub GetExeNames()
Dim hSnapShot As Long, Result As Long
Dim aa As String, bb As String
Dim Process As PROCESSENTRY32
ListBox1.Clear
hSnapShot = CreateToolhelp32Snapshot(TH32CS\_SNAPPROCESS, 0&:wink:
If hSnapShot = 0 Then Exit Sub
Process.dwSize = Len(Process)
Result = ProcessFirst(hSnapShot, Process)
Do While Result 0
aa = Process.szExeFile
aa = Left$(aa, InStr(aa, Chr$(0)) - 1)
If Right$(LCase(aa), 4) = ".exe" Then
ListBox1.AddItem aa
End If
Result = ProcessNext(hSnapShot, Process)
Loop
Call CloseHandle(hSnapShot)
End Sub
Private Sub CommandButton1\_Click()
Flag = True
ReDim Zustand(0 To ListBox2.ListCount - 1)
Ueberwachung
End Sub
Private Sub Ueberwachung()
Dim Fnd As Boolean
Dim i As Integer, j As Integer
While Flag = True
Call GetExeNames
For i = 0 To ListBox2.ListCount - 1
Fnd = False
For j = 0 To ListBox1.ListCount - 1
If ListBox1.List(j) = ListBox2.List(i) Then
Fnd = True
End If
Next
If Fnd = True And Zustand(i) = False Then
txt = txt + ListBox2.List(i) + " ein um " + CStr(Time) + vbCrLf
Zustand(i) = True
End If
If Fnd = False And Zustand(i) = True Then
txt = txt + ListBox2.List(i) + " aus um " + CStr(Time) + vbCrLf
Zustand(i) = False
End If
Next
Sleep 300
DoEvents
Wend
End Sub
Private Sub CommandButton2\_Click()
Dim Pfd As String
Dim ff As Integer
ff = FreeFile
Pfd = "C:\UeberwachungsErgebnis.log"
Flag = False
Open Pfd For Output As #ff
Print #ff, txt
Close #ff
End
End Sub
Private Sub ListBox1\_Click()
ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)
End Sub
Private Sub UserForm\_Initialize()
Call GetExeNames
End Sub