再来个问题!谁会使用_GUICtrlMenu_???命令?即<GuiMenu.au3>使用帮助
就是<GuiMenu.au3>搞个教程吧,我想学创建系统菜单
如:
$hMenu = _GUICtrlMenu_GetSystemMenu($hWnd)
_GUICtrlMenu_InsertMenuItem($hMenu, 5, "&AutoIt Alt+F2")
但怎么让点击Autoit能有效,我现在只会创建无效的控件,还有这么让Alt+F2有效,因为我是无效控件也不知道成功不?! #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
谢谢楼上的大哥!但能不能不要
HotKeySet("!{f2}", "_AutoItTest") Func _WM_SYSCMD($hWnd, $iMsg, $wparam, $lparam)
If bitAND($wparam, 0xFFFF) = 77 Then _AutoItTest()
EndFunc ;==>_WM_SYSCMD
$wparam,$iMsg,0xFFFF,77, $lparam分别是什么意思? .........顶贴 1 hWnd 出现消息的 GUI 窗口句柄.
2 Msg 窗口消息 ID.
3 wParam 第一个信息参数为十六进制值.
4 lParam 第二个消息参数为十六进制值. _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 主要是hotkey,你就算不激活主窗口,按快捷键也有效。。。 额,RegisterHotKey怎么用啊,能给个例子不,看了半天,写了几次老是错误,说我语法错了。额!汗~ 看到这里 想到 如果au3开源多好 哎 可以让我等菜鸟看看原型 更深入的学习下 Re 9#:
刚刚又测试了,使用RegisterHotKey注册热键还是同样的效果,如果窗口处于未激活状态时按下热键,热键还是有效。记得以前时不是这样的。那么还是使用HOTKEYSET吧。
使用If bitAND(WinGetState($hGUI), 8) = 8 Then... 就可以了,截取到热键按下后,先判断窗口是否处于激活状态。 十分感谢pusofalse 大哥!
页:
[1]