Seite 1 von 1
PROGRAMMicon im Systray nutzen
Verfasst: 03.11.2004 20:05
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é
Verfasst: 03.11.2004 20:14
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
Verfasst: 03.11.2004 20:36
von real
Was mich daran wundert ist, dass ich damit das Icon NOCHMALS einbinden muß... Aber es klappt!

Verfasst: 03.11.2004 22:25
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.
Verfasst: 03.11.2004 22:57
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
Verfasst: 03.11.2004 23:28
von ts-soft
Einfach mit der Api-Funktion LoadIcon_(GetModuleHandle_ usw.
Bitte selbst nachlesen, dann bleibt es besser in Erinnerung

Verfasst: 09.03.2005 12:21
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))
Verfasst: 09.03.2005 14:35
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
Verfasst: 09.03.2005 14:46
von Kaeru Gaman
öh... mal ne frage dazu...
wie erzeuge ich ein icon mit 2 verschiedenen darstellungen?
Verfasst: 09.03.2005 14:53
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