Pixel eines Icons einfärben

  • Hallo,
    ich habe mir eine RGB-Steuerung geschrieben, mit der ich die LED-Farbe meines Lüfters steuern kann.
    Nun möchte ich, dass das Trayicon in den Farbton gefärbt wird,
    welchen ich gerade für den Lüfter festgelegt habe.
    Dabei gibt es Pixel, welche den Rahmen und den Propellerrand darstellen.
    Diese sind immer schwarz, d.h. es müssen nur bestimmte Pixel des Icons
    gefärbt werden und zwar alle außer den schwarzen.
    Wie realisiere ich mein Vorhaben?

    Unsauberer Lösungsvorschlag:
    Ich lese z.B. per ImageSearch die Position des Trayicons auf der Taskleiste aus
    und male dieses dann per GDI+ über. Dies ist natürlich nicht gerade elegant,
    wäre aber im Notfall eine Überlegung wert.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von Nathax (26. Mai 2012 um 21:33)

  • Der Schwerpunkt meiner Frage liegt nicht darin, das Icon zu setzen, sondern erstmal das Icon einzufärben.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Du könntest versuchen das Icon in eine Bitmap zu laden und diese dann (Mit GDI+ oder ASM (Natürlich viel schneller)) komplett in eine Farbe zu bringen, wenn die Pixel eine andere Farbe haben als scharz. Aber dann müsste daran gedacht werden das man die Bilder immer schön aus dem Speicher lässt, sonst kann das nach vielem Wechseln den Speicher überfüllen... Ist sicherlich nicht so einfach. Ich weiß auch nicht wie man eine Bitmap an die Funktion TraySetIcon() aber irg wie müsste das möglich sein...

  • moin
    mir kam da grad ne idee weis aber nicht ob es funktioniert weil ich mich nicht so mit gdi+ auskenne
    jedenfalls könntest du den lüfter zeichnen und rundherum was in der rgb farbe sein soll transparent lassen und als bild abspeichern
    wenn dan das icon gesetzt wird ein zweites als hintergrund welches in der rgb farbe ist erstellen

    achja wenn du das script fertig hast könntest du das unter scripte posten sowas könnte ich auch noch gebrauchen :thumbup:

  • @BB genau das will ich ja machen, nur ich weiß ja nicht wie.

    @Bulli-IT gute Idee, Danke! Ich werds mal später versuchen. Und wozu willste das Skript? Hast du denn nen Arduino oder Ähnliches?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Also ich habe mal ein GDI+-Beispiel-Skript benutzt, um nen Lüfter mit der Farbe "rot" darzustellen.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>

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

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

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

    $x = 0+10;x und y deklarieren
    $y = 0+10

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

    $Gui = GUICreate("Beispiel", 100, 100, Default, Default)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup() ;Gdi starten

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

    $figur = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\black.ico")
    $height = _GDIPlus_ImageGetHeight($figur)
    $width = _GDIPlus_ImageGetWidth($figur)
    $verhaelnis = $height / $width
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $Brush1 = _GDIPlus_BrushCreateSolid(0xFFff0000)
    $bk = _GDIPlus_GraphicsFillEllipse($graphic, 5, 5, 90, 90, $Brush1)
    $pen = _GDIPlus_PenCreate(0xFF000000,5)
    $ring = _GDIPlus_GraphicsDrawEllipse($graphic, 5, 5, 90, 90, $Pen)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(100, 100, $graphic);----------------- geändert ----------------------
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap);----------------- geändert ----------------------

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

    _GDIPlus_GraphicsDrawImageRect($buffer, $bk, 5, 5, 90, 90);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImageRect($buffer, $ring, 5, 5, 90, 90);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImageRect($buffer, $figur, $x, $y, 80, 80 * $verhaelnis);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0);----------------- geändert ----------------------

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

    _GDIPlus_ImageSaveToFile($bitmap, @ScriptDir & "\GDIPlus_Image.png")

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Select
    Case _IsPressed(25)
    $x -= 3
    Case _IsPressed(26)
    $y -= 3
    Case _IsPressed(27)
    $x += 3
    Case _IsPressed(28)
    $y += 3
    EndSelect

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

    _GDIPlus_GraphicsDrawImageRect($buffer, $bk, 5, 5, 90, 90);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImageRect($buffer, $ring, 5, 5, 90, 90);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImageRect($buffer, $figur, $x, $y, 80, 80 * $verhaelnis);----------------- geändert ----------------------
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0);----------------- geändert ----------------------

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

    Sleep(30)

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

    WEnd

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

    Func _end();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_GraphicsDispose($buffer);----------------- geändert ----------------------
    _GDIPlus_BitmapDispose($bitmap);----------------- geändert ----------------------
    _GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
    _GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
    _GDIPlus_ImageDispose($ring)
    _GDIPlus_PenDispose($pen)
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc ;==>_end

    [/autoit]

    Das Problem ist, dass nach dem Minimieren und Wiederherstellen des Fensters nur noch der Lüfter zu sehen ist. Zum anderen wird auch nur dieser in das PNG gespeichert.
    Außerdem soll es ja das Format ICO sein, da es als TrayIcon verwendet werden soll. Könnt ihr mir helfen?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Zitat

    Das Problem ist, dass nach dem Minimieren und Wiederherstellen des Fensters nur noch der Lüfter zu sehen ist.


    Dann musst du per GUIRegisterMsg das $WM_PAINT Event mit einer Funktion assoziieren die den Backbuffer zurück auf den Frontbuffer zeichnet. Also _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0).

    Zitat

    Zum anderen wird auch nur dieser in das PNG gespeichert.


    Da brauchst du dich nicht zu wundern, immerhin zeichnest du nur einmal nach Erzeugung der Grafik den farbigen Bestandteil (u.A. _GDIPlus_GraphicsDrawEllipse($graphic, 5, 5, 90, 90, $Pen)) direkt auf die Grafik anstatt das ganze in den Backbuffer zu zeichnen, wie den ganzen Rest. Außerdem versuchst du die Rückgabewerte von _GraphicsDrawEllipse etc. mit DrawImageRect auf eine Grafik zu zeichnen :wacko: ... Die Funktion zeichnet direkt eine Ellipse auf eine Grafik und gibt lediglich einen boolean Wert zurück (True=Erfolgreich; False=Error). DrawImageRect benötigt zum zeichnen ein Handle zu einem Bild wie das was von ImageLoadFromFile zurückgegeben wird.
    Dein Code muss aber noch an einigen anderen Stellen verbessert werden. Aber das was du momentan erarbeitet hast würde ich nicht dauerhaft auf meinem PC laufen lassen ^^.

    Zitat

    Zum anderen wird auch nur dieser in das PNG gespeichert.


    Selbes Problem wie vorhin. Du verwechselst die Bitmap (Backbuffer) mit der Grafik der GUI (Frontbuffer). Den Teil den du vermisst zeichnest du nur einmal relativ weit am Anfang des Scripts direkt auf die Grafik der GUI, die Bitmap kriegt davon nie was zu sehen. Danach speicherst du die Bitmap wo bis jetzt nur das Bild aus $figur drin ist.

    Zitat

    Außerdem soll es ja das Format ICO sein, da es als TrayIcon verwendet werden soll. Könnt ihr mir helfen?


    Das geht meines Wissens nach mit GDI+ nicht direkt, bzw. liefert keine brauchbaren Ergebnisse.. Ein wenig Googlen hat das hier zu Tage gefördert:
    http://www.autoitscript.com/forum/topic/93…on-to-ico-file/
    http://www.autoitscript.com/forum/topic/10…on-to-ico-file/

  • Ok, erstmal vielen Dank. Und zu dem Code:
    Wie gesagt, ich hab mir einfach aus den Beispielen alles zusammenkopiert, bis es näherungsweise gut lief.
    Oder meinst du ich würde ein Programm so, ohne Einrückung, hier im Forum posten? ;)
    Wie man sieht ist das ganz durcheinander gewürfelt und dient nur zu Testzwecken meines richtigen Programms.
    Ich werde sobald wie möglich versuchen deine Aliegen umzusetzen.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Hört sich gut an, aber ich bekomm folgendes nicht zum Laufen:

    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(0xFF0000FF)
    $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_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]

    Edit: Ok, also es scheint ein wenig veraltet zu sein.
    Ich habe mal die Adlib-Funktionen angepasst.

    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(0xFF0000FF)
    $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
    AdlibRegister("ZufallsWert",400)
    Else
    AdlibUnRegister()
    EndIf
    EndSwitch
    $NewSlider = GUICtrlRead($Slider1)
    If $NewSlider <> $OldSlider Then
    ; Das Icon neu malen
    _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $Brush1)
    _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

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

    WEnd
    Func ZufallsWert()
    GUICtrlSetData($Slider1,Random(0,16,1))
    EndFunc
    Func OnAutoItExit()
    AdlibUnRegister()
    ; 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]


    Es funktioniert allerdings immer noch nicht. :(

    Edit:
    Einfach mal die störenden Zeilen rausgenommen.
    Jetzt funktionierts. Ich hoffe, dass es nun trotzdem nicht "unsauber" läuft.
    Naja, ich werds mal auf mein Beispiel übertragen, wenn möglich, und berichte dann.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    2 Mal editiert, zuletzt von Nathax (25. Mai 2012 um 23:37)

  • Hab ich auch schon dran gedacht.
    Aber es wäre bei RGB einfach schöner, jede einzelne Farbe zu haben.
    Ich werds mir überlegen.

    Edit: Hier meine Lösung (sry für das Durcheinander, aber es ist eben halt nur ein Testskript):

    Spoiler anzeigen
    [autoit]

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

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

    ; Windows Konstanten

    [/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]

    Global $OldSlider1, $OldSlider2, $OldSlider3

    [/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(0xFF000000)
    $Brush2 = _GDIPlus_BrushCreateSolid(0xFF000000)
    $Pen = _GDIPlus_PenCreate(0xFF000000, 1)

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

    _GDIPlus_GraphicsFillEllipse($hGraphics, 2, 2, 12, 12, $Brush1)
    $prop = _GDIPlus_ImageLoadFromFile(@ScriptDir&"\black2.ico")

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

    Opt("TrayAutoPause",0)
    #Region ### START Koda GUI section ### Form=
    $hwnd = GUICreate("TrayIcon", 200, 140, 193, 125)
    $Slider1 = GUICtrlCreateSlider(2, 2, 150, 45)
    GUICtrlSetLimit(-1, 255, 0)
    GUICtrlSetData(-1, 0)
    $Slider2 = GUICtrlCreateSlider(2, 50, 150, 45)
    GUICtrlSetLimit(-1, 255, 0)
    GUICtrlSetData(-1, 0)
    $Slider3 = GUICtrlCreateSlider(2, 100, 150, 45)
    GUICtrlSetLimit(-1, 255, 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
    AdlibRegister("ZufallsWert",400)
    Else
    AdlibUnRegister()
    EndIf
    EndSwitch
    If GUICtrlRead($Slider1) <> $OldSlider1 Or GUICtrlRead($Slider2) <> $OldSlider2 Or GUICtrlRead($Slider3) <> $OldSlider3 Then
    $Brush1 = _GDIPlus_BrushCreateSolid("0xFF"&StringRight(Hex(GUICtrlRead($Slider1)),2) & StringRight(Hex(GUICtrlRead($Slider2)),2) & StringRight(Hex(GUICtrlRead($Slider3)),2))
    ; Das Icon neu malen
    _GDIPlus_GraphicsFillEllipse($hGraphics, 1, 1, 13, 13, $Brush1)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $prop, 0, 0, 16, 16)
    ; 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)
    $OldSlider1 = GUICtrlRead($Slider1)
    $OldSlider2 = GUICtrlRead($Slider2)
    $OldSlider3 = GUICtrlRead($Slider3)
    EndIf

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

    WEnd
    Func ZufallsWert()
    GUICtrlSetData($Slider1,Random(0,255,1))
    GUICtrlSetData($Slider2,Random(0,255,1))
    GUICtrlSetData($Slider3,Random(0,255,1))
    EndFunc
    Func OnAutoItExit()
    AdlibUnRegister()
    ; 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]


    Bild im Anhang