Ermittelt welches Menüitem sich an dem festgelegten Ort befindet
#include <GuiMenu.au3>
_GUICtrlMenu_MenuItemFromPoint ( $hWnd, $hMenu [, $iX = -1 [, $iY = -1]] )
$hWnd | Handle zu dem Fenster welches das Menü enthält. Falls dieser Wert 0 ist und $hMenu ein Popup Menü darstellt, wird die Funktion das Menüfenster finden. |
$hMenu | Handle zu dem Menü welches die Menüitems enthält um den hit Test durchzuführen |
$iX | [optional] zu testende X-Position. Falls -1 wird die aktuelle Maus X-Position verwendet. |
$iY | [optional] zu testende Y-Position. Falls -1 wird die aktuelle Maus Y-Position verwendet. |
Erfolg: | Die 0-basierende Position des Menüitems an der festgelegten Stelle |
Fehler: | -1 |
Falls $hMenu eine Menüleiste darstellt, sind die Koordinaten Fensterkoordinaten. Sonst sind die Arbeitsflächenkoordinaten.
- - - - - - - - Erklärung der Controls - - - - - - - -
Suche nach MenuItemFromPoint in der MSDN Bibliothek.
#include <GuiMenu.au3>
Example()
Func Example()
Local $hWnd, $hMain, $hFile, $tRECT, $tPoint, $iX, $iY, $iIndex
; Startet den Editor
Run("notepad.exe")
WinWaitActive("[CLASS:Notepad]")
$hWnd = WinGetHandle("[CLASS:Notepad]")
$hMain = _GUICtrlMenu_GetMenu($hWnd)
$hFile = _GUICtrlMenu_GetItemSubMenu($hMain, 0)
; Menüpunkt 'Öffnen'
Send("!f")
Sleep(1000)
; Bewegt die Maus über den Menüpunkt 'Öffnen'
$tRECT = _GUICtrlMenu_GetItemRectEx($hWnd, $hFile, 1)
$tPoint = _Lib_PointFromRect($tRECT, True)
_Lib_GetXYFromPoint($tPoint, $iX, $iY)
MouseMove($iX, $iY, 1)
Sleep(1000)
; Ermittelt den Menüpunkt über der sich die Maus gerade befindet
$iIndex = _GUICtrlMenu_MenuItemFromPoint($hWnd, $hFile)
Send("{ESC 2}")
Writeln("Der Menüpunkt über der sich die Maus gerade befindet lautet: " & $iIndex)
EndFunc ;==>Example
; Schreibt eine Zeile mit Text in den Editor
Func Writeln($sText)
ControlSend("[CLASS:Notepad]", "", "Edit1", $sText & @CRLF)
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