Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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 8)
- und auch gegoogeld habe ich :wink:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Sa 14.08.10 10:34 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Sa 14.08.10 11:00 
Entwder regelmäßig alle Prozesse auflisten und gucken, welcher Prozess neu dazu gekommen ist, oder CreateProcess hooken.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 14.08.10 15:06 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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:
ausblenden 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 17.08.10 13:55 
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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