Function Reference


_GUICtrlMenu_MenuItemFromPoint

Determines which menu item is at the specified location

#include <GuiMenu.au3>
_GUICtrlMenu_MenuItemFromPoint ( $hWnd, $hMenu [, $iX = -1 [, $iY = -1]] )

Parameters

$hWnd Handle to the window containing the menu. If this value is 0 and $hMenu represents a popup menu, the function will find the menu window.
$hMenu Handle to the menu containing the menu items to hit test
$iX [optional] X position to test. If -1, the current mouse X position will be used.
$iY [optional] Y position to test. If -1, the current mouse Y position will be used.

Return Value

Success: the 0-based position of the menu item at the specified location.
Failure: -1.

Remarks

If $hMenu specifies a menu bar the coordinates are window coordinates. Otherwise, they are client coordinates.

See Also

Search MenuItemFromPoint in MSDN Library.

Example

#include <GuiMenu.au3>

Example()

Func Example()
    Local $hWnd, $hMain, $hFile, $tRECT, $tPoint, $iX, $iY, $iIndex

    ; Open Notepad
    Run("notepad.exe")
    WinWaitActive("[CLASS:Notepad]")
    $hWnd = WinGetHandle("[CLASS:Notepad]")
    $hMain = _GUICtrlMenu_GetMenu($hWnd)
    $hFile = _GUICtrlMenu_GetItemSubMenu($hMain, 0)

    ; Open File menu
    Send("!f")
    Sleep(1000)

    ; Move mouse over Open menu item
    $tRECT = _GUICtrlMenu_GetItemRectEx($hWnd, $hFile, 1)
    $tPoint = _Lib_PointFromRect($tRECT, True)
    _Lib_GetXYFromPoint($tPoint, $iX, $iY)
    MouseMove($iX, $iY, 1)
    Sleep(1000)

    ; Get menu item from current mouse position
    $iIndex = _GUICtrlMenu_MenuItemFromPoint($hWnd, $hFile)
    Send("{ESC 2}")
    Writeln("Menu item under cursor was: " & $iIndex)
EndFunc   ;==>Example

; Write a line of text to Notepad
Func Writeln($sText)
    ControlSend("[CLASS:Notepad]", "", "Edit1", $sText & @CRLF)
EndFunc   ;==>Writeln

Func _Lib_PointFromRect(ByRef $tRECT, $bCenter = True)
    Local $iX1, $iY1, $iX2, $iY2, $tPoint

    $iX1 = DllStructGetData($tRECT, "Left")
    $iY1 = DllStructGetData($tRECT, "Top")
    $iX2 = DllStructGetData($tRECT, "Right")
    $iY2 = DllStructGetData($tRECT, "Bottom")
    If $bCenter Then
        $iX1 = $iX1 + (($iX2 - $iX1) / 2)
        $iY1 = $iY1 + (($iY2 - $iY1) / 2)
    EndIf
    $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, "X", $iX1)
    DllStructSetData($tPoint, "Y", $iY1)
    Return $tPoint
EndFunc   ;==>_Lib_PointFromRect

Func _Lib_GetXYFromPoint(ByRef $tPoint, ByRef $iX, ByRef $iY)
    $iX = DllStructGetData($tPoint, "X")
    $iY = DllStructGetData($tPoint, "Y")
EndFunc   ;==>_Lib_GetXYFromPoint