mein kleines Progrämmchen ist soweit fertig und tut was es soll!
Neben dem Programm verwende ich noch ein paar kleine scripte:
- getprozesse -> ruft ps auf und erzeugt die Datei laufende.txt die Liste der aktiven Prozesse
- unload_all_mntd_sfs -> entfernt alle überflüssigen sfs aus dem Speicher
Hier mal das Programm "prozesscontroller.pb":
Code: Alles auswählen
EnableExplicit
IncludeFile "prozesscontroller.pbf"
Define event, EventGadget, EventType, EventMenu, EventWindow, prglauf
Global erster.i, prozessbeendet.i, gefunden.i, teilstr$, neuerstr$
Global NewList neueprozesse.s()
Global NewList alteprozesse.s()
OpenWindow_0()
erster = 0
AddWindowTimer(Window_0, 123, 30000)
; ----- hier etwas das sofort beim Start erledigt werden soll eintragen
Repeat
Event = WaitWindowEvent()
EventGadget = EventGadget()
EventType = EventType()
EventMenu = EventMenu()
EventWindow = EventWindow()
If Event = #PB_Event_Timer And EventTimer() = 123
analyse(event)
EndIf
prglauf=Window_0_Events(Event)
Until prglauf=#False
End
;-------- ab hier die Proceduren für Buttons, etc. -----------------
Procedure beenden(Event)
End
EndProcedure
Procedure analyse(event)
Define hilf$, hilfstr$
hilf$ = GetCurrentDirectory()+"getprozesse"
RunProgram(hilf$) ; erzeugt die Datei "laufende.txt"
ClearGadgetItems(editor_0)
ClearList(neueprozesse())
#DATEI_REPORT = 1
If ReadFile(#DATEI_REPORT, GetCurrentDirectory()+"laufende.txt")
While Eof(#DATEI_REPORT) = #False
hilfstr$ = ReadString(#DATEI_REPORT)
If Mid(hilfstr$,23,1) = "/"
If FindString(hilfstr$,"/bin/busybox init") = 0
If FindString(hilfstr$,"/sbin/udevd") = 0
If FindString(hilfstr$,"/sbin/getty") = 0
If FindString(hilfstr$,"/usr/bin/xinit") = 0
If FindString(hilfstr$,"/usr/local/apps/ROX-Filer/ROX-Filer") = 0
If FindString(hilfstr$,"/usr/local/pup_event/pup_event_frontend_d") = 0
If FindString(hilfstr$,"/usr/sbin/cupsd") = 0
If FindString(hilfstr$,"/usr/bin/dbus-daemon") = 0
If FindString(hilfstr$,"/usr/local/firewallstate") = 0
If FindString(hilfstr$,"/usr/lib/i386-linux-gnu/gconf") = 0
AddGadgetItem(editor_0,-1,hilfstr$)
AddElement(neueprozesse())
neueprozesse() = hilfstr$
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
Wend
CloseFile(#DATEI_REPORT)
EndIf
prozessbeendet = 0
If erster = 0 ; wenn es der erste Durchlauf ist
ForEach(neueprozesse())
AddElement(alteprozesse())
alteprozesse() = Mid(neueprozesse(),23)
Next
erster = 1
Else
ForEach(alteprozesse()) ; pruefen ob ein alter Prozess in der neuen Liste fehlt
gefunden = 0
teilstr$ = alteprozesse()
ForEach(neueprozesse())
neuerstr$ = neueprozesse()
If FindString(neuerstr$,teilstr$) > 0
gefunden = 1
EndIf
Next
If gefunden = 0
prozessbeendet = 1
EndIf
Next
ClearList(alteprozesse())
ForEach(neueprozesse())
AddElement(alteprozesse())
alteprozesse() = Mid(neueprozesse(),23)
Next
EndIf
If prozessbeendet = 1
RunProgram("/usr/sbin/ceelab/lazy-sfs-unload/unload_all_mntd_sfs")
EndIf
EndProcedure
und hier die Form dazu:
Code: Alles auswählen
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Global Window_0
Global Button_0, Button_1, Editor_0
Enumeration FormFont
#Font_Window_0_0
EndEnumeration
LoadFont(#Font_Window_0_0,"Droid Sans Mono", 10)
Declare ResizeGadgetsWindow_0()
Declare beenden(EventType)
Declare analyse(EventType)
Procedure OpenWindow_0(x = 0, y = 0, width = 710, height = 230)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
Button_0 = ButtonGadget(#PB_Any, 340, 200, 230, 25, "Programm beenden")
GadgetToolTip(Button_0, "Beendet die Prozessueberwachung")
Button_1 = ButtonGadget(#PB_Any, 70, 200, 100, 25, "analyse")
Editor_0 = EditorGadget(#PB_Any, 20, 20, 680, 170)
SetGadgetFont(Editor_0, FontID(#Font_Window_0_0))
EndProcedure
Procedure ResizeGadgetsWindow_0()
Protected FormWindowWidth, FormWindowHeight
FormWindowWidth = WindowWidth(Window_0)
FormWindowHeight = WindowHeight(Window_0)
ResizeGadget(Button_0, 340, FormWindowHeight - 30, 230, 25)
ResizeGadget(Button_1, 70, FormWindowHeight - 30, 100, 25)
ResizeGadget(Editor_0, 20, 20, FormWindowWidth - 30, FormWindowHeight - 60)
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_SizeWindow
ResizeGadgetsWindow_0()
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Button_0
beenden(EventType())
Case Button_1
analyse(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Werde ich mir noch überlegen.
Zwei Dinge sind mir noch aufgefallen:
1. Unter Linux kann ich kein icon ins Programm einbauen. Die Optionen unter "Projekt" ist deaktiviert.
2. Wie bekomme ich das executable als Icon ins System-Tray ohne, dass es unten in der Programmleiste als laufendes Programm angezeigt wird? Ein Kollege hat mal testweise etwas ähnliches mit C Programmiert und das wird nicht als Programm in der Liste unten angezeigt sondern hat ein kleines Symbol im System-Tray.
LG
Wolfgang