Autor Beitrag
Dietmar1961
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 14.04.06 16:30 
Hallo mal eine Frage

ich starte mit in meiner Applikation ein Programm automatisch und beende es nach einiger Zeit wieder und das in festen Zeitabständen immer wieder (FTP-Watchdog.exe).
Funktioniert wunderbar nur ist mir aufgefallen, dass rechts im Tray, wo aktive Programme angezeigt werden eine Aktualisierung nur stattfindet, wenn ich mit dem Mauszeiger drüberfahre und so tummeln sich bei jedem Programmaufruf mehr Icons. Kann man die irgendwie aktualisieren?


Danke schon mal für die Antwort

:D
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.04.06 16:33 
user profile iconDietmar1961 hat folgendes geschrieben:
und so tummeln sich bei jedem Programmaufruf mehr Icons. Kann man die irgendwie aktualisieren?

Klingt eher so, als wenn du es nicht entfernst, wenn du dein Programm beendest.
Dietmar1961 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 14.04.06 21:11 
Da könntest du recht haben. Ruf ne Funktion auf, die nicht von mir stammt. Muss ich mal untersuchen aber vielen Dank für den Tipp.

Bin noch Neu hier und oft sieht man die naheliegendsten Dinge nicht :wink:
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: Di 21.11.06 23:57 
Hallo allerseits,

ich bin aus der Antwort leider nicht ganz schlau geworden. Wenn bspw. die Icons von einem Programm generiert werden, welches aus meiner Applikation gestartet wird, wie kann ich diese 'eliminieren'?

Kann es auch sein, daß ein 'Refresh' der Tray- bzw. Taskbar erzwungen werden muß? Und wenn ja, wie?

Auf bald ...
kandesbunzler.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 23.11.06 10:36 
So muss es aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @IconData);
end;


Und das ganzer Beispiel hier: www.michael-puff.de/...i/Sonstiges/TNA.html
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: Fr 01.12.06 15:08 
Hallo allerseits,

die Prozedur funktioniert ja dann aber nur, wenn die eigene Applikation beendet wird.

Problem: Meine Applikation (Prog_A.exe) ruft eine unabhängige Applikation (Prog_B.exe) auf. Prog_B.exe wird durch das (weiterlaufende) Prog_A.exe geschlossen. Ergo: Prog_B.exe 'hinterläßt' die Icons - nicht mein Prog_A.exe.

Auf bald ...
kandesbunzler.
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: Sa 02.12.06 01:04 
Nachtragsfrage: Welche generelle Möglichkeit gibt es, den Tray- resp.- Taskbarrefresh zu erzwingen?

Auf bald ...
kandesbunzler.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.12.06 15:42 
Wie beendest du denn die andere Anwendung? Ist diese andere Anwendung auch von dir?
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: So 03.12.06 20:25 
Leider nein, es handelt sich um ein ein Steuerprogramm für USB-Device-Servers und wird mit 'Prog_B.exe' aus meiner Applikation aufgerufen. Aufruf und Schließen per 'KillTask' Funktion funktioniert auch, nur, wie schon gesagt, tummeln sich die 'Icon-Leichen' in der Traybar, welche erst beim 'Überfahren' mit der Maus OHNE jegliche Aktion (ohne Klick etc.) verschwinden. Es handelt sich hier um einen optischen Schönheitsfehler.

Deshalb die Anfrage nach Refreshoption der Traybar per Befehl.

Auf bald ...
kandesbunzler.

PS: Nach mehrfachem Starten und Schließen des 'Prog_B.exe' erhöht sich die Anzahl der 'Iconleichen' jeweils um eins.
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 04.12.06 14:09 
user profile iconkandesbunzler hat folgendes geschrieben:
Leider nein, es handelt sich um ein ein Steuerprogramm für USB-Device-Servers und wird mit 'Prog_B.exe' aus meiner Applikation aufgerufen. Aufruf und Schließen per 'KillTask' Funktion funktioniert auch, nur, wie schon gesagt, tummeln sich die 'Icon-Leichen' in der Traybar, welche erst beim 'Überfahren' mit der Maus OHNE jegliche Aktion (ohne Klick etc.) verschwinden. Es handelt sich hier um einen optischen Schönheitsfehler.

Deshalb die Anfrage nach Refreshoption der Traybar per Befehl.

Auf bald ...
kandesbunzler.

