_GUICtrlMenu_MenuItemFromPoint
Определяет, какой пункт меню находится в указанных координатах.
#include <GuiMenu.au3>
_GUICtrlMenu_MenuItemFromPoint($hWnd, $hMenu [, $iX = -1 [, $iY = -1]])
Параметры
$hWnd | Дескриптор окна, содержащего меню. Если это значение равно 0 и $hMenu represents a popup menu, the function will find the menu window. |
$hMenu |
Дескриптор меню, содержащего пункты меню для теста нажатия |
$iX |
[необязательный] X-координата. Если -1, то будет использоваться текущая X-координата мыши. |
$iY |
[необязательный] Y-координата. Если -1, то будет использоваться текущая Y-координата мыши. |
Возвращаемое значение
Успех: | Возвращает позицию пункта меню, отсчёт от 0 |
Ошибка: | Возвращает -1 |
Примечания
If $hMenu specifies a menu bar the coordinates are window coordinates. Otherwise, they are client coordinates.См. также
Искать MenuItemFromPoint в библиотеке MSDNПример
#include <GuiMenu.au3>
_Main()
Func _Main()
Local $hWnd, $hMain, $hFile, $tRect, $tPoint, $iX, $iY, $iIndex
; Запуск блокнота
Run("notepad.exe")
$hWnd = WinWaitActive("[CLASS:Notepad]")
$hMain = _GUICtrlMenu_GetMenu($hWnd)
$hFile = _GUICtrlMenu_GetItemSubMenu($hMain, 0)
; Открывает меню "Файл"
; Send("!f") ; Alt+F
Send("!Ф") ; Alt+Ф (в русской локализации)
Sleep(1000)
; Перемещает мышь на пункт меню "Открыть"
$tRect = _GUICtrlMenu_GetItemRectEx($hWnd, $hFile, 1)
$tPoint = _Lib_PointFromRect($tRect, True)
_Lib_GetXYFromPoint($tPoint, $iX, $iY)
MouseMove($iX, $iY, 1)
Sleep(1000)
; Получает пункт меню от текущего положения мыши
$iIndex = _GUICtrlMenu_MenuItemFromPoint($hWnd, $hFile)
Send("{ESC 2}")
Writeln("Пункт меню под курсором: " & $iIndex)
EndFunc ;==>_Main
; Записывает строку текста в блокнот
Func Writeln($sText)
ControlSend("[CLASS:Notepad]", "", "Edit1", $sText & @CR)
EndFunc ;==>Writeln
Func _Lib_PointFromRect(ByRef $tRect, $fCenter = True)
Local $iX1, $iY1, $iX2, $iY2, $tPoint
$iX1 = DllStructGetData($tRect, "Left")
$iY1 = DllStructGetData($tRect, "Top")
$iX2 = DllStructGetData($tRect, "Right")
$iY2 = DllStructGetData($tRect, "Bottom")
If $fCenter 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