VB获取窗体上的按钮控件并单击示例
2011-06-17 13:10
417 查看
例一:自动点击计算器上的个按钮
Module1.bas:
程序代码
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_LBUTTONDOWN = &H201 '左键按下
Public Const WM_LBUTTONUP = &H202 '左键弹起
Public Const MK_LBUTTON = &H1
Public Const BM_CLICK = &HF5 '单击
form1代码:
程序代码
Private Sub Form_Load()
Dim calc, btn_1, btn2, btn_3 As Long
calc = FindWindow("SciCalc", vbNullString) '获取计算器句柄
'calc = FindWindowEx(0, 0, "SciCalc", vbNullString) '同上
btn_1 = FindWindowEx(calc, 0, "Button", "1") '获取按钮1句柄
btn_2 = FindWindowEx(calc, 0, "Button", "2") '获取按钮2句柄
btn_3 = FindWindowEx(calc, 0, "Button", "3") '获取按钮3句柄
PostMessage btn_1, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标在按钮1按下
PostMessage btn_1, WM_LBUTTONUP, 0, ByVal 0 '鼠标在按钮1弹起
PostMessage btn_2, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标在按钮2按下
PostMessage btn_2, WM_LBUTTONUP, 0, ByVal 0 '鼠标在按钮2弹起
PostMessage btn_3, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标在按钮3按下
PostMessage btn_3, WM_LBUTTONUP, 0, ByVal 0 '鼠标在按钮3弹起
'效果同上
'PostMessage btn_1, BM_CLICK, 0, 0 '单击按钮1
'PostMessage btn_2, BM_CLICK, 0, 0 '单击按钮2
'PostMessage btn_3, BM_CLICK, 0, 0 '单击按钮3
End Sub
例二:自动点击扫雷程序的第一个方块
Module1.bas:
程序代码
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const MK_LBUTTON = &H1
form1代码:
程序代码
Private Sub Form_Load()
Dim winmine As Long
Dim lp As Long
winmine = FindWindow("扫雷", vbNullString) '获取扫雷程序句柄
lp = 60 * 65536 + 15 'Y * 65536 + X
PostMessage winmine, WM_LBUTTONDOWN, MK_LBUTTON, ByVal lp
PostMessage winmine, WM_LBUTTONUP, MK_LBUTTON, ByVal lp
End Sub
分析说明
对于计算器程序,界面上的每个按钮都是一个控件,而扫雷程序,整个窗体就一个控件,无法单独获取到每个按钮控件,所以例一使用的是按钮句柄,而例二使用的是扫雷程序句柄,并且指定了坐标。这边就有个问题:如果例一也改为使用计算器句柄,并指定坐标,结果还会一样吗?测试结果表明:只有计算器窗体能响应鼠标消息,而按钮(子控件)无法响应鼠标消息,就不能激发按钮的点击事件,也就无法正常输入数字!
Module1.bas:
程序代码
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_LBUTTONDOWN = &H201 '左键按下
Public Const WM_LBUTTONUP = &H202 '左键弹起
Public Const MK_LBUTTON = &H1
Public Const BM_CLICK = &HF5 '单击
form1代码:
程序代码
Private Sub Form_Load()
Dim calc, btn_1, btn2, btn_3 As Long
calc = FindWindow("SciCalc", vbNullString) '获取计算器句柄
'calc = FindWindowEx(0, 0, "SciCalc", vbNullString) '同上
btn_1 = FindWindowEx(calc, 0, "Button", "1") '获取按钮1句柄
btn_2 = FindWindowEx(calc, 0, "Button", "2") '获取按钮2句柄
btn_3 = FindWindowEx(calc, 0, "Button", "3") '获取按钮3句柄
PostMessage btn_1, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标在按钮1按下
PostMessage btn_1, WM_LBUTTONUP, 0, ByVal 0 '鼠标在按钮1弹起
PostMessage btn_2, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标在按钮2按下
PostMessage btn_2, WM_LBUTTONUP, 0, ByVal 0 '鼠标在按钮2弹起
PostMessage btn_3, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标在按钮3按下
PostMessage btn_3, WM_LBUTTONUP, 0, ByVal 0 '鼠标在按钮3弹起
'效果同上
'PostMessage btn_1, BM_CLICK, 0, 0 '单击按钮1
'PostMessage btn_2, BM_CLICK, 0, 0 '单击按钮2
'PostMessage btn_3, BM_CLICK, 0, 0 '单击按钮3
End Sub
例二:自动点击扫雷程序的第一个方块
Module1.bas:
程序代码
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const MK_LBUTTON = &H1
form1代码:
程序代码
Private Sub Form_Load()
Dim winmine As Long
Dim lp As Long
winmine = FindWindow("扫雷", vbNullString) '获取扫雷程序句柄
lp = 60 * 65536 + 15 'Y * 65536 + X
PostMessage winmine, WM_LBUTTONDOWN, MK_LBUTTON, ByVal lp
PostMessage winmine, WM_LBUTTONUP, MK_LBUTTON, ByVal lp
End Sub
分析说明
对于计算器程序,界面上的每个按钮都是一个控件,而扫雷程序,整个窗体就一个控件,无法单独获取到每个按钮控件,所以例一使用的是按钮句柄,而例二使用的是扫雷程序句柄,并且指定了坐标。这边就有个问题:如果例一也改为使用计算器句柄,并指定坐标,结果还会一样吗?测试结果表明:只有计算器窗体能响应鼠标消息,而按钮(子控件)无法响应鼠标消息,就不能激发按钮的点击事件,也就无法正常输入数字!
相关文章推荐
- GridView控件模板列中的按钮单击时,在RowDataBound事件中获取该行行号
- 页面单击按钮弹出modaldialog然后调用ajax处理程序获取数据,给父级页面控件赋值
- 在窗体上放置一个标签、一个按钮、一个fontDialog控件。标签内容改为“烟台大学”。实现功能:1)程序运行时,单击打开字体对话框按钮,可选择字体,并以所选字体作为标签字体。
- 创建一个如下的窗体,并在窗体上放置colorDialog控件。实现功能:1)程序运行时,单击打开颜色对话框按钮,可选择颜色,并以所选颜色作为窗体背景色
- 获取或设置当用户按 Enter 键时所单击的窗体上的按钮。
- 在窗体上放置saveFileDialog、openFileDialog两个控件。实现功能:1)程序运行时,在文本框(注意文本框多行、带垂直滚动条)中输入汉字、字符等,单击保存按钮,即可将文本框中内容保
- 单击gridview控件外部的一个按钮,获取gridview中的一列数据,获得的数据插入到另一个表中
- C#源代码—在windows窗体中添加窗体控件,btnOK按钮的Click事件
- vb.net获取web验证码在winform中显示的简单示例
- android基本控件示例RadioButton单选按钮,一般和RadioGroup一起用(03)
- 本实例创建Swing窗体,单击窗体中的“写入文件”按钮实现写入功能,单击“读取文件”按钮实现从文件中读取信息显示在文本框中
- 建立一个文本文件in.txt,在其中输入若干个正整数,中间用空格分隔,然后保存起来;在窗体上添加一个命令按钮和一个标签框,当单击命令按钮时将in.txt文件中存放的所有的能被3整除的数的和显示在标签框
- windows编程 单击按钮改变窗体背景图片
- Qt 如何把一个按钮控件放在窗体的左上脚
- Android开发之开关按钮控件ToggleButton简单用法示例
- asp.net中有关gridview控件添加编辑按钮的示例(一)
- Repeater控件中点击按钮后获取某一行的数据
- 获取窗体上的所有控件
- 用委托的方法传递消息到窗体控件中: Visual Studio 2010 vb.net
- c# 多线程调用窗体上的控件 示例