找回密码
 加入
搜索
查看: 2682|回复: 11

再来个问题!谁会使用_GUICtrlMenu_???命令?即<GuiMenu.au3>使用帮助

[复制链接]
发表于 2009-8-30 16:33:55 | 显示全部楼层 |阅读模式
就是<GuiMenu.au3>


搞个教程吧,我想学创建系统菜单
如:
    $hMenu = _GUICtrlMenu_GetSystemMenu($hWnd)

    _GUICtrlMenu_InsertMenuItem($hMenu, 5, "&AutoIt        Alt+F2")

但怎么让点击Autoit能有效,我现在只会创建无效的控件,还有这么让Alt+F2有效,因为我是无效控件也不知道成功不?!
发表于 2009-8-30 18:42:15 | 显示全部楼层
#include <GUIMenu.au3>
#include <WindowsConstants.au3>

HotKeySet("!{f2}", "_AutoItTest")

$hGUI = GUICreate("Test", 200, 100, -1, -1)
$hMenu = _GUICtrlMenu_GetSystemMenu($hGUI)

_GUICtrlMenu_InsertMenuItem($hMenu, 8, "&AutoIt          Alt+F2", 77)
GUISetState()
GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCMD")

Do
Until guiGetMsg() = -3

Func _WM_SYSCMD($hWnd, $iMsg, $wparam, $lparam)
        If bitAND($wparam, 0xFFFF) = 77 Then _AutoItTest()
EndFunc        ;==>_WM_SYSCMD

Func _AutoItTest()
        Msgbox(0, "Test", "You clicked the &AutoIt menu item.")
EndFunc        ;==>_Test

评分

参与人数 1威望 +2 金钱 +200 贡献 +89 收起 理由
kn007 + 2 + 200 + 89 十分感谢,里面的77是什么意思?另外,能帮 ...

查看全部评分

 楼主| 发表于 2009-8-30 23:06:12 | 显示全部楼层
谢谢楼上的大哥!但能不能不要
HotKeySet("!{f2}", "_AutoItTest")
 楼主| 发表于 2009-8-30 23:09:52 | 显示全部楼层
Func _WM_SYSCMD($hWnd, $iMsg, $wparam, $lparam)

        If bitAND($wparam, 0xFFFF) = 77 Then _AutoItTest()

EndFunc        ;==>_WM_SYSCMD


$wparam,$iMsg,0xFFFF,77, $lparam分别是什么意思?
 楼主| 发表于 2009-8-31 06:19:18 | 显示全部楼层
.........顶贴
发表于 2009-8-31 06:42:35 | 显示全部楼层
1 hWnd 出现消息的 GUI 窗口句柄.
2 Msg 窗口消息 ID.
3 wParam 第一个信息参数为十六进制值.
4 lParam 第二个消息参数为十六进制值.

评分

参与人数 1金钱 +20 收起 理由
kn007 + 20 谢谢,天空龙!

查看全部评分

发表于 2009-8-31 10:05:06 | 显示全部楼层
_GUICtrlMenu_InsertMenuItem($hMenu, "&AutoIt", 77)这条语句中77就是指定的菜单项目的ID,这个要你自己人工指定,而非autoit给你返回。添加菜单并注册WM_SYSCOMMAND消息之后,每次当你点击系统菜单的某个项目,系统都会发送消息到你的自定义函数,并把wparam的低4位设为所点击的菜单项目ID。
如果wparam的值为0x0001004D,那么其低4位就是0x004D,高4位为0x0001。
bitAND($wparam, 0xFFFF)就是取0x0001004D中0x004D的方法,不要问为什么,取低位就是要用到bitAND这样的用法。取wparam的高4位用bitShift($wparam, 0x10)。

_GUICtrlMenu_InsertMenuItem的第三个参数指定菜单项目的ID,注意ID不要与现有的系统菜单项目(关闭、最小化、最大化)的ID设为同样的值。
另外不用HotKeySet也可以,你可以自己调用API函数RegisterHotKey,MSDN中有用法。
WM_SYSCOMMAND - http://msdn.microsoft.com/en-us/library/ms646360(VS.85).aspx

评分

参与人数 1金钱 +80 收起 理由
kn007 + 80 额,RegisterHotKey怎么用啊,能给个例子不 ...

查看全部评分

 楼主| 发表于 2009-8-31 11:30:46 | 显示全部楼层
主要是hotkey,你就算不激活主窗口,按快捷键也有效。。。
 楼主| 发表于 2009-8-31 11:34:08 | 显示全部楼层
额,RegisterHotKey怎么用啊,能给个例子不,看了半天,写了几次老是错误,说我语法错了。额!汗~
发表于 2009-8-31 16:29:22 | 显示全部楼层
看到这里 想到 如果au3开源多好 哎 可以让我等菜鸟看看原型 更深入的学习下
发表于 2009-8-31 18:52:00 | 显示全部楼层
Re 9#:
刚刚又测试了,使用RegisterHotKey注册热键还是同样的效果,如果窗口处于未激活状态时按下热键,热键还是有效。记得以前时不是这样的。那么还是使用HOTKEYSET吧。
使用If bitAND(WinGetState($hGUI), 8) = 8 Then... 就可以了,截取到热键按下后,先判断窗口是否处于激活状态。

评分

参与人数 1威望 +3 金钱 +100 贡献 +50 收起 理由
kn007 + 3 + 100 + 50 万分感谢!大哥您的帖子我已经修改好了,在 ...

查看全部评分

 楼主| 发表于 2009-8-31 22:56:19 | 显示全部楼层
十分感谢pusofalse 大哥!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-28 04:47 , Processed in 0.076119 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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