| Autor |
Beitrag |
LittleBen
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Sa 14.08.10 00:11
Hallo zusammen,
Zuerst einmal:
- Ich bin neu hier im Forum und hoffe, dass mein Thema hier richtig ist
- Ja, ich habe die Suchfunktion benutzt, aber nichts passendes gefunden
- und auch gegoogeld habe ich
Jetzt zu meinem Thema:
Ich möchte eine Meldung erhalten, sobald ein fremdes Programm ausgeführt wird. Am besten dann noch den Titel des Handles.
Nur wie stell ich das nun an?
Habe schon viel versucht mit der Function ActiveCaption. Aber diese muss ich ja in einen Timer oder in ApplicationMessage schreiben. Doch dann gibt es mir die Caption von dem aktuellen Handle ziemlich oft aus! Desshalb will ich, dass es mir die Caption vom aktuellen Handle nur beim Start gibt.
Danke schon mal im Voraus!
Grüße,
Benny
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 14.08.10 00:17
Dann merk dir halt mit nem Flag, dass du die Meldung "Programm wurde gestartet" schon ausgegeben hast.
Wie sieht dein Code aus?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 14.08.10 10:34
Xentar hat folgendes geschrieben : | | Dann merk dir halt mit nem Flag, dass du die Meldung "Programm wurde gestartet" schon ausgegeben hast. |
Ich glaube er meint nicht sein Programm, sondern
LittleBen hat folgendes geschrieben : | | Ich möchte eine Meldung erhalten, sobald ein fremdes Programm ausgeführt wird. Am besten dann noch den Titel des Handles. |
Suche mal nach ProzessHandle, ich glaube das dürfte das richtige sein, um zu erfahren, ob nach Deinem Prog noch andere Programme gestartet werden.
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 14.08.10 11:00
Entwder regelmäßig alle Prozesse auflisten und gucken, welcher Prozess neu dazu gekommen ist, oder CreateProcess hooken.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 14.08.10 15:06
ALF hat folgendes geschrieben : | Xentar hat folgendes geschrieben : | | Dann merk dir halt mit nem Flag, dass du die Meldung "Programm wurde gestartet" schon ausgegeben hast. | Ich glaube er meint nicht sein Programm, sondern
LittleBen hat folgendes geschrieben : | | Ich möchte eine Meldung erhalten, sobald ein fremdes Programm ausgeführt wird. Am besten dann noch den Titel des Handles. |
Suche mal nach ProzessHandle, ich glaube das dürfte das richtige sein, um zu erfahren, ob nach Deinem Prog noch andere Programme gestartet werden.
Gruss Alf |
Joa, das war mir klar.
Hatte das nur so verstanden, dass er das schon hat, mit der Einschränkung, dass bei ihm die Meldung mehrfach erscheint.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Sa 14.08.10 15:07
Regelmäßig alle Prozesse auflisten habe ich mir auch schon überlegt. Aber dies müsste ich ja dann in einen Timer schreiben mit dem Intervall 1 Sekunde, dass es auch wirklich bemerkt welches Programm gerade startet(oder gerade gestartet wurde). Und dann müsste ich ja noch die Listen Vergleichen, wie tu ich das?
Im Moment mache ich dies:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function ActiveCaption: string; var Handle: THandle; Len: LongInt; Title: string; begin Result := ''; Handle := GetForegroundWindow; if Handle <> 0 then begin Len := GetWindowTextLength(Handle) + 1; SetLength(Title, Len); GetWindowText(Handle, PChar(Title), Len); ActiveCaption := TrimRight(Title); end; end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin StaticText1.Caption:= ActiveCaption; end; |
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 14.08.10 17:38
Also einen Algorithmus, wie man zwei Listen vergleicht, sollte nicht so schwer zu implementieren sein, wenn man etwas nachdenkt und mal versucht das selber hinzubekommen. Desweiteren würde ich die Listen nur vergleichen, wenn sich an der Prozessanzahl was geändert hat. Und ob man das jede Sekunde machen muss ist auch fraglich. Auch würde ich keinen Timer nehmen, sondern einen Thread, zumindest für den Vergleich der Listen.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Sa 14.08.10 18:10
Aber mit GetForegroundWindow bekommst Du nicht die Prozesse sondern nur dein eigenes Handle zur Zeit.
Schau Dir diesen lnk mal an. Vielleicht kannst Du es verwenden.
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Di 17.08.10 00:10
Es gab auch mal ein Beispiel von toms aus der DP, wie man sowas mit einem Shellhook macht, aber mein Link darauf ist nicht mehr gültig, und ich weiss nicht, ob ich den Source einfach so rausrücken darf.
Da wurde afaik genau das gemacht, was du benötigst, nämlich Createprocess(ex) und Shellexecute(ex) gehookt.
Früher hatte Luckie das glaube ich auch auf seiner Webseite, aber die scheint sich wohl geändert zu haben.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 17.08.10 13:55
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Mi 18.08.10 15:52
Dann bedank ich mich jetzt mal bei allen für die Mühen.
Ich bin schon wieder an einem neuem Projekt.
Gruße,
Benny
|
|