PROGRAMMicon im Systray nutzen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

PROGRAMMicon im Systray nutzen

Beitrag von real »

Ich habe eine Anwendung mit einem Icon kompiliert, das zwei verschiedene Iconversionen enthält:
32x32x8 und
16x16x8

Die .exe zeigt in der Symboldarstellung das 32x32x8-Icon, in der Detaildarstellung das 16x16x8-Icon an. Wie kann ich das 16x16x8-Icon ansprechen, um es mittels AddSysTrayIcon als Systray-Icon zu nutzen?

Gruß
René
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

Beitrag von pvmichael »

Hi,

ich hoffe, Dir hilft folgender Code weiter...

Code: Alles auswählen

DataSection
ICON: IncludeBinary "bild.ico"
EndDataSection

CatchImage(97, ?ICON)

UseImage(97)
AddSysTrayIcon(95, WindowID(), ImageID())
Grüsse

Michael
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Was mich daran wundert ist, dass ich damit das Icon NOCHMALS einbinden muß... Aber es klappt! :)
NetSlayer
Beiträge: 117
Registriert: 21.09.2004 21:18
Kontaktdaten:

Beitrag von NetSlayer »

Du könntest vllt mit einer API-Funktion das Icon deines Programms auslesen und dann wiederum mit API-Funktionen ins System Tray packen.

Es geht auf jeden Fall, wie weiß ich allerdings nicht.
...MfG, NetSlayer
"No, I ain't got a problem. It's you with the problem!"
http://netslayer.scpn.net
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag von Max. »

Vielleicht hilft das. Ist von Sparkie aus dem englischen Forum:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 550, 260, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Running Applications") 
  
  If CreateGadgetList(WindowID(0)) 
    ListIconGadget(0, 10, 10, 530, 240, "Running Application", 415) 
    AddGadgetColumn(0, 1, "Icon handle", 110) 
    currWnd = GetWindow_(WindowID(), #GW_HWNDFIRST) 
    
    While currWnd <> 0 
      txtLength = GetWindowTextLength_(currWnd) 
      listItem$ = Space(txtLength + 1) 
      txtLength = GetWindowText_(currWnd, listItem$, txtLength + 1) 
      hIcon = GetClassLong_(currWnd, #GCL_HICON) 
      If txtLength > 0 And hIcon > 0 
        AddGadgetItem(0, -1, listItem$ + Chr(10) + Str(GetClassLong_(currWnd, #GCL_HICON)), hIcon) 
      EndIf 
      currWnd = GetWindow_(currWnd, #GW_HWNDNEXT) 
    Wend 
  
  EndIf 
  
EndIf 

Repeat 
  
  Event = WaitWindowEvent() 
  
Until Event = #PB_EventCloseWindow 
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
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 »

Einfach mit der Api-Funktion LoadIcon_(GetModuleHandle_ usw.

Bitte selbst nachlesen, dann bleibt es besser in Erinnerung <)
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
OnkelD.
Beiträge: 1
Registriert: 11.09.2004 11:08
Wohnort: Salzwedel-Dessau
Kontaktdaten:

Beitrag von OnkelD. »

Ich habe es so gelöst:

Code: Alles auswählen


space = 255
*Adresse = AllocateMemory(space)
GetModuleFileName_(0,*Adresse, space)
progname$ = GetFilePart(PeekS(*Adresse))

AddSysTrayIcon(1, WindowID(), ExtractIcon_(0,progname$,0))

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 »

Ich hatte es zwar schon angedeutet, aber hier noch mal ein Beispiel-Code:

Code: Alles auswählen

TrayIcon.l = LoadIcon_(GetModuleHandle_(0), 1)
AddSysTrayIcon(1, WindowID, TrayIcon)
Die Lösung, das Icon aus der Exe zu extrahieren von OnkelID ist auch nicht schlecht. Das Icon mit IncludeBinary einfügen, obwohl es in der exe schon vorhanden ist, ist natürlich Ressourcenverschwendung (es befindet sich 3 mal im Speicher :))
Gruß
Thomas
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

öh... mal ne frage dazu...

wie erzeuge ich ein icon mit 2 verschiedenen darstellungen?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

Mit SnIco Edit http://www.snidesoft.com/ Freeware kann man multi-icons oder wie auch immer die heissen erstellen und bearbeiten. Windows wählt dann automatisch das Icon in der passenden größe. Per API lassen sich die verschieden großen Icons auch direkt auswählen
Gruß
Thomas
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
Antworten