关于如何调用按钮单击事件的问题

smallboy_5 2008-10-07 04:43:39
我在我的程序中调用一个VB的exe程序后,打开一个窗口(此窗口在exe程序中被实现)
现在我想调用这个窗口上的某一个Button的Click事件,怎么办?
有懂这方面的,请指点一二。接触VB不多,做好有例子程序。谢了先
...全文
566 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bob008 2008-10-07
  • 打赏
  • 举报
回复
来了。。。模拟鼠标点击的
bob008 2008-10-07
  • 打赏
  • 举报
回复
等下啊,我给你翻个现成的出来

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
smallboy_5 2008-10-07
  • 打赏
  • 举报
回复
WM_LBUTTONDBLCLK事件也试验过了,还是有这个问题,你说的模拟鼠标是什么意思?
lyserver 2008-10-07
  • 打赏
  • 举报
回复
两种办法,一是查找键盘或鼠标事件,二是改变一下消息(不同的程序单击事件的消息不一样,有的可能只支持鼠标或只支持键盘,即使鼠标,还存在几个按键消息),如使用Const WM_LBUTTONDBLCLK。如果不行的话,则只能模拟鼠标了。
smallboy_5 2008-10-07
  • 打赏
  • 举报
回复
如何解决这个问题呢,我的EXE程序中也没有Automation代码的,就是一个简单的VB EXE程序。
lyserver 2008-10-07
  • 打赏
  • 举报
回复
上面有个手误,是部分而不是部件!
lyserver 2008-10-07
  • 打赏
  • 举报
回复
在部件Automation对象中如Execel,是不允许子类化的,也不允许直接使用SendMessage投递消息,这是因为在消息分派时(DispatchMessage)COM作了一些变动,从而导致部分应该执行的代码未执行或状态未正常改变,所以出现该类错误!
smallboy_5 2008-10-07
  • 打赏
  • 举报
回复
关于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

哪个高手知道什么原因?
smallboy_5 2008-10-07
  • 打赏
  • 举报
回复
谢谢楼上,加班继续等待中。。。。。。
slowgrace 2008-10-07
  • 打赏
  • 举报
回复
哦 对不起 我误解你的意思了。上面说的不对。如果是外部程序的窗体,你要按4楼的思路去解决,具体我也没做过。
slowgrace 2008-10-07
  • 打赏
  • 举报
回复
直接调用那个click事件过程就行

formA.cmdbutton1_click()
smallboy_5 2008-10-07
  • 打赏
  • 举报
回复
fvflove的思路考虑可行。
我对VB了解不深,查了一下发现FindWindowEx可以得到窗口的句柄,可是得不到Button的句柄
请再帮想一下。
dlpseeyou 2008-10-07
  • 打赏
  • 举报
回复
查查APIE有这样的函数吗
fvflove 2008-10-07
  • 打赏
  • 举报
回复
那就麻烦了.
代码好长,我就不写了.
给思路:

找到 button 的句柄.
API
FindWindowEx


发送一个鼠标点击的信息.
API
SendMessage
haxiang_3 2008-10-07
  • 打赏
  • 举报
回复
我没有很清楚的明白你的意思 我就说我理解的两个意思

第一: 在同一个工程下面的 那么你吧CLICK的访问属性 设置为PUBLIC的

第二: 如果你是想在你的程序中 调用别人的程序上的一个按钮点击的话,那么 你需要一个模拟点击,就是你在操作你的程序的时候点击你所想点击的程序,就需要一个窗口查看器,获得你要点击的控件的类名,然后进行API实现,呵呵,不过,如果人家已经屏蔽了的话,就有点困难了平. 祝你成功...
smallboy_5 2008-10-07
  • 打赏
  • 举报
回复
可能我没说明白,窗口是exe中显示出来的,想在我现在的程序中调用exe程序中Button的Click事件
fvflove 2008-10-07
  • 打赏
  • 举报
回复

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

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