求vb获取按钮句柄实现点击效果

y564642865 2010-08-13 10:24:34
获取的是另外窗体不是自己写的,如果目标是系统自带的“计算器”,我下面的这段代码是可以实现的,但是对于一些却实现不了。请高手帮我看一下,是不是需要改哪里或者有别的更好更通用全面点的代码。请发代码,谢谢!

tWnd1 = FindWindow(vbNullString, "窗口句柄")
If tWnd1 <> 0 Then
tWnd2 = FindWindowEx(tWnd1, 0, vbNullString, "按钮句柄")

'程序上面可以运行,到这里后就在下面的判断没办法实现,也就是说句柄是获取到了,那个“按钮句柄”也有可能在获取不到,导致下面不能实现判断。但是没办法实现点击效果,同样的方法在系统的计算器却看实现,控制自己编译的别的vb程序中是按钮也可以实现

If tWnd2 <> 0 Then
SendMessage tWnd2, BM_CLICK, 0&, 0& '点击
End If
Else
tWnd2 = 0
End If
...全文
1030 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaboyzyq 2010-08-16
  • 打赏
  • 举报
回复 2
以下以一個游戲修改器做測試成功。(計算機器也測試成功)

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
'鼠标按下
Const WM_LBUTTONDOWN = &H201
'鼠标弹出
Const WM_LBUTTONUP = &H202
'鼠标双击
Const WM_COMMAND = &H203

Private Sub Command1_Click()
Dim tWnd1 As Long, tWnd2 As Long

tWnd1 = FindWindow(vbNullString, "極品飛車全民公敵中文修改器 v2.45")
If tWnd1 <> 0 Then
tWnd2 = FindWindowEx(tWnd1, 0, vbNullString, "執行極品飛車全民公敵遊戲")

If tWnd2 <> 0 Then
SendMessage tWnd2, WM_LBUTTONDOWN, 0&, 0&
SendMessage tWnd2, WM_LBUTTONUP, 0&, 0&

End If
Else
tWnd2 = 0
End If
End Sub

y564642865 2010-08-16
  • 打赏
  • 举报
回复
感谢猴哥,方法可行。
这两天我也在想我的代码哪里不行,最后总结验证了,问题是出在等级跨越,获取窗体句柄后就直接搜索按钮句柄,其实中间还要再附别的句柄参数。
y564642865 2010-08-14
  • 打赏
  • 举报
回复
别让帖子沉下去啊,各位真的没办法了吗?还是太简单不愿回复,拜托了,谢谢!
y564642865 2010-08-13
  • 打赏
  • 举报
回复
各位朋友帮我看看啊,这个问题困扰我很久了。
y564642865 2010-08-13
  • 打赏
  • 举报
回复
没有朋友帮我看下吗
y564642865 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asftrhgjhkjlkttttttt 的回复:]
"自带的“计算器”,我下面的这段代码是可以实现的,但是对于一些却实现不了"

哪些不能实现?如果那个控件不是按钮,类似标签的控件,是没有句柄的
[/Quote]

测试了一下,好像只有vb写的程序才可以控制,那是个普通的窗体按钮,用工具可以获取到句柄的。所以应该是我的代码需要带什么函数
孤独剑_LPZ 2010-08-13
  • 打赏
  • 举报
回复
"自带的“计算器”,我下面的这段代码是可以实现的,但是对于一些却实现不了"

