PopUp-Menu bei Systray

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Programm Icon im Systray

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

SystrayIcon

Beitrag 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
Antworten