大家好,现在做一个小程序,需要监控某一个按钮是否被按下,按钮按下后对应的窗体
就会关闭,所以貌似要用钩子来拦截消息。不过因为在此方面没有经验,请大家指点一
下,怎么进行啊,谢谢。

解决方案 »

  1.   

      Dim   ld   =   GetWindowLong(hButton,   GWL_STYLE)   
      If   ((ld   And   WS_DISABLED))   Then               
      //按钮被按下了   
      end   if
      

  2.   

    按钮消息BN_CLICKED: 用户单击了按钮
      

  3.   

    一个timer,一个command,一个text。
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
      Const BM_GETSTATE = &HF2
      Private Sub Form_Load()
      Timer1.Interval = 50
      Timer1.Enabled = True
      End Sub  Private Sub Timer1_Timer()
      Dim a As Long
      a = SendMessage(Command1.hwnd, BM_GETSTATE, 0, 0)
      Text1.Text = a
      If a = 108 Then MsgBox "按钮被按下了"
      End Sub
    具体看被按下时a是什么值判断。
      

  4.   

    按钮被按下的一刹那,窗口立即就消失了,所以是不是需要用钩子的啊?另外,VB里面ListBox的内容,已经知道他的句柄了,但是内容怎么获取啊?以上,谢谢大家帮忙。
      

  5.   

    使用Hook技术可以轻松实现,个人思路如下:1、取得拥有当前焦点的控件的句柄(GetFocus函数可以实现该功能),判断该句柄是否和你要控制的按钮的句柄一致。
    2、使用Hook函数Hook到鼠标按下的消息,判断是否点中的是该按钮(第1步中已判断)
      

  6.   

    按钮的句柄已经获得了,但是Hook技术的实现方法,有没有简单的例子呢?谢谢大家。