Hat jemand eine Idee wie ich die TrackMouseEvent Funktion (WinAPIEx.au3) auf einen Button oder andere Controls anwenden könnte, um herauszufinden wann der Mauszeiger darüber "hovert"?
In folgendem Script funktioniert das ganze schon mal für die Haupt-GUI:
Spoiler anzeigen
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GUIButton.au3>
$hGUI = GUICreate("Not Hovering...", 400, 400)
$hButton = _GUICtrlButton_Create($hGUI, "Test", 50, 50, 60, 25)
GUISetState()
If Not _WinAPI_TrackMouseEvent($hGUI, 1) Then Exit
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_MOUSEHOVER, "WM_MOUSEHOVER")
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSEMOVE")
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_MOUSEMOVE($hWnd, $iMsg, $wParam, $lParam)
WinSetTitle($hGUI, "", "Not Hovering...")
If Not _WinAPI_TrackMouseEvent($hGUI, 1) Then Exit
Return $GUI_RUNDEFMSG
EndFunc
Func WM_MOUSEHOVER($hWnd, $iMsg, $wParam, $lParam)
WinSetTitle($hGUI, "", "Hovering!")
If Not _WinAPI_TrackMouseEvent($hGUI, 1) Then Exit
Return $GUI_RUNDEFMSG
EndFunc
; #FUNCTION# ====================================================================================================================
; Name...........: _WinAPI_TrackMouseEvent
; Description....: Posts messages when the mouse pointer leaves a window or hovers over a window for a specified amount of time.
; Syntax.........: _WinAPI_TrackMouseEvent ( $hWnd, $iFlags [, $iTime] )
; Parameters.....: $hWnd - Handle to the window to track.
; Return values..: $iFlags - The services requested. This parameter can be a combination of the following values.
;
; $TME_CANCEL
; $TME_HOVER
; $TME_LEAVE
; $TME_NONCLIENT
; $TME_QUERY
;
; $iTime - The hover time-out (if $TME_HOVER was specified in $Flags), in milliseconds. Can be (-1), which
; means to use the system default hover time-out.
; Failure - 0 and sets the @error flag to non-zero.
; Author.........: Matt Diesel (Mat)
; Modified.......: Yashied
; Remarks........: None
; Related........:
; Link...........: @@MsdnLink@@ TrackMouseEvent
; Example........: Yes
; ===============================================================================================================================
Func _WinAPI_TrackMouseEvent($hWnd, $iFlags, $iTime = -1)
[/autoit] [autoit][/autoit] [autoit]Local $tTME = DllStructCreate('dword;dword;hwnd;dword')
[/autoit] [autoit][/autoit] [autoit]DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, $iFlags)
DllStructSetData($tTME, 3, $hWnd)
DllStructSetData($tTME, 4, $iTime)
Local $Ret = DllCall('user32.dll', 'int', 'TrackMouseEvent', 'ptr', DllStructGetPtr($tTME))
[/autoit] [autoit][/autoit] [autoit]If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
Return 1
EndFunc ;==>_WinAPI_TrackMouseEvent
Wenn ich lediglich das Handle bei jedem TrackMouseEvent Aufruf durch $hButton ersetze funktioniert das ganze nicht (kein Call von WM_MOUSEHOVER). Der Button ist ein Child-Window der Haupt-GUI, daran liegt es also nicht.
Ich habe nicht besonders viel Zeit um das hier zu formulieren, falls Informationen fehlen bitte ich darauf hingewiesen zu werden ^^.