我在用ATL做一个BHO插件,现在可以自动填写页面,也可以自动触发网页的按钮事件,但有时网页会弹出一个对话框,需要点击“确认”或“取消”页面才能继续,怎么才能让程序自动点击页面弹出的对话框按钮呢?

解决方案 »

  1.   

    网页弹出的确认对话框,默认焦点一般是确认按钮,那么敲个回车键就相当于鼠标单击了。那么我想能不能通过IE实例的句柄获得这个确认对话框的句柄,然后给它发送一个回车键消息?这个确认对话框能不能直接使用GetActiveWindow函数获得呢?
      

  2.   

    如果是js的对话框,可以用自己写的js函数覆盖系统的window.confirm window.alert window.prompt三个函数。
    类似这样:
    function foo(..)
    {
      //do nothing
    }window.alert=foo;
      

  3.   

    并没有屏蔽,js调用这三个函数他其实也不知道你是点击的或者别的行为而触发的,他只是求这函数返回的结果而已,你重载这三个函数并返回正确结果即可,不需要弹出对话框而后再找对话框的handle而后再发消息,没有这个必要。
      

  4.   

    不好意思,这几天太忙一直没登上来看。谢谢eduyu!
    我用了另一种方法,当检测到网页弹出对话框时,用::GetFocus()获得对话框上的按钮句柄,然后::GetParent(x)获得按钮所在对话框句柄,使用::GetWindowText()获得对话框标题确认是“Windows Internet Explorer”后,使用EnumChildWindows(y, EnumChildProc,NULL)枚举对话框的内容,可以获得对话框上各个控件的句柄,然后可通过发送按钮消息SendMessage(z,BM_CLICK,0,0)或者::GetNextDlgTabItem(y,x,FALSE)后再SendMessage点击下一个按钮,就可以不留痕迹的自动处理掉对话框。获得对话框句柄也可以使用::GetActiveWindow();
      

  5.   

    搭车问一个问题:bho 如何获取页面中的Activex.可否屏蔽用户在页面中的ACtivex 点击右键呢?
      

  6.   

    你是怎么检测到网页弹出对话呀??我用了GetActiveWindow()得到的是网页的句柄,同时我用了DISPID_IHTMLELEMENT_ONCLICK事件是来获取来获取GetForgroundWindow还是得到网页的句柄,得不到对话框的句柄。现在问题的关键是如何捕捉到IE弹出对话框?并进一步来获取对话框中的内容。