AUTOIT:如何在win菜单中获取当前所选项目
问题描述:
如何获取菜单中当前所选项目?例如在记事本中。如何识别当前选择的是“字体...”AUTOIT:如何在win菜单中获取当前所选项目
在此先感谢!
ShellExecute("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("!O")
Send("{DOWN}")
答
遍历菜单中的项目以查找突出显示的项目。对于子菜单,父项也将被高亮显示,因此您可以通过如下菜单进行递归:
#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
如果返回的项目是否为“Font ...”项目,是否可以读取? – NullReferenceException
是的,只要看看'_GUICtrlMenu_'函数。在我有'Return $ iItem'的地方,将其改为'Return _GUICtrlMenu_GetItemText($ hMenu,$ iItem)',并将'Return $ iItem&“ - ”&$ ret'更改为'Return $ ret'。 – Matt