Entwickler-Ecke

Windows API - Symbol aus "Infobereich" entfernen


LokutusvB - Do 10.07.08 14:01
Titel: Symbol aus "Infobereich" entfernen
Hallo Leute,

ich plage mich jetzt schon fast eine Woche mit diesem Thema herum. Ich habe via Application.ProcessMessages und Sendkey ein externes Programm beendet, was jedoch sein Symbol im Infobreich hat. Mit dem Beenden des Programmes jedoch wird das Symbol nicht automatisch aus dem Infobereich von Windows entfernt, sondern erst mit dem Bewegen des Nauszeigers über das Symbol. Im großen weitern Internet stöst man für Delphi immer nur auf 2 Lösungen, die jedoch alle beide nicht funktionen, entweder ist das das WM_MOSEMOVE-Event über den Infobereich, oder gar die ganze Taskleiste oder aber das Absetzten einer Message 106597.

Hat sich hier im Forum schon einmal jemand erfolgreich diesem Thema angenommen und konnte es auch lösen?


ZeitGeist87 - Do 10.07.08 14:26

Hallo!

Dass das TNA nicht ordnungsgemäß zerstört wird, liegt daran, dass du wahrscheinlich die Anwendung nicht korrekt beendest.

Ist zum Beispiel ein Programm in der TNA und es wird über den Taskmanager beendet, bleibt das Icon stehen.

Beendet man es hingegen über die vorgesehene Schließen-Funktion der Anwendung, so kümmert sich diese auch mit bzw. sollte sich diese auch mit um die Auflösung des TNA-Icons kümmern.

Wie beendest du die Anwendung?


LokutusvB - Do 10.07.08 16:19

Ich beende diese Anwendung über das Handle des Taskmanagers, sprich ...TerminateProcess(hProcess, 0);...

Hierbei handelt es sich um 2 Prozesse, die sonst nur über das Icon in der Infoleiste zu beenden sind, über Rechtsklick und Exit (openvpn.exe, openvpn-gui.exe). Diese beiden Dateien haben leider keinen Parameter, mit dem man das Openvpn sauber beenden kann, deswegen meine Lösung über das Handle des Taskmanagers.


Tilman - Do 10.07.08 16:26

man müsste windows zwingen den bildschirm neu zu zeuchnen bzw. zumindest die notificaton area... ka ob man da einfach ne message hinschicken kann oder so...


Yogu - Do 10.07.08 17:29

user profile iconLokutusvB hat folgendes geschrieben:
Ich beende diese Anwendung über das Handle des Taskmanagers, sprich ...TerminateProcess(hProcess, 0);...

Das ist sicherlich nicht der richtige Weg. Du solltest lieber versuchen, eine Message zu schicken - zum Beispiel WM_COSE.

Wie man den TNA updated, weiß ich leider nicht.


LokutusvB - Fr 11.07.08 16:27
Titel: Problem gelöst
Das radikale "Abschließen" des Prozesses über das Handle ist der falsche Weg gewesen.

Das Delphi Tool WinSight hat mir den Fenstertext und den Klassennamen des versteckten Fesnters der VPN-Anwendung verraten. So kann ich nun über SendMessage ein WM_Close senden, den Rest abarbeiten, die Anwendung schließt sich und das Symbol ist aus dem Infobereich verschwunden.

Danke für die Hilfe!!! :)