Détermine quel élément de menu est à l'emplacement spécifié
#include <GuiMenu.au3>
_GUICtrlMenu_MenuItemFromPoint ( $hWnd, $hMenu [, $iX = -1 [, $iY = -1]] )
$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. |
Succès: | Retourne la position de base 0 de l'élément de menu à l'emplacement spécifié. |
Échec: | Retourne -1. |
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.
Consultez MenuItemFromPoint dans la librairie MSDN.
#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