我在我的程序中调用一个VB的exe程序后,打开一个窗口(此窗口在exe程序中被实现)
现在我想调用这个窗口上的某一个Button的Click事件,怎么办?
有懂这方面的,请指点一二。接触VB不多,做好有例子程序。谢了先

解决方案 »

  1.   


    Option Explicit
    '在窗体中增加一个 Command1 的按扭
    Private Sub Command1_Click()
      MsgBox "你现在单击的是按扭 Command1"
    End Sub
      

  2.   

    可能我没说明白,窗口是exe中显示出来的,想在我现在的程序中调用exe程序中Button的Click事件
      

  3.   

    我没有很清楚的明白你的意思 我就说我理解的两个意思第一: 在同一个工程下面的  那么你吧CLICK的访问属性 设置为PUBLIC的第二: 如果你是想在你的程序中 调用别人的程序上的一个按钮点击的话,那么 你需要一个模拟点击,就是你在操作你的程序的时候点击你所想点击的程序,就需要一个窗口查看器,获得你要点击的控件的类名,然后进行API实现,呵呵,不过,如果人家已经屏蔽了的话,就有点困难了平. 祝你成功...
      

  4.   

    那就麻烦了.
    代码好长,我就不写了.
    给思路:找到 button 的句柄.
    API
    FindWindowEx
    发送一个鼠标点击的信息.
    API
    SendMessage
      

  5.   

    fvflove的思路考虑可行。
    我对VB了解不深,查了一下发现FindWindowEx可以得到窗口的句柄,可是得不到Button的句柄
    请再帮想一下。
      

  6.   

    直接调用那个click事件过程就行formA.cmdbutton1_click()
      

  7.   

    关于4楼的思路,我已经进行了实现,得到了Button句柄后,使用SendMessage发送一个BM_CLICK事件
    但是会出现一个Automation错误。
    Err: -2147417843 - Automation Error : An Out Going Call Cannot Be Made Because The Application Is Dispatching An Input Asynchronous Call哪个高手知道什么原因?
      

  8.   

    在部件Automation对象中如Execel,是不允许子类化的,也不允许直接使用SendMessage投递消息,这是因为在消息分派时(DispatchMessage)COM作了一些变动,从而导致部分应该执行的代码未执行或状态未正常改变,所以出现该类错误!
      

  9.   

    如何解决这个问题呢,我的EXE程序中也没有Automation代码的,就是一个简单的VB EXE程序。
      

  10.   

    两种办法,一是查找键盘或鼠标事件,二是改变一下消息(不同的程序单击事件的消息不一样,有的可能只支持鼠标或只支持键盘,即使鼠标,还存在几个按键消息),如使用Const WM_LBUTTONDBLCLK。如果不行的话,则只能模拟鼠标了。
      

  11.   

    WM_LBUTTONDBLCLK事件也试验过了,还是有这个问题,你说的模拟鼠标是什么意思?
      

  12.   

    等下啊,我给你翻个现成的出来Option Explicit 
    Public Const WM_MOUSEMOVE = &H200 
    Public Const WM_LBUTTONUP = &H202 
    Public Const WM_LBUTTONDOWN = &H201 
    Public Const MK_LBUTTON = &H1 Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
    Public Sub LeftClick(hwnd As Long, x As Integer, y As Integer) 
      PostMessage hwnd, WM_LBUTTONDOWN, MK_LBUTTON, y * 2 ^ 16 + x '这是后台模拟点击的,这方面的资料偶找了好久啊.. 
      PostMessage hwnd, WM_LBUTTONUP, MK_LBUTTON, y * 2 ^ 16 + x 
    End Sub