Traytip bei klick [Befehl]

  • Man könnte bei Klick die Koordinaten des Mauszeigers mit den Koordinaten des TrayTip vergleichen.

  • Mit einem Traytip geht das wohl nicht, du kannst aber was ähnliches mit einer Gui basteln. Die könnte man ja einfach abfragen.
    Hier im Forum gibts ja ein paar gute Sachen bezügl transparente Gui, Styles, Buttons, usw.

    mfg Ubuntu

  • Ich habe eine TRayHook-DLL gemacht, mit der man die Nachrichten des TrayTips abfangen kann ;) Normalerweise würde es auch ohne Hook gehen, aber AutoIt gibt sonst keinen Zugriff darauf. Die DLL funktioniert aber nur mit 32bit.

    Spoiler anzeigen
    [autoit]

    Global Const $_TBH_NIN_BALLOONSHOW = 0x0402
    Global Const $_TBH_NIN_BALLOONHIDE = 0x0403
    Global Const $_TBH_NIN_BALLOONTIMEOUT = 0x0404
    Global Const $_TBH_NIN_BALLOONUSERCLICK = 0x0405
    Global Const $_TBH_BALLOONMESSAGE = 0x040C
    Global $__TrayHookDLL=-1, $__TrayHookWin=-1
    Func _TrayHook_LoadDLL($Path= "AutoItBalloon.dll")
    ; Author: Prog@ndy
    If $__TrayHookDLL > -1 Then Return $__TrayHookDLL
    If StringTrimLeft($Path,StringInStr($Path,"\",0,-1)) <> "AutoItBalloon.dll" Then Return SetError(1,0,-1)
    $__TrayHookDLL = DllOpen($Path)
    Return $__TrayHookDLL
    EndFunc

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

    ; @error: 1 if could not register
    ; 2 if Receiver-Function not found
    ; 3 if already registered
    Func _TrayHook_Install($FuncName="TRAYICONPROC")
    ; Author: Prog@ndy
    If IsHWnd($__TrayHookWin) Then Return SetError(3,0,0)
    Call($FuncName,0,0,0,0)
    If @error = 0xDEAD and @extended = 0xBEEF Then Return SetError(2,0,0)
    Local $Title = AutoItWinGetTitle()
    AutoItWinSetTitle(@ScriptName & TimerInit())
    Local $Match = Opt("WinTitleMatchMode",3)
    Local $AutoItWin = WinGetHandle(AutoItWinGetTitle())
    Opt("WinTitleMatchMode",$Match )
    AutoItWinSetTitle($Title)

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

    $__TrayHookWin = GUICreate(@ScriptName & " Balloon Message Window")

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

    Local $aResult = DllCall($__TrayHookDLL, "int", "InstallHook@8", "hwnd", $AutoItWin, "hwnd", $__TrayHookWin)

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

    If Not IsArray($aResult) Or $aResult[0] = 0 Then Return SetError(1,0,0)
    GUIRegisterMsg(0x040C, "TRAYICONPROC")
    OnAutoItExitRegister("_TrayHook_Remove")
    Return 1
    EndFunc

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

    Func _TrayHook_Remove()
    ; Author: Prog@ndy
    ; internal function, will be called on Exit
    DllCall($__TrayHookDLL, "none", "RemoveHook@0")
    GUIDelete($__TrayHookWin)
    $__TrayHookWin = -1
    EndFunc

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

    ;-------------------------------------------------------------------------------------------------------------

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

    $x = _TrayHook_LoadDLL("AutoItBalloon.dll")
    MsgBox(0, 'DLL geladen?', $x)
    $x = _TrayHook_Install()
    MsgBox(0, 'Hook gesetzt?', $x)

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

    TrayTip("Test Traytip", "Nachrichten dieses Traytip werden abgefangen", 30)
    While 1
    Sleep(100)
    WEnd

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

    Func TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
    If ($hwnd+$uMsg+$wParam+$lParam) = 0 Then Return
    ; Ereignisse für das TrayIcon
    Switch $uMsg
    Case $_TBH_BALLOONMESSAGE
    Local $uTrayMsg = BitAND($lParam, 0xFFFF)
    Local $nID = BitShift($lParam, 16)
    Switch $uTrayMsg
    Case $_TBH_NIN_BALLOONSHOW
    ConsoleWrite("Balloon show" & @CRLF)
    Case $_TBH_NIN_BALLOONHIDE
    ConsoleWrite("Balloon hide" & @CRLF)
    Case $_TBH_NIN_BALLOONTIMEOUT
    ConsoleWrite("Balloon timeout" & @CRLF)
    Case $_TBH_NIN_BALLOONUSERCLICK
    ConsoleWrite("Balloon userclick" & @CRLF)
    EndSwitch
    EndSwitch
    EndFunc ;==>TRAYICONPROC

    [/autoit]