紧急求助,非高手不能解决~~~
本人用VB作出一个小程序,当点击程序里的Command1时,程序会根据获得的按钮的句柄,对按钮实现点击功能。(备注:欲点击的按钮是桌面其他应用程序的句柄)具体代码如下:
Private Sub Command1_Click()
Dim bWnd As Long 'bWnd为桌面其他应用程序的按钮
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
SendMessage bWnd, WM_LBUTTONDOWN, 0, 0
SendMessage bWnd, WM_LBUTTONUP, 0, 0
End Sub
但是,在实际运行过程当中,该程序对获得得的其他应用程序的按钮只会处于一个选中的状态,不会实现点击的效果。
PS:后来把sendmessage改为postmessage,还有增加延时sleep,发送ENTER,等等,发现按钮还是处于一种选中状态~~
达不到点击的效果~~
希望得到高手的指点~~~在下不胜感激俄~~~
PS:非高手不能解决。。。。。 是不是应该发送 BM_CLICK?
Const BM_CLICK = &HF5 LS的,我调试过了,用BM_CLICK 好像效果也是一样~~5555555~~
这问题怎么这么棘手啊~~~ 不可能的
除非是你获得的句柄有问题
你是怎么获取句柄的?把代码发上来 哥们,我的QQ:164902896,加我下吧,我直接演示给你看啊~~
我是真的山穷水尽了~~没招了~~ 发代码上来吧,让大家都来看看 FindWindow、WindowFromPoint等。
此问题非API函数不能解决。。
LZ还是好好研究API吧!我刚刚学Vb是先学API,再学语法的(不建议你这样做) 我想楼主应该已经用FindWindow和FindwindowEx获得了按钮句柄,不过可能获得的句柄有问题,要不SendMessage不会有问题的
也不把源代码发上来看看 都帮不上忙 主要是思维太VC化了,说实话在VB里我也不知道怎么实现(抱歉[em02] )
不过提示一两句还是可以的,具体怎么做还得靠自己吧………… 应大家要求,本人把具体代码发布如下:
窗体代码:
Private Sub Command1_Click()
Dim bWnd As Long
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
bWnd = Val(Text1.Text) 'bWnd为要操作的按钮句柄,由Text1.Text得到
SendMessage bWnd, WM_LBUTTONDOWN, 0, 0&
SendMessage bWnd, WM_LBUTTONUP, 1, 0&
End Sub
模块:
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
说明:按钮句柄的获得,本人是通过一个工具直接获得的(获得的句柄绝对正确,本人发送过ENTER做实验,确实可以用,但不知道为什么发送按下跟弹开的键,按钮只是处于一种选中的状态,不会起到点击的效果,很是奇怪),一般获得句柄确实是要调用到API函数的FindWindow,本人学VB没多久,具体的不懂,所以只能利用一个小工具,直接获取句柄. 对了,我新建了个群方便大家随时交流,欢迎加入,群号:40901090 注明:编程论坛 BM_CLICK,绝对正确,肯定是句柄的问题
SPY++获取的句柄是16进制,要在句柄前加&H,我用API_Bible获取的句柄是十进制,可以直接用
学着用findwindow和findwindowex吧,就这两个函数而已,学习API推荐你下载API_Bible 三断笛 我获取的按钮句柄是十进制的,按钮句柄绝对正确~
因为我有做过类似发送ENTER的实验,是可以正确响应的。
笛兄,你QQ多少,方便加下吗?我的是289441397 对了,电脑配置太高,会不会引起执行错误呢>?
我电脑配置:cpu:酷睿2双核E4500 内存 3G
不知道这个会不会有影响? 兼容的吧?不会出现错误的,一个小小的VB程序都出错,那微软就不要混了
页:
[1]
