读书人

sendmessage 和postmessage 为什么不能

发布时间: 2012-03-03 15:33:02 作者: rapoo

sendmessage 和postmessage 为什么不能关闭迅雷的弹出窗口
我想调用迅雷的api从网络上批量下载一些东西,当调用执行以下代码时,会再现以下窗口

VB code
Set ThunderAgent = CreateObject("ThunderAgent.Agent")ThunderAgent.AddTask "http://files.cnblogs.com/yuanbao/PwrEasy06Crack.rar", , , , , , 0

(不要告诉我,通过参数设置为静默执行模式,在早期版本是可以的,但是新的版本必须要弹出以下窗口,点击一下“立即下载”的按钮才可以,毕竟人家是要赚广告费的嘛)。




这个窗口可以获取句柄,但是“立即下载”按钮用根本获取不到句柄,于是我用sendkeys "{enter}",true,发送了回车键,但是这种方法,一旦在机子上做其它事情,窗口失去焦点,就失败了。
所以暂时用以下代码搞定。
VB code
    AppActivate "newtask2"    SendKeys "{Enter}", True

但是又出现了一个问题,有的时候有重复下载的任务,就会出现以下窗口。


现在判断如果出现这个窗口,就要关闭这个窗口,以添加新的任务,继续下载。如果用findwindow 获取上图的窗口句柄,(假如获取的句柄名称为bb),用以下三种方法发送按键esc消息,返回值为0,都不成功。

方法一:
VB code
      PostMessage bb, WM_KEYDOWN, VK_ESC, &H10001 ' 模拟按下 Esc 键    PostMessage bb, WM_KEYUP, VK_ESC, &HC0010001    ' 模拟抬起 Esc 键      


方法二:
VB code
      PostMessage bb, WM_close, 0&, 0&


方法三:
VB code
      sendMessage bb, WM_close, 0&, 0&



这个问题我真是百思不得其解啊!而且以上两图窗口的句柄都可获得,但是窗口中的子对象用 GetWindow(bb, GW_CHILD)这个函数,却没有一个可以获得句柄。
大家快来帮助我解决啊!困扰我几天啦!sendkeys可不是个好方法啊!





[解决办法]
讯雷里面的控件不是窗口,所以你得不到
[解决办法]
应该是你的bb有问题,不是窗口的真实句柄。
[解决办法]
建议试一试这个API函数:
VB code
Private Declare Function GetForegroundWindow Lib "user32" () As Long
[解决办法]
探讨
引用:
讯雷里面的控件不是窗口,所以你得不到


这个完全有可能,但是,对其父窗口发送wm_close之类的消息,应该是要响应的。

读书人网 >VB

热点推荐