本帖最后由 dunphy 于 2014-8-18 19:05 编辑
我借用朋友的按键单击跟双击事件的例子给你改了一下,就用GUICtrlGetState 函数就可以判断。#include <ButtonConstants.au3> ; 定义了 $BN_CLICKED 等等跟按钮有关的常量
#include <WindowsConstants.au3> ; $WM_COMMAND 等等系统信息代号在此定义
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
$Form1 = GUICreate("按钮的双击与单击测试", 300, 152)
$Button1 = GUICtrlCreateButton("按钮1", 110, 25, 97, 33, $BS_NOTIFY)
GUICtrlSetState($Button1, $GUI_DISABLE) ;设置按键1为禁用,也可以将状态$GUI_DISABLE用数字 128替换表示 ,启用为$GUI_ENABLE (64)
;具体的请参考函数里相应的状态解释
$Button2 = GUICtrlCreateButton("按钮2", 110, 75, 97, 33)
_main()
Exit
Func _main()
Local $idbutton = GUICtrlGetState($Button1) ;获取当前按钮1的状态
If $idbutton ==144 Then ;$GUI_DISABLE (128) 禁用状态+$GUI_SHOW (16) 显示状态
MsgBox(0, "按钮1", "按钮1禁用")
Else
MsgBox(0, "按钮1", "按钮1启用")
EndIf
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
While 1
Switch GUIGetMsg()
Case $Button1
MsgBox(0, '按钮1', '正常响应点击! ')
Case -3 ; $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc ;==>_main
Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
; $wParam 为十六进制数, 类似: 0x00050006 换成二进制 共 32位,
Local $nNotifyCode = BitShift($wParam, 16) ; 获取'高位', 等于截取为: 0x0005 ; 此数值一般代表: 消息通知到窗体的'代号'
Local $nID = BitAND($wParam, 0x0000FFFF) ; 获取'低位', 等于截取为: 0x0006 ; 此数值一般代表: 接受操作的窗体控件ID
If $nNotifyCode = $BN_DBLCLK Then ;响应按钮双击, 但第二个按钮无 $BS_NOTIFY 样式, 所以不会响应此操作!
MsgBox(0, GUICtrlRead($nID), '双击操作!')
Return 0 ; 不再执行前面大循环中的响应 按钮1 的操作: MsgBox(0, '按钮1', '正常响应点击! ') !
EndIf
If $nNotifyCode = $BN_CLICKED And $nID <> $Button1 Then ; 响应单击按钮, 但排除了第一个按钮
MsgBox(0, GUICtrlRead($nID), '单击操作!')
Return 0
Else
Return 0
EndIf
; 以下专为学习 $WM_COMMAND 知识而输出
Local $hCtrl = $lParam
If $nID > 2 Then ;响应控件操作时, 输出以下综合信息.
; 窗体的控件ID 都是从 3 开始依次而创建!
ConsoleWrite("窗口句柄" & @TAB & ":" & $hWnd & @LF & _
"系统消息代号" & @TAB & ":" & $Msg & @LF & _
"消息首参数值" & @TAB & ":" & $wParam & @LF & _
"消息次参数值" & @TAB & ":" & $lParam & @LF & @LF & _
"WM_COMMAND - 信息" & @LF & _
"-----------------------------" & @LF & _
"代号" & @TAB & ":" & $nNotifyCode & @LF & _
"控件ID" & @TAB & ":" & $nID & @LF & _
"控件句柄" & @TAB & ":" & $hCtrl & @CR)
EndIf
EndFunc ;==>MY_WM_COMMAND
如果是获取其它窗口中按键是否可用,请参考三楼ControlCommand函数命令 |