Seite 2 von 2

Programm Icon im Systray

Verfasst: 13.06.2008 16:52
von stab
Hallo,

mein kleines Prog läuft ohne GUI im Hintergrund.

Ich wollte dem jetzt ein Icon verpassen und dieses im Systray anzeigen.
Das Icon habe ich eingebunden via .rc Datei. 32x32. Alles OK. Bei der .exe wird's auch angezeigt.

Nur scheitert die AddSysTrayIcon Funktion.

Hier bin ich immer wieder auf den Code-Auszug von ts-soft gestoßen:

Code: Alles auswählen

TrayIcon.l = LoadIcon_(GetModuleHandle_(0), 1)
AddSysTrayIcon(1, WindowID(0), TrayIcon)
Funktioniert bei mir aber nicht.
Den Hinweis, dass es erst nach kompilieren klappt, habe ich gelesen.

Auch den Code in diesem Beitrag vom mk-soft habe ich probiert.
Icon via .rc eingebunden. Verschiedene Icons probiert. Alles OK!
Es wird aber immer nur das Standard Icon #IDI_APPLICATION im Systray angezeigt, also folgende Bedingung ausgeführt:

Code: Alles auswählen

If hIcon = 0
    hIcon = LoadIcon_(0, #IDI_APPLICATION)
  EndIf
  AddSysTrayIcon(0, WindowID(0), hIcon)

So funktioierts natürlich. Dann wäre es in der .exe aber doppelt drin.

Code: Alles auswählen

DataSection
ICON: IncludeBinary "test.ico"
EndDataSection

ci = CatchImage(1, ?ICON)
OpenWindow(0,0,0,0,0,"",#WS_VISIBLE)
AddSysTrayIcon(5, WindowID(0), ci) 
Hat jemand eine Idee?

Vielen Dank und Gruß
stab

Verfasst: 13.06.2008 17:15
von ts-soft
Der erste parameter von LoadIcon muß hInstance sein
(GetModuleHandle_(0)), ansonsten kannste mit 0 nur die StandardIcons
laden, also nicht die aus Deiner Exe.
Der zweite ist die Resourcenummer oder Pointer zum Resourcenamen, das
haste in Deinem RC festgelegt.

Fenster ist erforderlich (darf auch hidden sein), also ohne GUI gehts nichts!

SystrayIcon

Verfasst: 13.06.2008 17:46
von stab
Hi,

Das wars:

"Der zweite ist die Resourcenummer oder Pointer zum Resourcenamen, das
haste in Deinem RC festgelegt."

Die .rc hatte ich kopiert.

Code: Alles auswählen

#define MyIcon 100
und natürlich nicht die 100 als Parameter übergeben.

Code: Alles auswählen

hInst.l = GetWindowLong_(WindowID(0), #GWL_HINSTANCE)
  hIcon.l = LoadIcon_(hInst, 100)
  If hIcon = 0
    hIcon = LoadIcon_(0, #IDI_APPLICATION)
  EndIf
  AddSysTrayIcon(0, WindowID(0), hIcon)
Danke noch mal
stab