ControlGetFocus - Geht das auch mit dem Maus Fokus?

  • Hi, ich brauche eine Funktion die Ferststellt ob eine Control in diesem Falle ein Button, den Maus Fokus hat. Mit ControlGetFocus findet man ja nur raus wann die Control den Keyboard Focus hat.
    Gibt es da ne möglichkeit? Der Button wird übrigens erleuchtet wenn man mit der Maus drüber fährt. Oder ist es möglich herauszufinden welche Control sich grad unter der Maus befindet, so wie bei Window Info?

    2 Mal editiert, zuletzt von Neklor (16. Oktober 2009 um 13:52)

  • Du kannst das mittels der Mausposition ermitteln.

    Hab mal schnell eine Funktion dazu geschrieben.

    Spoiler anzeigen
    [autoit]

    Run("calc.exe")
    WinWait("[Class:SciCalc]")
    $hWnd = WinGetHandle("[Class:SciCalc]")
    SendKeepActive("[Class:SciCalc]")
    Send("!as") ;Umschalten auf Standard-Ansicht
    $hCtrl = "Button1" ;Button 'MC'

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

    While WinExists("[Class:SciCalc]")
    ToolTip(_MouseOverCtrl($hWnd, $hCtrl))
    Sleep(10)
    WEnd

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

    Func _MouseOverCtrl($hWnd, $hCtrl)
    ;funkey 16.10.2009
    If Not WinActive($hWnd) Then Return 0
    Local $WndPos = WinGetPos($hWnd), $ClientSize = WinGetClientSize($hWnd)
    Local $CtrlPos = ControlGetPos($hWnd, "", $hCtrl)
    Local $Rahmen = ($WndPos[2] - $ClientSize[0]) / 2
    Local $x = $WndPos[0] + $Rahmen + $CtrlPos[0]
    Local $y = $WndPos[1] + $WndPos[3] - $ClientSize[1] + $CtrlPos[1] - $Rahmen
    Local $Pos[4] = [$x, $y, $x + $CtrlPos[2], $y + $CtrlPos[3]]
    Local $MousePos = MouseGetPos()
    If $Pos[0] < $MousePos[0] And $Pos[2] > $MousePos[0] And $Pos[1] < $MousePos[1] And $Pos[3] > $MousePos[1] Then Return 1
    Return 0
    EndFunc

    [/autoit]
  • Hi,

    [autoit]

    GUIGetCursorInfo ()

    [/autoit]

    gibt ein Array mit einigen Daten zurück, dort ist auch die ID des aktuell unter dem Mauscursor befindlichen Controls.
    ciao
    Andy

  • funkey: Danke, das ist genau das was ich gesucht habe ;)
    Andy: Klappt leider nicht, die Funktion gibt immer 0 zurück, also ist irgendein Fehler aufgetreten, konnte das nicht weiter eingrenzen, aber mein Problem ist ja schon gelöst, trotzdem Danke ;)