kn007 发表于 2009-8-30 16:33:55

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

就是<GuiMenu.au3>


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

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

但怎么让点击Autoit能有效,我现在只会创建无效的控件,还有这么让Alt+F2有效,因为我是无效控件也不知道成功不?!

pusofalse 发表于 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

kn007 发表于 2009-8-30 23:06:12

谢谢楼上的大哥!但能不能不要
HotKeySet("!{f2}", "_AutoItTest")

kn007 发表于 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分别是什么意思?

kn007 发表于 2009-8-31 06:19:18

.........顶贴

bing614 发表于 2009-8-31 06:42:35

1 hWnd 出现消息的 GUI 窗口句柄.
2 Msg 窗口消息 ID.
3 wParam 第一个信息参数为十六进制值.
4 lParam 第二个消息参数为十六进制值.

pusofalse 发表于 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

kn007 发表于 2009-8-31 11:30:46

主要是hotkey,你就算不激活主窗口,按快捷键也有效。。。

kn007 发表于 2009-8-31 11:34:08

额,RegisterHotKey怎么用啊,能给个例子不,看了半天,写了几次老是错误,说我语法错了。额!汗~

sxd 发表于 2009-8-31 16:29:22

看到这里 想到 如果au3开源多好 哎 可以让我等菜鸟看看原型 更深入的学习下

pusofalse 发表于 2009-8-31 18:52:00

Re 9#:
刚刚又测试了,使用RegisterHotKey注册热键还是同样的效果,如果窗口处于未激活状态时按下热键,热键还是有效。记得以前时不是这样的。那么还是使用HOTKEYSET吧。
使用If bitAND(WinGetState($hGUI), 8) = 8 Then... 就可以了,截取到热键按下后,先判断窗口是否处于激活状态。

kn007 发表于 2009-8-31 22:56:19

十分感谢pusofalse 大哥!
页: [1]
查看完整版本: 再来个问题!谁会使用_GUICtrlMenu_???命令?即<GuiMenu.au3>使用帮助