Hallo zusammen,
hat jemand eine "fertige Lösung" um Zahlenwerte im Trayicon anzeigen zu lassen?
Mit der SuFu habe ich ein GDI+ Script für eine graphische Lösung gefunden - einzelne Zahlen wären mir aber lieber
Vielen Dank
Hallo zusammen,
hat jemand eine "fertige Lösung" um Zahlenwerte im Trayicon anzeigen zu lassen?
Mit der SuFu habe ich ein GDI+ Script für eine graphische Lösung gefunden - einzelne Zahlen wären mir aber lieber
Vielen Dank
Du kannst doch mit GDI+ auch Text ausgeben.
oder du machst für jede Zahl ein icon das du z.B. auch als DLL speichern kannst. und dann mit TraySetIcon setzen.
ich versuche dann mal, das Script anzupassen und
[autoit]_GDIPlus_GraphicsDrawStringEx
[/autoit]zu benutzen
*wusel*
Hi,
Erstellen von *.bmp Dateien mit Inhalt der Zahlen 1-20 im Format 32x32x32Bit
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
;Opt('MustDeclareVars', 1)
Local $hBitmap, $hClone, $hImage, $hgui, $label, $hWnd, $hgraphic
$hgui = GUICreate("Icon", 50, 50, 1, 1)
GUISetState(@SW_SHOW)
$label = GUICtrlCreateLabel(" ", 1, 1, 50, 50)
GUICtrlSetFont(-1, 20, 800, 0, "MS Arial")
$hWnd = WinGetHandle("Icon")
_GDIPlus_Startup()
$hgraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
For $i = 1 To 20
GUICtrlSetData($label, $i)
Sleep(100)
$hBitmap = _ScreenCapture_Capture("", 5, 25, 37, 57)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_GDIPlus_GraphicsDrawImage($hgraphic, $hImage, 100, 100)
_GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\icons\" & $i & ".bmp")
Next
_GDIPlus_ImageDispose($hClone)
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()
Exit
[/autoit]
Einfügen der *.bmp in eine *.icl Datei (Container für Icons) mittels des Programms "Sib Icon editor" ergibt:
autoit.de/wcf/attachment/4818/
Darstellung:
#include <Constants.au3>
#NoTrayIcon
Opt("TrayMenuMode", 1) ; Standard Traymenüeinträge (Script pausieren/beenden) werden nicht angezeigt.
[/autoit] [autoit][/autoit] [autoit]$exititem = TrayCreateItem("Beenden")
[/autoit] [autoit][/autoit] [autoit]TraySetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]For $num = 1 To 20
$start = TimerInit()
$diff=0
while $diff < 500
$diff = TimerDiff($start)
$msg = TrayGetMsg()
If $msg = $exititem Then Exit
wend
ToolTip("#icon=" & $num)
TraySetIcon("testicons.icl", $num)
Next
WEnd
Exit
[/autoit]Auf diese Art und Weise lassen sich auch sehr einfach "bewegte" Icons erstellen.
ciao
Andy
TrayIcon direkt erstellt mit GDIPlus und Text
#include<GDIplus.au3>
#include<WindowsConstants.au3>
#include<GUIConstants.au3>
#include<Constants.au3>
; Windows Konstanten
Global Const $WM_RBUTTONDBLCLK = 0x206
Global Const $WM_RBUTTONDOWN = 0x204
Global Const $WM_RBUTTONUP = 0x205
Global Const $WM_LBUTTONDBLCLK = 0x203
Global Const $WM_LBUTTONDOWN = 0x201
;~ Global Const $WM_LBUTTONUP = 0x202
Global Const $WM_MBUTTONDBLCLK = 0x209
Global Const $WM_MBUTTONDOWN = 0x207
Global Const $WM_MBUTTONUP = 0x208
#Region NotifyIcon Constants
Select
Case @OSBuild < 2195
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[64];"
Case Else
$tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[128];" & _
"DWORD dwState; DWORD dwStateMask; WCHAR szInfo[256]; UINT uTimeout; WCHAR szInfoTitle[64]; DWORD dwInfoFlags;"
EndSelect
Global Const $tagNOTIFYICONDATAW = $tagNOTIFYICONDATAW_TEMP
Global Const $tagNOTIFYICONDATA = $tagNOTIFYICONDATAW
Global Const $NIN_BALLOONSHOW = $WM_USER + 2
Global Const $NIN_BALLOONHIDE = $WM_USER + 3
Global Const $NIN_BALLOONTIMEOUT = $WM_USER + 4
Global Const $NIN_BALLOONUSERCLICK = $WM_USER + 5
Global Const $NIM_ADD = 0x00000000
Global Const $NIM_MODIFY = 0x00000001
Global Const $NIM_DELETE = 0x00000002
Global Const $NIM_SETFOCUS = 0x00000003
Global Const $NIM_SETVERSION = 0x00000004
Global Const $NIF_MESSAGE = 0x00000001
Global Const $NIF_ICON = 0x00000002
Global Const $NIF_TIP = 0x00000004
Global Const $NIF_STATE = 0x00000008
Global Const $NIF_INFO = 0x00000010
Global Const $NIF_GUID = 0x00000020
Global Const $NIF_REALTIME = 0x00000040
Global Const $NIF_SHOWTIP = 0x00000080
Global Const $NIS_VISIBLE = 0x00000000
Global Const $NIS_HIDDEN = 0x00000001
Global Const $NIS_SHAREDICON = 0x00000002
Global Const $NIIF_NONE = 0x00000000
Global Const $NIIF_INFO = 0x00000001
Global Const $NIIF_WARNING = 0x00000002
Global Const $NIIF_ERROR = 0x00000003
Global Const $NIIF_USER = 0x00000004
Global Const $NIIF_NOSOUND = 0x00000010
Global Const $NIIF_LARGE_ICON = 0x00000010
Global Const $NIIF_RESPECT_QUIET_TIME = 0x00000080
Global Const $NIIF_ICON_MASK = 0x0000000F
Global Const $WM_TRAYICONPROC = $WM_USER+100
[/autoit] [autoit][/autoit] [autoit]Global Const $HWND_For_TrayNotifications = GUICreate(@ScriptName&"TrayMsgWin",1,1,0,0,0,0,-3)
#EndRegion
; function to add / modify / delete NotfyIcon
Func _Shell_NotifyIcon($dwMessage, ByRef $lpdata)
; Prog@ndy
Local $ptr
If IsDllStruct($lpdata) Then
$ptr = DllStructGetPtr($lpdata)
Else
$ptr = Ptr($lpdata)
EndIf
Local $result = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $dwMessage, "ptr", $ptr)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0] = 0, 0, $result[0])
EndFunc ;==>_Shell_NotifyIcon
; function to create an Icon from a GDIplus-Bitmap
Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Prog@ndy
Local $result = DllCall($ghGDIPDLL, "int", "GdipCreateHICONFromBitmap", "ptr", $hBitmap, "ptr*", 0)
If @error Then Return SetError(1, @error, 0)
Return SetError($result[0], 0, $result[2])
EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap
; Ereignisse für die TrayIcons
GUIRegisterMsg($WM_TRAYICONPROC, "TRAYICONPROC")
; GDIPlus starten
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(16, 16, $hGraphics)
_GDIPlus_GraphicsDispose($hGraphics)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$Brush1 = _GDIPlus_BrushCreateSolid(0xFF00FFFF)
;~ $Brush2 = _GDIPlus_BrushCreateSolid(0xFFFF0000)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
Opt("TrayAutoPause",0)
#Region ### START Koda GUI section ### Form=
$hwnd = GUICreate("TrayIcon", 200, 52, 193, 125)
$Slider1 = GUICtrlCreateSlider(2, 2, 150, 45)
GUICtrlSetLimit(-1, 16, 0)
GUICtrlSetData(-1, 0)
$chkzufall = GUICtrlCreateCheckbox("zufall",155,10,45,20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap) ; Icon aus Bitmap erstellen
[/autoit] [autoit][/autoit] [autoit]$ICON_ID = 333
[/autoit] [autoit][/autoit] [autoit]$NOTIFYICONDATAW = DllStructCreate($tagNOTIFYICONDATAW) ; Daten für das Icon
DllStructSetData($NOTIFYICONDATAW, 1, DllStructGetSize($NOTIFYICONDATAW))
DllStructSetData($NOTIFYICONDATAW, "hWnd", $HWND_For_TrayNotifications)
DllStructSetData($NOTIFYICONDATAW, "uID", $ICON_ID) ; ID für das Icon
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP,$NIF_MESSAGE)) ; welche Eigenschaften sollen gesetzt werden
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon) ; Icon-Handle setzen
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: 0") ; Tooltip setzen
DllStructSetData($NOTIFYICONDATAW, "uCallbackMessage", $WM_TRAYICONPROC) ; die WindowMessage zum Empfangen von Ereignissen festelgen
_Shell_NotifyIcon($NIM_ADD, $NOTIFYICONDATAW) ; Das Icon erzeugen
[/autoit] [autoit][/autoit] [autoit]_WinAPI_DestroyIcon($hIcon) ; Das Icon wieder löschen. Das TrayIcon hat eine Kopie davon erhalten.
DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP)) ; Die gleiche Struktur wird später auch verwendet, aber nur, um
; das Icon und den tooltip zu ändern.
$OldSlider = 0
While 1
Switch GUIGetMsg()
Case - 3
Exit
Case $chkzufall
If BitAND(GUICtrlRead($chkzufall),1)=1 Then
AdlibEnable("ZufallsWert",400)
Else
AdlibDisable()
EndIf
EndSwitch
$NewSlider = GUICtrlRead($Slider1)
If $NewSlider <> $OldSlider Then
; Das Icon neu malen
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
_GDIPlus_GraphicsDrawString($hGraphics,$NewSlider,0,0,"Arial",9)
;~ _GDIPlus_GraphicsFillRect($hGraphics, 0, 16-$NewSlider, 16, 16, $Brush2)
; Das Icon erzeugen
$hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
; Das Icon setzen
DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon)
DllStructSetData($NOTIFYICONDATAW, "szTip", "Wert: " & GUICtrlRead($Slider1))
; Das TrayIcon erhält eine Kopie.
_Shell_NotifyIcon($NIM_MODIFY, $NOTIFYICONDATAW)
; Das Icon löschen
_WinAPI_DestroyIcon($hIcon)
$OldSlider = $NewSlider
EndIf
WEnd
Func ZufallsWert()
GUICtrlSetData($Slider1,Random(0,16,1))
EndFunc
Func OnAutoItExit()
AdlibDisable()
; Aufräumen
_Shell_NotifyIcon($NIM_DELETE, $NOTIFYICONDATAW) ; das TrayIcon löschen
; GDIPlus freigeben
_GDIPlus_BrushDispose($Brush1)
;~ _GDIPlus_BrushDispose($Brush2)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>OnAutoItExit
Func TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
; Ereignisse für das TrayIcon
Local $uTrayMsg = _WinAPI_LoWord($lParam)
Local $nID = _WinAPI_HiWord($lParam)
Switch $uTrayMsg
Case $NIN_BALLOONSHOW
ConsoleWrite("Balloon show" & @CRLF)
Case $NIN_BALLOONHIDE
ConsoleWrite("Balloon hide" & @CRLF)
Case $NIN_BALLOONTIMEOUT
ConsoleWrite("Balloon timeout" & @CRLF)
Case $NIN_BALLOONUSERCLICK
ConsoleWrite("Balloon userclick" & @CRLF)
Case $WM_LBUTTONUP
ConsoleWrite("left mousebutton Up" & @CRLF)
Case $WM_RBUTTONUP
ConsoleWrite("right mousebutton Up" & @CRLF)
Case $WM_LBUTTONDOWN
ConsoleWrite("left mousebutton Down" & @CRLF)
Case $WM_RBUTTONDOWN
ConsoleWrite("right mousebutton Down" & @CRLF)
Case $WM_CONTEXTMENU
ConsoleWrite("Context Menu" & @CRLF)
EndSwitch
Return _WinAPI_DefWindowProc($hwnd, $uMsg, $wParam, $lParam)
EndFunc ;==>TRAYICONPROC
@progandy ich bin immer wieder begeistert, woher du das alles zauberst. Das Teil kann ich bestimmt mal brauchen, kommt in meine Funktionssammlung.
Da hab ich nur nur 3 Zeilen geändert von dem: [ gelöst ] Icon dynamisch erstellen
Huhu,
ja, genau das Script meinte ich - war allerdings nicht in der Lage genau diese 3 Zeilen zu ändern
evtl sollte ich mich mehr mit GDI beschäftigen
Besten Dank /bow