使用CWebBrowser2控件能否通过设置其属性来达到让其在后台响应模拟按键消息的目的?我做了一个用其他设备(游戏手柄之类的)模拟键盘消息,操作网页内容的小程序(VC6)。网页内容采用CWebBrowser2控件显示。由于考虑采用双显示器系统(即我的系统不影响键盘、鼠标在主显示器范围内的操作),需要向没有焦点的CWebBrowser2发送键盘按键消息(具体是发到其Internet Explorer_Server类子窗口)。然而CWebBrowser2在收到按键消息时似乎对本身是否为焦点窗口做了检查,只有在有焦点时才做出响应;无焦点时并没将消息转交给页面,而是直接丢掉了。同样的操作,对于IE浏览器(或者其他基于Internet Explorer_Server类的浏览器,比如TheWorld、Maxthon等),向其Internet Explorer_Server发送按键消息则不受有无焦点影响,网页均能正常做出响应。使用CWebBrowser2控件能否通过设置其属性来达到让其在后台响应模拟按键消息的目的?
请各位不吝赐教。

解决方案 »

  1.   

    通过DHTML访问吧,不要求焦点。
    搜索IHTMLDocument
      

  2.   


    感谢关注!
    我看了一心DHTML,找到了以下信息:http://baike.baidu.com/view/8389.htm
    看起来DHTML似乎不能解决我的问题。你提到的IHTMLDocument我搜索了一下,似乎是用于针对网页内容的分析处理,由于根本没有这方面的经验,暂时还不明所以。
      期待深入一点的帮助,谢谢!
    dhtml
      首先我们看一看微软中国站点中的一个重要界面特性——当浏览者将鼠标指针移动到页面导航条上时,会动态地弹出一个菜单,在该菜单中移动鼠标,所指向的菜单项变为红色显示;如果将鼠标指针移出菜单所在范围,则菜单自动隐藏:如果将鼠标指针移动到导航条上另外一个区域,则会弹出另外一个菜单.这种效果非常类似于Windows应用程序的特性,即通过图形化的界面为用户提供尽可能多的功能。实际上,采用这种方式可以使同一个页面上包含更多的信息,对于微软中国这样庞大的站点来说十分有用(实际上,microsoft.com也是采用这种界面)。
      要实现这种效果,单纯依靠HTML和JavaScript已经无法实现,必须采用新的技术——这就是动态HTML。所谓动态HTML(Dynamic HTML,简称DHTML),其实并不是一门新的语言,它只是HTML、CSS和客户端脚本的一种集成。
      DHTML建立在原有技术的基础上,可分为三个方面:
      一是HTML(XHTML),也就是页面中的各种页面元素对象,它们是被动态操纵的内容; 
      二是CSS,CSS属性也是动态操纵的内容,从而获得动态的格式效果; 
      三是客户端脚本(例如JavaScript),它实际操纵Web页上的HTML和CSS。 
      使用DHTML技术,可使网页设计者创建出能够与用户交互并包含动态内容的页面。实际上,DHTML使网页设计者可以动态操纵网页上的所有元素——甚至是在这些页面被装载以后。利用DHTML,网页设计者可以动态地隐藏或显示内容、修改样式定义、激活元素以及为元素定位。DHTML还可使网页设计者在网页上显示外部信息,方法是将元素捆绑到外部数据源(如文件和数据库)上。所有这些功能均可用浏览器完成而无需请求Web服务器,同时也无需重新装载网页。这是因为一切功能都包含在HTML文件中,随着对网页的请求而一次性下载到浏览器端。
      可见,DHTML技术是一种非常实用的网页设计技术。实际上,DHTML早已广泛地应用到了各类大大小小的网站中,成为高水平网页必不可少的组成部分。 
      DHTML就是当网页从WEB服务器下载后无须再经过服务器的处理,而在浏览器中直接动态地更新网页的内容、排版样式、动画。比如,当鼠标移至文章段落中,段落能够变成蓝色,或者当你点击一个超链后会自动生成一个下拉式的子超链目录。这就是 Dynamic HTML(动态HTML),它是近年来网络发展进程中最具实用性的创新之一。它是一种通过各种技术的综合发展而得以实现的概念,这些技术包括Java Script , VB0Script, Document Object Model (文件目标模块),Layers和Cascading Style Sheets ( CSS样式表)等。
      

  3.   


    谢谢老大关注。老大的意思是我在代码里要对IE控件进行“激活”?如何“激活”?或者是指控件一定要被激活成焦点窗口才能处理按键消息?要是这样我只能放弃控件,而使用CHtmlView了。另外,CHtmlView应用时似乎可以指定窗口类注册名称,而默认注册类名就是Internet Explorer_Server,那些可以后台响应按键消息的浏览器有可能使用的不是CWebBrowser2控件,而是用了CHtmlView或者其他有类似特性的类并把类名注册成Internet Explorer_Server,因此spy++区别不出。
      

  4.   

    用CWnd::CreateControl+CLSID_WebBrowser看看