哪些不能实现?如果那个控件不是按钮,类似标签的控件,是没有句柄的
楼主辛苦开发的源码,0分放送。亲们只要评价五分就是对我的努力付出的最大回报! 此版本比v1.7的多增加了几个函数和方法,同时也修正了一些bug。 vb封装的一个控制窗口操作的类,使用非常简单!时刻更新。 clsWindow是VB6环境下使用的一个操作外部程序窗口的类,比如得到窗口句柄,得到窗口里某个文本框的内容。非常方便,使用它可以让您脱身于一堆api函数,功能强大使用简单! 这个类楼主很早就开始封装了,原本打算做成类似DOM对象那样,通过一堆getElmentByXXX等方法实现对桌面程序下各个窗口以及里面各个控件对象的自由访问,但是具体要做的工作太多,目前只实现了一部分,期待大家一起加入更新维护。 目前该类封装了绝大部分对windows窗口的常用操作,例如:获取窗口句柄,设置窗口为活动窗口,设置窗口内文本框内容,点击窗口内的某些按钮等。 这个类现在还在一直不断地扩充,功能已经很强大很广泛,使用它可以轻而易举地设置窗口标题栏文字,移动窗体等等。以前要实现这些操作常常需要一大堆api函数,现在只需要一点点代码就可以了,完全让您脱身于api函数的海洋。当然需要您需要研究每个方法实现原理的话可以看一看源代码。 使用范例: 1)关闭腾讯新闻窗口“腾讯网迷你版”。 Dim window As New clsWindow If window.GetWindowHwndByTitle("腾讯网迷你版") > 0 Then window.CloseWindow '关闭窗口 End If 以上是不是很简洁呢? 2)获取某个打开的记事本里面的内容。假设记事本标题为“测试.txt - 记事本”,通过SPY等工具查看得知记事本的文本框类名为:Edit,那么我们编写程序如下: Dim window As New clsWindow If window.GetWindowHwndByTitle("测试.txt - 记事本") > 0 Then MsgBox window.GetElementTextByClassName("Edit") End If 这个看起来也很简单,方法自由还可以使用正则匹配,可以写成下面这样: Dim window As New clsWindow If window.GetWindowHwndByTitleRegExp("测试\.txt.*?") > 0 Then MsgBox window.GetElementTextByClassName("Edi", , True)'第三个参数表示是否使用正则,默认为false End If 更多演示案例: 演示程序一(关闭包含“扫雷、蜘蛛纸牌”等系统自带游戏的窗口): http://files.cnblogs.com/sysdzw/clsWindow1.7_demo1.rar 演示程序二(调用系统计算器,点击里面的按钮进行计算): http://files.cnblogs.com/sysdzw/clsWindow1.7_demo2.rar 演示程序三(激活移动外部程序窗口): http://files.cnblogs.com/sysdzw/clsWindow1.7_demo3.rar 演示程序四(调用系统计算器,花样移动出现,效果很好): http://files.cnblogs.com/sysdzw/clsWindow1.7_demo4.rar clsWindow类最新版下载请关注博客: http://blog.csdn.net/sysdzw/article/details/9083313 '=================================================================================== '描 述:一个操作windows窗口的类,可对窗口进行很多常用的操作(类名为clsWindow) '使用范例:Dim window As New clsWindow ' window.GetWindowHwndByTitle "计算器" ' window.closeWindow '编 程:sysdzw 原创开发,如果有需要对模块扩充或更新的话请邮箱发我一份,共同维护 '发布日期:2013/06/01 '博 客:http://hi.baidu.com/sysdzw ' http://blog.csdn.net/sysdzw 'Email :sysdzw@163.com 'QQ :171977759 '版 本:V1.0 初版 2012/12/03 ' V1.1 修正了几个正则相关的函数,调整了部分类结构 2013/05/28 ' V1.2 增加属性Caption,可以获取或设置当前标题栏 2013/05/29 ' V1.3 增加了方法Focus,可以激活当前窗口 2013/06/01 ' 增加了方法Left,Top,Width,Height,Move,处理窗口位置等 ' V1.4 增加了窗口位置调整的几个函数 2013/06/04 ' 增加了得到应用程序路径的函数AppName ' 增加了得到应用程序启动参数的函数AppCommandLine ' V1.5 增加了窗口最大最小化,隐藏显示正常的几个函数 2013/06/06 ' 增加了获取控件相关函数是否使用正则的参数UseRegExp默认F ' V1.6 将Left,Top函数改为属性,可获得可设置 2013/06/10 ' V1.7 增加了CloseApp函数,可以结束进程 2013/06/13 ' 修正了部分跟正则匹配相关的函数 ' 增加函数:GetElementTextByText ' 增加函数:GetElementHwndByText ' V1.8 增加GetWindowHwndByClassName函数 2013/06/26 ' 增加GetWindowHwndByClassNameEx函数 ' 增加GetWindowHwndByAppName函数 ' 增加私有变量hWnd_ ' 增加属性hWnd,可设置,单设置时候会检查,非法则设置为0 ' 更新GetWindowHwndByTitleEx函数,使之可以选择性支持正则 ' 删除GetWindowHwndByTitleRegExp函数,合并到上面函数 ' 增加SetFocus函数,调用Focus实现,为了是兼容VB习惯 ' 扩了ProcessID、AppPath、AppName、AppCommandLine三个函数,可带参数 ' 网友wwb(wwbing@gmail.com)提供了一些函数和方法属性: ' CheckWindow, Load, WindowState, Visible, hDC, ZOrder ' AlphaBlend, Enabled, Refresh, TransparentColor ' 部分采纳网友意见,将句柄变量改为hWnd_,但是hWnd作为公共属性 '===================================================================================

7,763

社区成员

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

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