我的代码如下
Private Sub Command1_Click()
    Dim hBtn As Long
    Dim hParent As Long
    Const WM_LBUTTONDOWN = &H201
    Const WM_LBUTTONUP = &H202
    
    hParent = FindWindow("ThunderFormDC", "Form1")
    hBtn = FindWindowEx(hParent, 0, "ThunderCommandButton", "Button1")
    lblWinHDL.Caption = Hex(hParent)
    lblBtnHDL.Caption = Hex(hBtn)
    SendMessage hBtn, WM_LBUTTONDOWN, 0, 0
    SendMessage hBtn, WM_LBUTTONUP, 0, 0
    
End Sub
在我单击command1时,只是在form1中焦点移动到了Button1上,而没有产生Button1的单击事件。这是为什么呢?是否还需要加入一些API函数或要进行一些设置?谢谢

解决方案 »

  1.   

    用 BM_CLICK 这个消息你所用的是窗体接收的消息 所以不产生结果
      

  2.   

    用POSTMESSAGE
    有时候sendmessage窗体不接收
      

  3.   

    其实这里用POST而不用SEND的原因在于一些VB程序员不熟悉WINDOWS窗体事件的处理过程,想当然以为我SEND了MOUSE的DOWN再SEND一个UP就应该模拟出CLICK事件,但实际上VB的CLICK事件是建立在两个消息前后紧挨着放在消息队列里面的基础上的,但SEND是要等待窗体处理了发送的消息后才返回的,因此当窗体消息函数在处理DOWN时它不能在队列的下一位置找到UP消息(因为下一条SEND还没机会运行),这就形不成CLICK事件了。POST则是把消息往队列里一扔就返回,所以两个消息就会有机会(绝大部分情况下这个机会是存在的)挨个放在队列里等待处理,结果形成VB的CLICK事件。
      

  4.   

    给按钮发送个空格就行了.用api函数发.
    发哪个树标事件我们成功过.
    发了按下还要发抬起.
      

  5.   

    sendmessage 在向所在线程的消息队列发送消息时,并不是普通的消息处理过程。而是直接调用相关的windowproc处理消息