PS: Nach mehrfachem Starten und Schließen des 'Prog_B.exe' erhöht sich die Anzahl der 'Iconleichen' jeweils um eins.


Gibt es denn keine Möglichkeit, Prog_B.exe sauber zu beenden anstatt es mit KillTask abzuschiessen? Dann hat das Programm natürlich auch keine Möglichkeit, ordentlich aufzuräumen und das Trayicon wieder zu entfernen. Das kann auch andere unerwünschte Effekte haben, wie z.B. dass DLLs nicht entladen werden und als Speicherleichen zurückbleiben.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: So 10.12.06 18:23 
Hallo Stefan und allerseits,

sowie Danke für die Antwort. Dies wäre tatsächlich die sauberere Variante. Wenn ich das Prog_B.exe beende, werde ich aber mit der Sicherheitsabfrage 'belästigt', ob das Programm wirklich beenden will.
Frage: Läßt sich diese Abfrage unterdrücken bzw. 'automatisch' durch einen 'ghost'-Mausklick bejahen?

Auf bald ...
kandesbunzler.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Di 12.12.06 08:58 
user profile iconkandesbunzler hat folgendes geschrieben:
Hallo Stefan und allerseits,

sowie Danke für die Antwort. Dies wäre tatsächlich die sauberere Variante. Wenn ich das Prog_B.exe beende, werde ich aber mit der Sicherheitsabfrage 'belästigt', ob das Programm wirklich beenden will.
Frage: Läßt sich diese Abfrage unterdrücken bzw. 'automatisch' durch einen 'ghost'-Mausklick bejahen?

Auf bald ...
kandesbunzler.


Hallo,

ganz anderer Ansatz: wenn du herauskriegen kannst, welche ID das Fremdprogramm für die Icons angibt, könntest du das Taskbar-Icon selbst mit Shell_NotifiyIcon entfernen. Genau das Herauskriegen wird das Problem sein.

Gruss Reinhard
kandesbunzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 1


Delphi 7, XE2
BeitragVerfasst: Do 14.12.06 00:04 
Hallo Reinhard ...

... und alle anderen. -)

Mittlerweile habe ich über das XSpy - Tool (absolut genial!) sogar das Handle für die Abfragemeldung herausbekommen.

Nunmehr möchte ich den Button für 'Ja' virtuell drücken, bspw. mit:

'SendMessage(wnd, WM_CLOSE, 0, 0);'

Ergebnis: Der 'Ja' - Button wird eliminiert. Das schaut recht lustig aus. Nachdem ich die Prozedur auch auf 'Nein' ausgedehnt hatte, ... .

Frage: Wie heißt der 'Button-Down' - Befehl, ohne den Fensteinhalt zu leeren?


Danke und auf bald ...
kandesbunzler.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Do 14.12.06 03:10 
user profile iconkandesbunzler hat folgendes geschrieben:
Hallo Reinhard ...

... und alle anderen. -)

Mittlerweile habe ich über das XSpy - Tool (absolut genial!) sogar das Handle für die Abfragemeldung herausbekommen.

Nunmehr möchte ich den Button für 'Ja' virtuell drücken, bspw. mit:

'SendMessage(wnd, WM_CLOSE, 0, 0);'

Ergebnis: Der 'Ja' - Button wird eliminiert. Das schaut recht lustig aus. Nachdem ich die Prozedur auch auf 'Nein' ausgedehnt hatte, ... .

Frage: Wie heißt der 'Button-Down' - Befehl, ohne den Fensteinhalt zu leeren?


Danke und auf bald ...
kandesbunzler.


Hallo,

ich weiss nicht genau, ob es das ist, was du meinst:

Ein Button weiss von nichts ausser das er einen Identifier hat (16bit-Zahl, ich glaube Delphi vergibt die automatisch). Wird der Button gedrückt, sendet er "WM_COMMAND" an sein übergeordnetes Fenster. i.a. den Dialog. In WM_COMMAND wird die ID des Buttons angegeben, Näheres in der SDK-Hilfe. Für die ID kannst du Spy nochmal anwerfen.

Es ist die Dialog-Message-Loop, die weiss, was auf den gedrückten Button geschehen soll. Um einen Button vollständig zu emulieren, sollte man also eine WM_COMMAND-Message mit dem richtigen Inhalt an das Dialog-Fenster schicken.

Gruss Reinhard