Seite 1 von 1
Icons vermehren sich
Verfasst: 10.11.2016 07:03
von 3dhubiflieger
Hallo, ich hätte mal ne Frage bezüglich der Iconerstellung. Mir ist aufgefallen das sich in Windows 7 die Iconsymbole (unten rechts, Pfeil) vermehren. Es werden dann viele Icons doppelt angezeigt, nachdem mein Programm eine weile gelaufen ist. Die Icons betreffen dabei andere Programme. Mein Programm erstellt 1 Icon. Und dieses bleibt auch, komischerweise ?! Wenn ich nun mit der Maus über die ganzen Icons drüberfahre, ohne zu klicken, so verschwinden auf einmal die überflüssigen Icons ?! Gibts dafür eine Erklärung ?
Gruss Kevin
Re: Icons vermehren sich
Verfasst: 10.11.2016 10:08
von RSBasic
Hast du ein Screenshot oder ein Video für uns? Kannst du deine Anwendung hochladen?
Gibst du auch alle Handles wieder frei?
Re: Icons vermehren sich
Verfasst: 10.11.2016 10:56
von Bisonte
Was macht dein Programm ?
Allerdings kann man sagen, das der Iconcache sich nicht ohne Aufforderung "aktualisiert".
Am besten kann man dieses Phänomen beobachten, wenn man von einer SSD Windows 7 startet, auf einem langsameren Rechner.
Nachdem der Desktop erscheint, sind erst alle Icons vorhanden, so wie sie aussehen sollen, dann werden auf einmal alle
schlagartig weiss ... und nach und nach kommen die Originalen Bilder wieder.
Ist es vielleicht dieses ?
Allerdings "vermehren" sich die Icons nicht ohne Grund.
Evt. macht dein Programm da etwas nicht so wie es soll .... ?!
Re: Icons vermehren sich
Verfasst: 11.11.2016 12:46
von 3dhubiflieger
Re: Icons vermehren sich
Verfasst: 11.11.2016 12:55
von Kiffi
Die anderen Icons kenne ich nicht. Welche Programme sind das? Kann es sein, dass Du diese Programme in einer Schleife immer wieder startest (RunProgram())?
Oder aber sind die Icons von Dir (AddSysTrayIcon())?
Grüße ... Peter
P.S.: mach mal das Bild ein wenig kleiner...
Re: Icons vermehren sich
Verfasst: 11.11.2016 12:56
von RSBasic
Und bist du dir sicher, dass AddSysTrayIcon() nicht mehrfach aufgerufen wird, beispielsweise in einer Schleife oder in einer Funktion, die in einer Schleife aufgerufen wird?
Ist dein Quellcode groß? Falls nicht, dann poste den Code oder nur den Bereich, in dem AddSysTrayIcon() aufgerufen wird.
Re: Icons vermehren sich
Verfasst: 11.11.2016 13:24
von ts-soft
Kiffi hat geschrieben:Welche Programme sind das?
DVBViewer und das andere sagt mir im Moment auch nichts.
Re: Icons vermehren sich
Verfasst: 11.11.2016 13:44
von Kiffi
ts-soft hat geschrieben:Kiffi hat geschrieben:Welche Programme sind das?
DVBViewer und das andere sagt mir im Moment auch nichts.
ahso, OK. Dann tippe ich auf wildgewordenes RunProgram().
Grüße ... Peter
Re: Icons vermehren sich
Verfasst: 11.11.2016 15:50
von 3dhubiflieger
@RSBasic Addsystrayicon wird zwar mehrmals aufgerufen, allerdings wird das Icon auch wieder entfernt. Das sieht man ja auch. Sonst müsste mein Programm (schwarzes Icon mit der Lupe) sich ebenfalls vermehren. Aber das bleibt ja so , wie es soll.^
@Kiffi die angezeigten Programme laufen alle nur einmal. Es werden nur die Symbole mehrmals angezeigt. Fahr ich mit der Maus drüber, ist alles wie es soll. ...Das hatte ich aber schon geschrieben.
@TS-Soft Genau DVBViewer ,..und der dazugehörige Recordingservice
Gibts es vielleicht eine Möglichkeit diese Bereich irgendwie zu refreshen oder so ? Es scheint
wohl ein Anzeige oder Cacheproblem zu sein.
Re: Icons vermehren sich
Verfasst: 11.11.2016 16:08
von RSBasic
Wenn man mit der Maus rüberfährt und das Icon verschwindet plötzlich, dann scheint so, dass das Systray-Icon nicht ordnungsgemäß freigegeben wurde.
Normalerweise sollte es nicht so sein. Ich hätte eigentlich gesagt, dass man lieber die Ursache beheben soll statt ein Workaround mit dem Neuzeichen der Systray-Leiste zu erstellen, aber da das anscheinend ein externes Programm ist, das du nicht programmiert hast, hast du keine andere Möglichkeit, Workaround zu benutzen.
Code: Alles auswählen
EnableExplicit
Define Handle
Handle = FindWindowEx_(FindWindowEx_(FindWindow_("Shell_TrayWnd", 0), 0, "TrayNotifyWnd", 0), 0, "SysPager", 0)
If Handle
;nicht getestet, keine Ahnung, ob es was bringt
;SendMessage_(Handle, #WM_NCPAINT, 1, 0)
InvalidateRect_(Handle, 0, #True)
;RedrawWindow_(Handle, 0, 0, 7)
;UpdateWindow_(Handle)
EndIf