找回密码
 加入
搜索
查看: 4607|回复: 6

[AU3基础] 如何得到窗囗中按鈕是启用还是禁用的状态?

  [复制链接]
发表于 2014-8-17 19:59:13 | 显示全部楼层 |阅读模式
如何得到窗囗中按鈕是启用还是禁用的状态?
发表于 2014-8-17 20:10:44 | 显示全部楼层
#Include <WinAPIEx.au3>
_WinAPI_IsWindowEnabled( $hWnd )
发表于 2014-8-17 20:12:31 | 显示全部楼层
ControlCommand

命令, 选项 返回值
"IsEnabled", "" 若目标控件可用(未被禁用)则返回值为1,否则为0.
 楼主| 发表于 2014-8-17 21:18:04 | 显示全部楼层
谢谢。。。。。。。
发表于 2014-8-18 18:47:05 | 显示全部楼层
本帖最后由 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函数命令
发表于 2014-9-10 22:19:01 | 显示全部楼层
学习学习。。。。。。。。。
发表于 2014-9-10 22:43:01 | 显示全部楼层
回复 5# dunphy


    代码很好,还有详细的注释。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 17:04 , Processed in 0.092903 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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