通过下面这个语句,使菜单弹出来了,然后查找弹出菜单的句柄(TApi),对其进行操作。但是现在问题是,执行了01句之后,操作系统不返回控制权,直到我手动点击菜单,那么这样后面的03、04就没有办法执行了。要怎么办呢?
01 SApi = SendMessage(CApi, BM_CLICK, 0, ByVal 0&)
02
03 TApi = FindWindowEx(0, 0, "#32768", "")
04 SApi = SendMessage(TApi, WM_COMMAND, 0, ByVal 0&)
01 SApi = SendMessage(CApi, BM_CLICK, 0, ByVal 0&)
02
03 TApi = FindWindowEx(0, 0, "#32768", "")
04 SApi = SendMessage(TApi, WM_COMMAND, 0, ByVal 0&)
解决方案 »
- VB问题
- 怎样把字符串转换成条形码
- 关于Byte转化成Jpg图像的问题(急!!!)
- 用mcisendstring做了个录音程序,可是录出来的结果avi文件用windows media playwr9.0却不能播放,不知道什么原因
- mci当中如何能得到所有MCI设备数量?以及如何指定设备播放?超多分数求解
- 弱弱地问:Windows API 函数在Visual Basic中和Visual C++下使用的区别
- 有没有这样的一个 TREEVIEW 控件??
- 在文件夹中查找cell中关键字为“char"的EXCE文件,对整个文件夹中的excel文件查找!
- 关于VB实现广播的问题,高手请指点,万分感谢!
- data控件能否实现“另存为”?
- VB读写Excel的问题。把数组数据赋值给excel的时候循环速度太慢,一秒大概填20个格,请教
- 请教:字符串的递归查找的问题?
而是菜单类名
不相信的可以自己试试:在窗口中自己建立一个弹出菜单。然后用GetCursorPos获得鼠标坐标(此时鼠标要指着弹出来的菜单),接着用WindowFromPoint获得鼠标下面的窗口,最后用GetClassName来获得类名,看是不是#32768楼主的代码是查找句柄,这样一般不会有返回
试试换查找菜单的代码看看
楼主的代码是查找句柄,这样一般不会有返回
试试换查找菜单的代码看看
==========
可以的,如果系统中当前只有一个菜单的话,用Api=FindWindowEx(0,0,"#32768","")是可以找到菜单的句柄的。我问题的主要目的是用SendMessage之后,程序会把管制权给WINDOWS;然而用PostMessage就不会了。
高16位代表通知消息、低16位代表控件ID
lParam代表控件句柄例如你点击了一个ID号为10、句柄为99999的组合框(ComboBox)的小箭头,那么在下拉列表显示出来后系统会发送消息:
SendMessage 窗口句柄, WM_COMMAND, (CBN_DROPDOWN * &H10000) Or 10, ByVal 99999&
当组合框收起下拉列表的时候,系统又会发送消息:
SendMessage 窗口句柄, WM_COMMAND, (CBN_DROPUP * &H10000) Or 10, Byval 99999&
(注:也可能用PostMessage,用SPY++看看就知道了)你的程序中wParam的值为0,是不是没有找到相对应的控件???
如果你要找的那个程序,是用VB做的话,那么VB的所有控件都默认没有ID的,也就是所有控件的ID都为0
如果是MFC或者Win32或者其他程序,一般都会有指定ID号的(连菜单也不例外)SendMessage(TApi, WM_COMMAND, 0, ByVal 0&)
如果对方的程序在处理WM_COMMAND的时候,需要用到参数wParam或者lParam,而你给它传递了0值,所以导致程序处理失败,没有返回~或者简单点,你用SPY++来查看你正常点击该菜单时候所发生的消息,然后自己加以修改成适合自己的!
以上纯属个人意见~顺便帮你顶顶让高手帮帮你~我还有个问题,这个程序是你自己做的还是其他程序??如果是自己做的就不用搞那么复杂了~~~~~