找回密码
 加入
搜索
查看: 2280|回复: 5

[AU3基础] 如果截获一个窗体MainMenu菜单下子菜单的单击操作

  [复制链接]
发表于 2012-4-11 16:58:36 | 显示全部楼层 |阅读模式
用autoinfo无法获取到菜单的信息,怎么才能截获呢。望高手指点。
发表于 2012-4-12 00:40:53 | 显示全部楼层
囧 。。。。不知道咋说。。。寥寥数语。。。
发表于 2012-4-12 00:40:57 | 显示全部楼层
囧 。。。。不知道咋说。。。寥寥数语。。。
发表于 2012-4-12 00:59:19 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
    Local $defaultstatus = "就绪", $status, $filemenu, $fileitem
    Local $helpmenu, $saveitem, $infoitem, $exititem, $recentfilesmenu
    Local $separator1, $viewmenu, $viewstatusitem, $okbutton, $cancelbutton
    Local $statuslabel, $msg, $file
    
    GUICreate("我的菜单窗口", 300, 200)


    $filemenu = GUICtrlCreateMenu("文件(&F)")
    $fileitem = GUICtrlCreateMenuItem("打开", $filemenu)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    $helpmenu = GUICtrlCreateMenu("帮助")
    $saveitem = GUICtrlCreateMenuItem("保存", $filemenu)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $infoitem = GUICtrlCreateMenuItem("信息", $helpmenu)
    $exititem = GUICtrlCreateMenuItem("退出", $filemenu)
    $recentfilesmenu = GUICtrlCreateMenu("最近文件", $filemenu, 1)

    $separator1 = GUICtrlCreateMenuItem("", $filemenu, 2)   ; 创建分隔行

    $viewmenu = GUICtrlCreateMenu("查看", -1, 1)    ; 创建 "帮助" 的前项菜单
    $viewstatusitem = GUICtrlCreateMenuItem("状态栏", $viewmenu)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $okbutton = GUICtrlCreateButton("确定", 50, 130, 70, 20)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $cancelbutton = GUICtrlCreateButton("删除", 180, 130, 70, 20)

    $statuslabel = GUICtrlCreateLabel($defaultstatus, 0, 165, 300, 16, BitOR($SS_SIMPLE, $SS_SUNKEN))

    GUISetState()
    While 1
        $msg = GUIGetMsg()
        
        If $msg = $fileitem Then
            $file = FileOpenDialog("选择文件...", @TempDir, "全部 (*.*)")
            If @error <> 1 Then GUICtrlCreateMenuItem($file, $recentfilesmenu)
        EndIf
        If $msg = $viewstatusitem Then
            If BitAND(GUICtrlRead($viewstatusitem), $GUI_CHECKED) = $GUI_CHECKED Then
                GUICtrlSetState($viewstatusitem, $GUI_UNCHECKED)
                GUICtrlSetState($statuslabel, $GUI_HIDE)
            Else
                GUICtrlSetState($viewstatusitem, $GUI_CHECKED)
                GUICtrlSetState($statuslabel, $GUI_SHOW)
            EndIf
        EndIf
        If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Or $msg = $exititem Then ExitLoop
        If $msg = $infoitem Then MsgBox(0, "信息", "只是测试...")
    WEnd
    GUIDelete()
EndFunc   ;==>Example
发表于 2012-4-12 05:48:38 | 显示全部楼层
外部窗口,可以参考这个帮助示例
#include <GuiMenu.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
        Local $hWnd, $hMain, $hFile

        ; Open Notepad
        Run("Notepad.exe")
        WinWaitActive("[CLASS:Notepad]")
        $hWnd = WinGetHandle("[CLASS:Notepad]")
        $hMain = _GUICtrlMenu_GetMenu($hWnd)
        $hFile = _GUICtrlMenu_GetItemSubMenu($hMain, 0)

        ; Get/Set Open item text
        Writeln("Open item text: " & _GUICtrlMenu_GetItemText($hFile, 1))
        _GUICtrlMenu_SetItemText($hFile, 1, "&Closed")
        Writeln("Open item text: " & _GUICtrlMenu_GetItemText($hFile, 1))

EndFunc   ;==>_Main

; Write a line of text to Notepad
Func Writeln($sText)
        ControlSend("[CLASS:Notepad]", "", "Edit1", $sText & @CR)
EndFunc   ;==>Writeln
 楼主| 发表于 2012-4-14 13:39:17 | 显示全部楼层
回复 5# 风行者


    谢谢 您的思路对于解决我的问题很多有帮助!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-20 17:00 , Processed in 0.093124 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表