Auslastung der CAD-Anlagen

Hallo,

Könnte mir jemand eine idee geben wie ich denn überprüfen kann,ob CAD Programm im einsatz ist und von welchem Benutzer und wie lange ist benutzt.Diese Details sollen denn in eine Datei Dokumentiert. Ich bitte dringend um helfe.
danke im voraus

Eingesetzte CAD Systeme:
Catia V4 unter dem Betriebssystem HP-UX 11.00 bzw. 11.11
Catia V5 unter Windows XP SP2
Unigraphics NX2 unter Windows XP SP2

Eingesetzte Lizenzmanager:
Die Lizenzmanager für beide CAD Systeme laufen unter Windows Server 2003 bzw. HP-UX 11.x.
Für Unigraphics ist die FlexLM Version 8.3 installiert.
Für Catia ist der LUM v4.6.7 unter HP-UX 11.11 installiert.

Hallo,

OK, Code ist in Arbeit … :smile:

Gruß, Rainer

Hallo,

OK, Code ist in Arbeit … :smile:

Gruß, Rainer

Ich danke dir Vielmals.du bist der beste!!

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. :smile:

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&amp: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

ich weiss gar nicht wie ich dir danken soll.Vielen Vielen Dank.

Hallo,

ich weiss gar nicht wie ich dir danken soll.Vielen Vielen Dank.

das ist einfach, komm mit der nächsten Frage wieder. :smile:
Viel Erfolg und Glück, daß sich der Chef davon beeindrucken lässt!

Gruß, Rainer