ctpyy 发表于 2014-8-17 19:59:13

如何得到窗囗中按鈕是启用还是禁用的状态?

如何得到窗囗中按鈕是启用还是禁用的状态?

veket_linux 发表于 2014-8-17 20:10:44

#Include <WinAPIEx.au3>
_WinAPI_IsWindowEnabled( $hWnd )

veket_linux 发表于 2014-8-17 20:12:31

ControlCommand

命令, 选项 返回值
"IsEnabled", "" 若目标控件可用(未被禁用)则返回值为1,否则为0.

ctpyy 发表于 2014-8-17 21:18:04

谢谢。。。。。。。

dunphy 发表于 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 ==144Then      ;$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函数命令

wangms 发表于 2014-9-10 22:19:01

学习学习。。。。。。。。。

austere 发表于 2014-9-10 22:43:01

回复 5# dunphy


    代码很好,还有详细的注释。。。
页: [1]
查看完整版本: 如何得到窗囗中按鈕是启用还是禁用的状态?