Hallo,
@Sprint:
Zitat:
Woher willst du das wissen, das die Anwendung das macht? (1000 Weg führen nach Rom. Muss ja nicht immer alles über Shell_NotifyIcon gehen)
Ich habe mir 3 unterschiedliche Objecte angeschaut, mit denen ein Icon in den Systray gezaubert wird und das Prinzip war bei allen gleich. Daraus habe ich gefolgert (nicht mathematisch korrekt, ich weiß aber für den Beweis mit Vollständiger Induktion viel mir nix ein
), das dies das Prinzip für Icons im Systray sein muss.
Was ich bereits geschafft habe ist das Abfangen der function Shell_NotifyIcon. Ich habe alle Daten extrahiert und schon den Tipp und das Icon für meine Zwecke benutzenen können. Alle Veränderungen die mittels Shell_NotifyIcon gemacht werden, werden schon in meiner eigenen Leiste (keinen Bezug mehr zum Explorer systray) angezeigt.
Das Problem, welches ich derzeit habe ist, die Nachrichten MouseMove, MouseDown, Mouseup, Mousedblclick bei anclicken, mit der Maus überfahren, etc des Icons an die Anwendung weiterzugeben, damit diese dann darauf reagieren kann (Popupmenü,...).
Das, was ich von der Anwendung weiß, ist ein
Handle, nämlich das hier:
Code:
fData.Wnd := AllocateHwnd(OnMessage); //
handle to get notification message
Ein
Handle, um die Notification Messages zu empfangen. Onmessage ist eine Procedure in der Koponente für das Systray Icon. Wie kann jedoch jetzt ein
Handle einer Procedure übergeben werden? Procedures haben schließlich kein
Handle. Also stellt sich nun die Frage, was ist in der Variablen fdata.wnd gespeichert?
Und wie kann ich dem Programm, welches sein Icon in den Systray eingetragen hat mitteilen, das der Nutzer auf sein Icon geclickt hat.
Gruß Helen