解决方案 »

  1.   

    打开 Spy++,记录手工点击时的该按钮上的消息。
    程序依样发送消息,注意参数(特别是坐标之类的)一致,看是否起作用。
    如果不起作用,试试将整段操作中有关鼠标、焦点之类的消息也依样发送。
      

  2.   

    模拟按键要执行2次:
    '模拟点击按钮,hWndTargetBtn是目标按钮的句柄   
    Call SendMessage(hWndTargetBtn, WM_LBUTTONDOWN, 0, 0)  
    Call SendMessage(hWndTargetBtn, WM_LBUTTONUP, 0, 0)  
      

  3.   

    Dear Veron_04 
          你给我的程式无法送送。计算器上面的按钮在表面``。。我要点击的按钮在子窗体里面呀
    Dear Tiger_Zhao
          spy 消息是发送的  WM_LBUTTONDOWN 我也是发送的这个呀``也不行Dear chenjl1031 
          Call SendMessage(hWndTargetBtn, WM_LBUTTONDOWN, 0, 0)   
          Call SendMessage(hWndTargetBtn, WM_LBUTTONUP, 0, 0) 
          这个方法我也试过```单击其它窗体上的按钮没有问题``可我这个不行啊```各位朋友,谢谢你们的回答。```能否麻烦一下你们``留个QQ——mail地址给我``我把程式发给我们看看???
      

  4.   

    有点意思.发给我看看:myjian01<XXX>yahoo.com.cn自行替换@.....
      

  5.   

    Dear myjian 
       已经通过邮件把程式发给你了``我想要单击窗体睥开始按钮。如果可以的话通过的邮件回复给我,拜托你了。感谢!!!
      

  6.   

    邮件里我就不回复了,发论坛上来最好,这样的话也许对别人也会有帮助.你发来的软件是这个:http://www.pc6.com/softview/SoftView_16576.html下面是针对这个软件中"测试"选项卡中"开始"按钮发送单击消息的代码(需要"测试"选项卡为当前选项卡):Option Explicit
    '窗体中添加两个按钮
    '
    '点击其它软件中的按钮测试程序.
    '
    'By 嗷嗷叫的老马
    'http://www.m5home.com/Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
         ByVal lpClassName As String, _
         ByVal lpWindowName As String) As Long
    Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
         ByVal hWnd1 As Long, _
         ByVal hWnd2 As Long, _
         ByVal lpsz1 As String, _
         ByVal lpsz2 As String) As Long
    Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
         ByVal hwnd As Long, _
         ByVal wMsg As Long, _
         ByVal wParam As Long, _
         ByVal lParam As Long) As Long
    Private Const WM_LBUTTONDOWN As Long = &H201
    Private Const WM_LBUTTONUP As Long = &H202Dim hDest As Long           '目标按钮句柄Private Sub Command1_Click()
        '寻找按钮句柄
        '
        '具体代码内容根据软件的结构不同而不同,参考SPY++中目标软件的结构图
        '
        Dim hTmp As Long, hTmp2 As Long
        
        hTmp = FindWindow("TFm", vbNullString)
        If hTmp <> 0 Then
            hTmp = FindWindowEx(hTmp, 0&, "TPageControl", vbNullString)
            hTmp = FindWindowEx(hTmp, 0&, "TTabSheet", vbNullString)
            hTmp2 = FindWindowEx(hTmp, 0&, "TPanel", vbNullString)
            hTmp = FindWindowEx(hTmp, hTmp2, "TPanel", vbNullString)
            hTmp = FindWindowEx(hTmp, 0&, "TGroupBox", vbNullString)
            hTmp = FindWindowEx(hTmp, 0&, "TPanel", vbNullString)
            hDest = FindWindowEx(hTmp, 0&, "TRzBitBtn", vbNullString)
            If hDest <> 0 Then
                MsgBox "成功找到句柄!"
            Else
                MsgBox "未找到句柄!"
            End If
        End If
    End SubPrivate Sub Command2_Click()
        If hDest <> 0 Then
            SendClick hDest, 10, 10              '
        Else
            MsgBox "还未找到句柄!"
        End If
    End SubPrivate Sub Form_Load()
        Command1.Caption = "查找句柄"
        Command2.Caption = "发送单击消息"
    End SubPrivate Function SendClick(hwnd As Long, mX As Long, mY As Long)
        '发送点击消息
        Dim I As Long
        I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
        I = PostMessage(hwnd, WM_LBUTTONUP, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
    End Function以下是SPY++所得到的窗体结构以及相关代码:使用方法:先按"查找句柄"按钮得到句柄,再按"发送单击消息"即可看到效果.另外,测试过这个Victoria 4.3为最小化情况下仍然有效,说明它没有在最小化时拒绝响应鼠标消息..
      

  7.   

    myjian:
          谢谢你的回答。 
      

  8.   

    话说模拟单击只要一个BM_CLICK的消息就够了么?