AUTOIT: Как получить текущий выбор в выигрышном меню

Как вы можете получить текущий выбранный пункт в меню? Например, в блокноте. Как определить, является ли текущий выбранным "Шрифт..."

Заранее спасибо!

ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("{DOWN}")

1 ответ

Решение

Перебирайте пункты в меню, ища тот, который выделен. Для подменю родительский элемент также будет выделен, так что вы можете вернуться в меню следующим образом:

#include <GUIMenu.au3>

ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("{DOWN}")

Sleep(100)

$hMenu = _GUICtrlMenu_GetMenu(WinGetHandle("Untitled - Notepad"))
MsgBox(0, "test", _GetSelected($hMenu))


Func _GetSelected($hMenu)
    Local $iItem = 0, $ret, $sub

    While 1
        Local $tInfo = _GUICtrlMenu_GetItemInfo($hMenu, $iItem, True)
        If @error Or Not @extended Then ExitLoop

        If BitAND(DllStructGetData($tInfo, "State"), $MFS_HILITE) Then
            $sub = DllStructGetData($tInfo, "SubMenu")

            If $sub Then
                $ret = _GetSelected($sub)

                If $ret <> "" Then Return $iItem & "-" & $ret
            EndIf

            Return $iItem
        EndIf

        $iItem += 1
    WEnd

    Return ""
EndFunc   ;==>_GetSelected
Другие вопросы по тегам