+ -
当前位置:首页 → 问答吧 → sendmessage 和postmessage 为什么不能关闭迅雷的弹出窗口

sendmessage 和postmessage 为什么不能关闭迅雷的弹出窗口

时间:2011-08-12

来源:互联网

我想调用迅雷的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可不是个好方法啊!



作者: freemangod   发布时间: 2011-08-12

讯雷里面的控件不是窗口,所以你得不到

作者: Lactoferrin   发布时间: 2011-08-12

应该是你的bb有问题,不是窗口的真实句柄。

作者: Veron_04   发布时间: 2011-08-12

建议试一试这个API函数:
VB code

Private Declare Function GetForegroundWindow Lib "user32" () As Long


它可以读取置顶窗体的句柄,迅雷提示窗口应该都是置顶的,通过它可以获取其句柄
然后再实用PostMessage来关闭它

作者: Veron_04   发布时间: 2011-08-12

热门下载

更多