VB 向外部程序的自定义按钮发出点击事件

sihai163 2009-06-21 05:29:38
RT,有个软件里面有两个自定义按钮。
我想通过程序向其中一个按钮发出点击命令。

问题1,获取自定义按钮句柄。经过反复测试
获取普通按钮方法是
hBtn = FindWindowEx(hParent, 0, vbNullString, "确定")

但是自定按钮的标题是没有内容的,所以用以下方法获取
hwnd = FindWindowEx(hwnd, 0, "ThunderRT6UserControlDC", "")

这样子可以获取得到,不过两个自定义按钮要怎么区分?????

问题2,怎样能向该自定义按钮发出点击事件?
正常按钮是这样操作的
PostMessage hwnd, WM_LBUTTONDOWN, 1&, 0&
PostMessage hwnd, WM_LBUTTONUP, 1&, 0&

但是对自定义按钮无效。。。。。。。。。。。求助,十分感谢。
...全文
1481 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sihai163 2009-06-26
  • 打赏
  • 举报
回复
这样类似于鼠标模拟
但是,如果外部程序最小化或者以托盘方式最小化就没办法控制了...
zzyong00 2009-06-26
  • 打赏
  • 举报
回复
如果向按钮发点击消息,可以发送bm_click
嗷嗷叫的老马 2009-06-26
  • 打赏
  • 举报
回复
最小化后,一些消息循环为了省资源,根本就不处理界面消息了.

这种情况下还想响应,那你只有自己从内存中找到具体单击后调用的那个函数的入口点,使用线程插入的方式硬调了....
sihai163 2009-06-25
  • 打赏
  • 举报
回复
兄弟,非常感谢你抽空回答我的问题。不过还是不行,有没有其它办法?
嗷嗷叫的老马 2009-06-25
  • 打赏
  • 举报
回复
Private Declare Sub mouse_event Lib "user32.dll" ( _
ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As Long)

mouse_event &H6, x, y, 0, 0

x与y是按钮区域在屏幕上的绝对区域中的一点.

可以用GetWindowRect得到这个区域.
嗷嗷叫的老马 2009-06-25
  • 打赏
  • 举报
回复
Private 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

X与Y是要点击的位置,在HWND区域内.

如果你指定了你的按钮句柄,那就传10,10吧(按钮应该不会小于10x10大小吧?)
sihai163 2009-06-24
  • 打赏
  • 举报
回复
第一个问题己经解决
如果有多个自定义按钮,这样会获取第一个按钮的句柄
hwnd1 = FindWindowEx(hwnd, 0, "ThunderRT6UserControlDC", "")
这样就可以获取到第二个按钮
hwnd2 = FindWindowEx(hwnd, hwnd1, "ThunderRT6UserControlDC", "")

求助第二个问题,经过两天测试,还是没结果,希望高手帮忙!!!
贝隆 2009-06-22
  • 打赏
  • 举报
回复
帮顶

1,488

社区成员

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

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