Code: Select all
; Define Icons
	#Icons=10
	Structure NOTIFYICONDATA_
		cbSize.l
		hwnd.i
		uId.l
		uFlags.l
		uCallbackMessage.l
		hIcon.i
		StructureUnion
			szTip.s{64}
			szTipEx.s{128}
		EndStructureUnion
		dwState.l
		dwStateMask.l
		szInfo.s{256}
		StructureUnion
			uTimeout.l
			uVersion.l
		EndStructureUnion
		szInfoTitle.s{64}
		dwInfoFlags.l
		guidItem.GUID
		hBalloonIcon.i
	EndStructure
	Global MyHandle
	Global SysTrayInfo.NOTIFYICONDATA_ ;	Handle für Balloon-Tooltip über dem SysTray-Icon
	Prototype.l ProtoAccessibleObjectFromPoint(x.l,y.l,*ia,*var)
	Global AccessibleObjectFromPoint.ProtoAccessibleObjectFromPoint
	Global Dim Icon(#Icons)
	For i=0 To #Icons
		Icon(i)=CreateImage(i,24,24,24,#Black)
		StartDrawing(ImageOutput(i))
		Box(1,1,22,i*2,$c0c0c0)
		Box(1,1+i*2,22,22-i*2,#Blue)
		StopDrawing()
	Next i
	#SysTray=0
	Global Icon_File.s=ProgramFilename()
	Global Icon_Lib.i
	Global Icon_Count.i
	Global *Icon_Group.GRPIconDIR
	Global *Icon_Image.IconIMAGE
; EndDefine
Procedure SystrayBalloon_(Title.s,Message.s,Flags)
	#NIIF_LARGE_ICON=			$20
	#NIIF_RESPECT_QUIET_TIME=	$80
	#TenSeconds=10000; kürzer gehts nicht
	If OSVersion() >=#PB_OS_Windows_Vista
		SysTrayInfo\cbSize=SizeOf(NOTIFYICONDATA_)
	ElseIf OSVersion() >=#PB_OS_Windows_XP
		SysTrayInfo\cbSize=OffsetOf(NOTIFYICONDATA_\hBalloonIcon)
	ElseIf OSVersion() >=#PB_OS_Windows_2000
		SysTrayInfo\cbSize=OffsetOf(NOTIFYICONDATA_\guidItem)
	Else
		SysTrayInfo\cbSize=OffsetOf(NOTIFYICONDATA_\szTip) + SizeOf(NOTIFYICONDATA_\szTip)
	EndIf
	If SysTrayInfo\cbSize
		SysTrayInfo\uVersion=#NOTIFYICON_VERSION
		SysTrayInfo\uCallbackMessage=#WM_NOTIFYICON
		SysTrayInfo\uId=#Null; SysTray
		SysTrayInfo\uFlags=#NIF_INFO|#NIF_TIP;|#TTS_NOPREFIX
		SysTrayInfo\uTimeout=#TenSeconds
		;Shell_NotifyIcon_(#NIM_SETVERSION,@SysTrayInfo)
		SysTrayInfo\hwnd=MyHandle
		SysTrayInfo\dwInfoFlags=Flags
		SysTrayInfo\dwState=#NIS_SHAREDICON
		SysTrayInfo\szInfoTitle=Left(Title,63)
		SysTrayInfo\szInfo=Left(Message,255)
		If Message
			Protected ToolTip.s=StringField(Message,CountString(Message,#CR$)+1,#CR$)
		EndIf
		SysTrayInfo\szTip=ToolTip.s
		ProcedureReturn Shell_NotifyIcon_(#NIM_MODIFY,@SysTrayInfo)
	EndIf
	ProcedureReturn #False
EndProcedure
Procedure ChangeIcon(n)
	If IconActive<>n
		IconActive=n
		ChangeSysTrayIcon(#SysTray,Icon(n))
	EndIf
EndProcedure
MyHandle=OpenWindow(0,0,0,0,0,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_Invisible)
AddWindowTimer(0,666,200)
AddSysTrayIcon(#SysTray,MyHandle,Icon(1))
SystrayBalloon_("'Hey'","Just click on the tray icon to quit...",#NIIF_USER|#NIIF_NOSOUND|#NIIF_LARGE_ICON|#NIIF_RESPECT_QUIET_TIME)
Repeat
	Select WaitWindowEvent(10)
			
		Case #PB_Event_SysTray;   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mausklick im Systray ~~~~~~
		Select EventType()
		Case #PB_EventType_LeftClick
			End
		EndSelect
	Case #PB_Event_Timer
		If EventTimer()=666
			ChangeIcon(Random(#Icons))
		EndIf
		
	EndSelect
Until quit


