UDF > GUI > GuiMenu >


_GUICtrlMenu_MenuItemFromPoint

Détermine quel élément de menu est à l'emplacement spécifié

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

Paramètres

$hWnd Handle de la fenêtre contenant le menu. Si cette valeur est 0 et $hMenu représente un menu déroulant, la fonction trouvera la fenêtre du menu.
$hMenu Handle du menu contenant les éléments qu'il faut tester
$iX [optionnel] Position X à tester. Si -1, la position X courante de la souris sera utilisée.
$iY [optionnel] Position Y à tester. Si -1, la position Y courante de la souris sera utilisée.

Valeur de retour

Succès: Retourne la position de base 0 de l'élément de menu à l'emplacement spécifié.
Échec: Retourne -1.

Remarque

Si $hMenu spécifie une barre de menu, les coordonnées sont les coordonnées de la fenêtre. Sinon, elles sont les coordonnées de la zone cliente.

Voir aussi

Consultez MenuItemFromPoint dans la librairie MSDN.

Exemple

#include <GuiMenu.au3>

Example()

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

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

    ; Ouvre le menu File
    Send("!f")
    Sleep(1000)

    ; Déplace la souris sur l'élément de menu Open
    $tRect = _GUICtrlMenu_GetItemRectEx($hWnd, $hFile, 1)
    $tPoint = _Lib_PointFromRect($tRect, True)
    _Lib_GetXYFromPoint($tPoint, $iX, $iY)
    MouseMove($iX, $iY, 1)
    Sleep(1000)

    ; Obtient l'élément de menu à partir de la position actuelle de la souris
    $iIndex = _GUICtrlMenu_MenuItemFromPoint($hWnd, $hFile)
    Send("{ESC 2}")
    Writeln("Élément de menu sous le curseur était: " & $iIndex)
EndFunc   ;==>Example

; Écrit une ligne de texte dans le Bloc-Notes
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