Autor Beitrag
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Do 08.05.03 16:28 
Also, ich hab den Code zum Prozesse anzeigen. Die Anzahl der Prozesse die beim Start meines Programms offen sind werden in einer Variable "start" abgelegt. Es erneuert jede Sekunde die Liste der Prozesse. Wenn die Anzahl der Prozesse, die gerade in der Listbox angezeigt werden größer ist, als die Anzahl der Prozesse, die beim Start des Programms offen waren, soll er alle neuen Prozesse durchgehen in einer Wiederholungsschleife und diese in listbox2 reinschreiben, mit der aktuellen Uhrzeit und dem kürzel "(open)". Dies soll er jedoch nur 1mal reinschreiben und zwar dann, wenn der Prozess das erste mal auftaucht und er soll, wenn der Prozess wieder geschlossen wird, den Namen des Prozesses mit der aktuellen Uhrzeit und dem Kürzel "(close)" dazuschreiben.

1. Ich habe das Problem, dass jedes mal, wenn er den Timer durchläuft, in dem das oben genannte steht, den Prozess reinschreibt und nicht nur, wenn dieser gestartet wird.

2. Ich schaffe es nicht, dass er wirklick nach dem spezifischen Prozessnamen sucht, der wieder beendet wird.

Bitte um schnelle Hilfe, ist sehr wichtig!

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
ase
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Do 08.05.03 22:33 
das wichtigste ist: ruhe bewahren 8)


ich schreib jetzt nich den gesamten quellcode weil des zu ausführlich währe und dir nicht wirklich hilft, darum nen paar tips.

- definiere dir ein objekt. meinet wegen TProcess.
- dieses objekt muss alle eigenschaften besitzen, die ein prozess in deinem programm haben kann. also beispielsweise: Ist der prozess schon vor dem start des programms da gewesen? ist der prozess noch aktiv (open) oder schon wieder beendet worden (close)? name des prozesses und sonstiges nützliches
- benutze ListBox1.Items.AddObject(Prozess.Name, Prozess), um deine einträge mit den entsprechenden objekten zu assoziieren.
- wenn dein timer ereigniss feststellt, dass ein prozess geschlossen wurde, einfach in liste suchen und ListBox.Items.Objects[x].Close := True oder sowas.

wenn du das so machst, dann sollte nichts mehr schief gehen.

viel glück!


ase

_________________
-EN
Hansi@OMG Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Fr 09.05.03 15:55 
Was heißt ein Objekt definieren? Wie geht das?

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
ase
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Fr 09.05.03 16:14 
hoho... ich tu dir mal den anfang einfach vorgeben:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  Type TProcessMode = (pmBeforeStart, pmRunning, pmClosed);

          TProcess = Class(TObject)
            Private
              FTaskName: String;
              FMode: TProcessMode;
            Public
              Constructor Create(AName: String; AMode: TProcessMode);

              Property Name: String read FTaskName;
              Property Mode: TProcessMode read FMode write FMode;  
          End;


// Unter IMPLEMENTATION

Constructor TProcess.Create(AName: String; AMode: TProcessMode);
Begin
  Inherited Create;
  FTaskName := AName;
  FMode := AMode;
End;


so, nun hast du nen eigenes objekt definiert. dieses objekt "hält" für dich den taskname und den modus des tasks. pmBeforeStart haben alle die prozesse, die für deine anwendung aktiv waren. pmRunning haben alle die, die nach deiner anwundung gestartet wurden. also die die (open) davor zu stehen haben. pmClosed sind die, die vorher pmRunning waren, dann aber geschlossen wurden.

mittels constructor kannst du dann die initial-eigenschaften festlegen. also beim start dann:

(pseudo)
ausblenden Quelltext
1:
2:
3:
  ...
  For i := 1 to Anzahl der laufenden prozesse do
    ListBox1.Items.AddObject(Prozessname, TProcess.Create(Prozessname, pmBeforeStart));


somit assoziierst du mit jedem eintrag in deiner listbox ein TProcess objekt. ran kommen tust du dann so:

ausblenden Quelltext
1:
  Label1.Caption := TProcess(ListBox1.Items.Objects[ListBox1.ItemIndex]).Name;					


jetzt musst du jede sekunde (?) die prozessliste abfragen. dann checkst du anhand der liste1 ob neue hinzugekommen sind. wenn ja, dann:

ausblenden Quelltext
1:
  ListBox_2_.Items.AddObject(NeuerProzessName, TProcess.Create(NeuerProzessName, pmRunning));					


pmRunning weil der ja neu dazugekommen ist.

im selben atemzum checkst du, ob vielleicht ein prozess, der vorher in deiner liste2 pmRunning hatte schon beendet wurde. also dessen name dir von windows nicht zurückgegeben wurde. wenn du da einen hast, dann folgendes:

(halb-pseudo)
ausblenden Quelltext
1:
2:
3:
4:
5:
  x = ItemIndex der Liste2 des beendeten prozesses (IndexOf- methode)

  liste_3_.Items.AddObject(Prozessname, ListBox_2_.Items.Objects[x]);
  TProcess(liste_2_.Items.Objects[x]).Mode := pmClosed;
  liste_2_.Items.Delete(x);


so sollte des gehen. ob du dann noch (open) oder (close) davor schreibst bleibt dir überlassen.

vielleicht konnte ich dir ja helfen!


ase

_________________
-EN
Hansi@OMG Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Fr 09.05.03 16:38 
Danke, ich versteh des jetzt zwar überhaupt nicht mehr, aber der matze wird mir des bestimmt erklären, der geht nämlich bei mir auf die Schule.

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
ase
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Fr 09.05.03 16:45 
:( ich dachte ich hätte des gut erklärt.

ich kanns auch ausführlicher machen aber dazu fehlt mir gerade die zeit weil mein soeben fertig gewordener Download von Debian ruft. wenns garnet geht, dann einfach nochmal fragen!


ase

_________________
-EN
Hansi@OMG Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Fr 09.05.03 20:50 
Du hast es auch gut erklärt, bloß meine Delphikenntnisse sind in dieser Richtung noch unterentwickelt, deshalb versteh ich des nicht so ganz. Aber danke für die ausführliche Erklärung. :D

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
ase
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Fr 09.05.03 21:22 
tja dann hast du jetzt die einmalige gelegenheit deine delphikenntnisse zu erweiter. objekte sind nen großer themenkomplex musst du wissen. viel spaß dabei!

_________________
-EN