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 
+0

如果返回的项目是否为“Font ...”项目,是否可以读取? – NullReferenceException

+2

是的,只要看看'_GUICtrlMenu_'函数。在我有'Return $ iItem'的地方,将其改为'Return _GUICtrlMenu_GetItemText($ hMenu,$ iItem)',并将'Return $ iItem&“ - ”&$ ret'更改为'Return $ ret'。 – Matt