Zahlen im Trayicon

  • 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

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

    Einmal editiert, zuletzt von ctec (20. Mai 2009 um 10:26)

  • 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*

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Hi,
    Erstellen von *.bmp Dateien mit Inhalt der Zahlen 1-20 im Format 32x32x32Bit

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>
    ;Opt('MustDeclareVars', 1)
    Local $hBitmap, $hClone, $hImage, $hgui, $label, $hWnd, $hgraphic

    [/autoit] [autoit][/autoit] [autoit]

    $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")

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $hgraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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()

    [/autoit] [autoit][/autoit] [autoit]

    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:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]

    Auf diese Art und Weise lassen sich auch sehr einfach "bewegte" Icons erstellen.

    ciao
    Andy

  • TrayIcon direkt erstellt mit GDIPlus und Text ;)

    Spoiler anzeigen
    [autoit]

    #include<GDIplus.au3>
    #include<WindowsConstants.au3>
    #include<GUIConstants.au3>
    #include<Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $NIS_VISIBLE = 0x00000000
    Global Const $NIS_HIDDEN = 0x00000001
    Global Const $NIS_SHAREDICON = 0x00000002

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ; Ereignisse für die TrayIcons
    GUIRegisterMsg($WM_TRAYICONPROC, "TRAYICONPROC")

    [/autoit] [autoit][/autoit] [autoit]

    ; GDIPlus starten
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(16, 16, $hGraphics)
    _GDIPlus_GraphicsDispose($hGraphics)

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    $Brush1 = _GDIPlus_BrushCreateSolid(0xFF00FFFF)
    ;~ $Brush2 = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)

    [/autoit] [autoit][/autoit] [autoit]

    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 ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    _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.

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]
    • Offizieller Beitrag

    @progandy ich bin immer wieder begeistert, woher du das alles zauberst. ;) Das Teil kann ich bestimmt mal brauchen, kommt in meine Funktionssammlung. :thumbup:

  • 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

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"