Hi,
bei einem Traytip kommt ja die Box. Kann man nun abfragen, ob man in diese Box hineingeklickt hat?
Vielen Dank schon mal im voraus für eure Antworten
Aquaplant
Traytip bei klick [Befehl]
-
- [ offen ]
-
Aquaplant -
27. Dezember 2009 um 17:41 -
Geschlossen -
Erledigt
-
-
Man könnte bei Klick die Koordinaten des Mauszeigers mit den Koordinaten des TrayTip vergleichen.
-
Das ist viel zu umständlich und würd auch nicht 100%ig funktionieren, da die Box immer woanders sein könnte
-
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
[/autoit] [autoit][/autoit] [autoit]
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; @error: 1 if could not register
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; 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)$__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)
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg(0x040C, "TRAYICONPROC")
OnAutoItExitRegister("_TrayHook_Remove")
Return 1
EndFuncFunc _TrayHook_Remove()
[/autoit] [autoit][/autoit] [autoit]
; Author: Prog@ndy
; internal function, will be called on Exit
DllCall($__TrayHookDLL, "none", "RemoveHook@0")
GUIDelete($__TrayHookWin)
$__TrayHookWin = -1
EndFunc;-------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]$x = _TrayHook_LoadDLL("AutoItBalloon.dll")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox(0, 'DLL geladen?', $x)
$x = _TrayHook_Install()
MsgBox(0, 'Hook gesetzt?', $x)TrayTip("Test Traytip", "Nachrichten dieses Traytip werden abgefangen", 30)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
While 1
Sleep(100)
WEndFunc TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
[/autoit]
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