IE下自动激活 ActiveX 控件

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
http://www.118cy.net/help_1420.html
 
IE下自动激活 ActiveX 控件 网页编程 点击次数:849

用 户不能与 APPLET、EMBED 或 OBJECT 元素加载的 Microsoft ActiveX 控件直接交互。用户激活这些控件的用户界面后才可以与这些控件交互。本文介绍 Microsoft Internet Explorer 如何处理 ActiveX 控件,显示如何加载 ActiveX 控件才能激活它们的界面,还描述这种行为对辅助工具和宿主 WebBrowser 控件的应用程序的影响。

本主题包含以下部分。

本页内容
控件激活"> 了解控件激活
控件"> 外部加载交互控件
编程方式确定控件是否未激活"> 以编程方式确定控件是否未激活
 辅助影响
控件影响"> WebBrowser 控件影响
控件所阻止的 DHTML 事件"> 附录 A:未激活控件所阻止的 DHTML 事件

有关该更新所影响平台的其他信息,请参见Internet Explorer ActiveX 更新。

了解控件激活
交互控件 是提供用户界面的 ActiveX 控件。当 Web 页使用 APPLET、EMBED 或 OBJECT 元素加载某个 ActiveX 控件时,该控件的用户界面在用户激活它之前一直是阻止的。如果一个页面使用这些元素加载多个控件,则每个交互控件必须单独激活。

如果某个控件未激活,就会出现以下结果。

• 与用户交互相关的动态 HTML (DHTML) 事件(如 onblur 和 onclick)被阻止。附录 A 列出控件未激活时受阻的 DHTML 事件。
 
• 该控件不响应键盘或鼠标生成的窗口消息,如 WM_CLICK、WM_KEYPRESS 等。
 
• 覆盖窗口(创建于控件的 OLE 站点)防止键盘和鼠标消息到达未激活的控件。
 

创建了一个未激活控件后,Internet Explorer 使用不同技术防止键盘或鼠标窗口消息到达该控件。如果未激活控件是一个有窗口的控件(如 HTML Help 控件),Internet Explorer 使用 EnableWindow 函数禁用这个未激活控件的窗口。当用户激活一个有窗口的控件时,该函数激活禁用的窗口。如果未激活控件是一个无窗口控件(如 Office Web 组件),则该控件的容器会筛选键盘和鼠标消息。

如果某个控件未激活,它不响应用户输入,但执行与交互无关的操作。例如,如果您打开一个使用 Microsoft Windows 媒体播放器播放音乐文件的 Web 页,该页加载后才会播放音乐。只有该控件的用户界面激活后,您才能与 Windows 媒体播放器交互,如下图所示。


注 虽然未激活控件不响应任何直接的用户交互;但它们响应脚本命令。

要激活一个交互控件,可以单击该控件,也可以使用 Tab 键将焦点设置在该控件上,然后按 SPACEBAR 或 ENTER 键。从外部脚本加载的交互控件无需激活即可立即响应用户交互。

某些有窗口的控件使用 Windows API 函数(如 GetKeyState 和 GetCursorPos)确定键盘和鼠标的状态,然后响应函数结果。仅对于这些控件而言,先出现一个提示,然后才会在 Internet Explorer 中运行控件。要运行控件,用户需要先单击消息窗口中的按钮,然后页面才会加载。加载后,控件不需要激活。目前,以下控件具有该行为,但供应商正在继续研发 没有该行为的新控件。

• Virtools™Web Player from Virtools SA
 
• Macromedia Shockwave Player™from Adobe Systems Inc.
 
• QuickTime™from Apple Computer, Inc.
 

从外部脚本文件加载时,这些控件不显示提示。

下图显示提示对话框。


返回页首
外部加载交互控件
要创建加载交互控件(这些控件立即响应用户输入)的 Web 页,使用 Microsoft JScript 从外部脚本文件加载控件。您不能编写与主 HTML 页内联的脚本元素来从外部加载控件。如果脚本是以编程方式内联编写的(例如,用 writeln 函数),加载的控件就像由 HTML 文档本身加载的一样,需要激活。要确保控件在加载后是交互的,使用以下任一技术。

下面的示例使用 document.write 动态加载控件。

// HTML File
<html>
  <body leftmargin=0 topmargin=0 scroll=no>
    <script src="Embed.js"></script>
  </body>
</html>
// embed.js
document.write( <embed src="examplecontrol">)

外部脚本文件也可以修改某个元素的 outerHTML 属性来达到同样的效果,如下例所示。

// HTML File
<html>
  <body>
    <div>
      <script src="embedControlOuterHTML.js"></script>
    </div>
  </body>
</html>
// embedControlOuterHTML.js
embedControlLocation.outerHTML = <embed src="examplecontrol">;

下一示例使用 document.createElement 加载一个使用 OBJECT 元素的 ActiveX 控件。

重要 使用 createElement 向 Web 页加载 Object 元素或 Embed 元素时,请小心创建该元素,初始化其属性,将该元素添加到页面的 DOM,然后再创建要由该新元素加载的 ActiveX 控件。有关详细信息,请参阅 createElement 文档。

// HTML File
<html>
  <body>
    <div id="DivID">
      <script src="createElementExplicit.js"></SCRIPT> PRE html>< < body>>
// createElementExplicit.js
var myObject = document.createElement(object);
DivID.appendChild(myObject);
myObject.width = "200";
myObject.height = "100";
myObject.classid= "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6";
myObject.URL = "example.wmv";
myObject.uiMode = "none" ;

下一示例使用 innerHTML 和 JScript 函数加载 ActiveX 控件,同时指定参数值。

// HTML File
<html>
 <head>
   <script src="external_script.js" language="JScript"> </script>
 </head>
 <body>
   <div id="EXAMPLE_DIV_ID">
      This text will be replaced by the control
   </div>
   <script language="JScript">
     CreateControl( "EXAMPLE_DIV_ID",
                    "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6",
                    "EXAMPLE_OBJECT_ID", "600", "400", "example.wmv",
                    "-1")
   </script>
 </body>
</html>

// external_script.js
function CreateControl(DivID, CLSID, ObjectID,
                       WIDTH, HEIGHT, URL, AUTOSTART)
{
  var d = document.getElementById(DivID);
  d.innerHTML =
    <object classid= + CLSID + id= + ObjectID +
    width= + WIDTH + height= + HEIGHT +>
    <param name="URL" value= + URL + >
    <param name="autoStart" value= + AUTOSTART + />;
}

由于下一示例使用 writeln 函数将脚本插入原始的 HTML 文档,因此产生的控件需要激活。要加载一个无需激活的控件,请使用上述示例之一。

// HTML File
<html>
  <body>
    <div id="embedControlLocation">
      <script id="elementid" src="embedControl.js"></script>
    </div>
  </body>
</html>
// embedControl.js
document.writeln(<script>);
document.write(document.writeln(/);
document.write( <object classid =
                "clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6"
                width="100" height="100" />);
document.write(/););
document.writeln(</script>);

警告 如果在控制面板的“Internet 选项”的“高级”选项卡中不选“禁用脚本调试 (Internet Explorer)”选项,则使用这些技术创建的控件仍需激活。

返回页首
以编程方式确定控件是否未激活
您不能使用 JScript 函数或服务器端脚本来确定某个控件是否为激活。宿主 Web 浏览器控件的应用程序不能确定某个控件是否为激活。

控件可以通过 DISPID_AMBIENT_UIDEAD 环境属性确定激活状态,该属性通过 IDispatch::Invoke 调用。该属性通过 IOleControl::OnAmbientPropertyChange 进行更改时,会通知实现 IOleControl 接口的控件。

返回页首
辅助影响
当辅助工具遇到 ActiveX 控件时,可以使用对象的 IAccessible 接口获取有关该控件的信息。可以用 IAccessible::accDoDefaultAction 方法激活未激活的控件。

下表描述在未激活控件上调用 IAccessible 方法产生的结果。

方法 说明
IAccessible::accDoDefaultAction
 激活控件并在 MSAA 树内公开 ActiveX 控件或 Java Applet。
 
IAccessible::accHitTest
 返回 CHILDID_SELF
 
IAccessible::accLocation
 底层 ActiveX 控件或 Java Applet 的位置
 
IAccessible::accNavigate
 返回 E_NOTIMPL
 
IAccessible::accSelect
 返回 E_NOTIMPL
 
IAccessible::get_accChild
 返回 S_FALSE
 
IAccessible::get_accChildCount
 返回 0 和 S_OK
 
IAccessible::get_accDefaultAction
 返回“Select this control”
 
IAccessible::get_accDescription
 返回 E_NOTIMPL
 
IAccessible::get_accFocus
 返回 E_NOTIMPL
 
IAccessible::get_accHelp
 返回“This control is inactive.Select the control to activate and use it.”
 
IAccessible::get_accHelpTopic
 没有变化 — 返回 E_NOTIMPL
 
IAccessible::get_accKeyboardShortcut
 没有变化 — 委托该对象。如果没有对象,该方法返回 E_NOTIMPL。
 
IAccessible::get_accName
 返回“Inactive Control”
 
IAccessible::get_accParent
 没有变化 — 返回父链中最近的可访问的元素。
 
IAccessible::get_accRole
 返回 ROLE_SYSTEM_PUSHBUTTON
 
IAccessible::get_accSelection
 返回 E_NOTIMPL
 
IAccessible::get_accState
 返回对象的当前状态。该状态总是包括 STATE_SYSTEM_FOCUSABLE
 
IAccessible::get_accValue
 返回 E_NOTIMPL
 
IAccessible::put_accName
 返回 E_NOTIMPL
 
IAccessible::put_accValue
 返回 E_NOTIMPL
 

有关激活的控件或不需要激活的控件的信息,请参阅 Active Accessibility SDK。

注 辅助工具触发默认操作后应该刷新,这样才能正确显示 ActiveX 控件的数据及其子控件的数据(如果有)。

返回页首
WebBrowser 控件影响
默认情况下,宿主 WebBrowser Control 的自定义应用程序不会阻止由 APPLET、EMBED 或 OBJECT 元素加载的交互式 ActiveX 控件。未激活控件阻止仅应用于以下应用程序。

• Windows Explorer
 
• Internet Explorer
 
• MSN Explorer
 
• AOL®Explorer
 
• AOL®8.0
 
• AOL®9.0
 
• CompuServe 2000
 
• AIM®
 
• Maxthon Browser
 
• NetCaptor
 
• Browse3D
 
• Macromedia Dreamweaver
 
• Macromedia Contribute
 
• Netscape®8(将 Internet Explorer 用作呈现引擎时)
 

要与应用程序中 Internet Explorer 的行为匹配,将 DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE 标志添加到 DOCHOSTUIINFO 结构的 dwFlags 参数中,如下例所示。

HRESULT GetHostInfo(DOCHOSTUIINFO *pInfo)
{
   ...
    pInfo->cbSize = sizeof(DOCHOSTUIINFO);
    pInfo->dwFlags = { Other DOCHOSTUIFLAGs } |
      DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE; 
   ...
    return S_OK;
}

还可以通过将应用程序的进程名添加到以下注册表项来启用交互控件阻止。

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_ENABLE_ACTIVEX_INACTIVATE_MODE
process_name.exe=(DWORD) 0x00000001

注 因为用户可以修改注册表,所以 DOCHOSTUIINFO 标志是启用交互控件阻止的首选方法。

默认情况下,应用程序可以注册以并入 ActiveX 控件激活。有关详细信息,请咨询您的技术客户经理或与 Microsoft 的产品支持部门联系。

返回页首
附录 A:未激活控件所阻止的 DHTML 事件
下表列出 ActiveX 控件未激活时所阻止的 DHTML 事件。

onactivate
 ondragleave
 onmouseout
 
onbeforeactivate
 ondragover
 onmouseover
 
onbeforecopy
 ondragstart
 onmouseup
 
onbeforecut
 ondrop
 onmousewheel
 
onbeforedeactivate
 onfocus
 onmove
 
onbeforepaste
 onfocusin
 onmoveend
 
onblur
 onfocusout
 onmovestart
 
onclick
 onhelp
 onpage
 
oncontextmenu
 onkeydown
 onpaste
 
oncontrolselect
 onkeypress
 onresize
 
oncopy
 onkeyup
 onresizeend
 
oncut
 onlosecapture
 onresizestart
 
ondblclick
 onmousedown
 onscroll
 
ondeactivate
 onmouseenter
 onselectstart
 
ondragend
 onmouseleave
 -
 
ondragenter
 onmousemove
 - 

IE一键设置ActiveX控件、JAVA脚本、活动脚本 运行bat文件,对IE一键设置ActiveX控件、JAVA脚本、活动脚本。win7及以上版本,最好采用右键点击,选择以管理员身份运行bat文件。 立即下载

相关推荐

UART全功能测试指南:环路/DMA/RS485/硬件流控实战

UART(通用异步收发器)是嵌入式系统中最基础的串行通信接口,其核心原理基于起始位、数据位、校验位与停止位的异步帧结构,依赖精确的波特率时钟同步与采样重建机制。在工业与物联网场景中,UART不仅需保障基本通信可靠性,更需支持DMA卸载、RS485半双工自动方向控制、RTS/CTS硬件流控等进阶能力,以提升实时性、抗干扰性与系统资源效率。典型应用涵盖调试日志输出、传感器数据采集、Modbus RTU总线通信及固件空中升级。本指南聚焦UART外设测试实践,覆盖环路自检、DMA吞吐验证、RS485时序对齐、硬件流

weixin_42599908的博客 111

IE ActiveX 插件自动启用脚本

需要为了无专业计算机能力的人操作,直接打开bat脚本就可以直接运行 本篇参考了网上主要的3种写法,根据自身情况,加以融合,并添加若干注释,方便阅读。 格式:新建一个txt文档,然后改成.bat后缀就可以 主体思路为,通过更改注册表,来实现ActiveX 插件的一键启动 @echo off title ★ IE ActiveX 插件启用脚本 ★ set bl=2 ::要修改的注册表路径 set regpath=HKEY_CURRENT_USER\Software\Microsoft\...

qq_40932546的博客 1305

Qoder + ADB Supabase :5分钟GET超火AI手办生图APP

本文介绍如何利用Qoder、阿里云 ADB Supabase 和通义千问图像编辑模型,快速构建AI手办生图Flutter应用。无需传统后端,通过AI生成代码、BaaS服务与边缘函数调用,实现从原型到上线的敏捷开发,全流程轻量高效,助力Vibe Coding落地实践。

数据库技术 915

对没有标记为安全的activex控件进行初始化和脚本运行 设为启用_通过组合漏洞进行权限提升...

介绍这篇文章主要讲述了由NCC Group研究人员所发现的两个通过COM本地服务进行非法提权的漏洞。第一个漏洞CVE-2019-1405是COM服务中的一个逻辑错误,可让本地普通用户以LOCAL SERVICE身份执行任意命令。第二个漏洞CVE-2019-1322是一个简单的服务配置错误,可让本地SERVICE组中的任何用户重新配置以SYSTEM权限运行的服务(此漏洞也被其他研究人员发现)。当以上...

weixin_39828859的博客 1828

记录bat脚本启动IE11并启用ActiveX控件

业务需要,使用了Flash插件,为了实现IE启动时避免插件被禁用,全屏显示,启用相关ActiveX控件,需要编写bat脚本供程序调用初始化,记录如下 本机环境win10,使用IEIE11,知识点:IE浏览器对应的注册表修信息,bat文件编写及获取资源文件内容。 更改对应的注册表信息的bat文件:(bat文件如果需要输出中文,需使用ANSI编码) REM "inint regedit" ::第一步:初始化注册表信息,先修改允许活动内容在“我的电脑”的文件中运行 REG add "HKEY_CURRENT_U

weixin_44343658的博客 2341

自动激活你的ActiveX控件

<!--var uid=25571;var user="ranran";var type="468X60";var adsid=2300;var adsuser="qeshow24";var tbbg="ffffff";var tbbd="cccccc";var fclo="000000";// -->自从微软对IE6的ActiveX更新后,每次用IE打开带有ActiveX

501

开启所有activexInternet选项的批处理bat

方法(1) REM 添加信任站点ip reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range10" /v ":Range" /t REG_SZ /d 222.222.222.222 /f reg add "HKCU\Software\Microsoft\W

www.coderr.org 5314

[转]自动激活你的ActiveX控件

自从微软对IE6的ActiveX更新后,每次用IE打开带有ActiveX控件的页面时,必须要进行控件激活操作(点击相关控件),否则该控件将无法正常工作。如果在页面上使用ActiveX控件不多的话,每次多点一下也就算了,不过一旦要频繁操作或者控件很多,每次要做这个重复劳动时,客户肯定会疯掉了。MSDN提供了相应的解决办法,可以不需要手工激活,回到以前一样的操作。下面三种办法,关键是把传统页...

aptl84294的博客 114

IE浏览器flash控件激活方式介绍 去除虚框

微软因为一项专利侵权案,更改了IE浏览器中的ActiveX控件,只要Windows自动更新安装了微软的KB912945补丁后(或者安装IE7后),凡是一个页面内使用、或标签的活动内容都不会被自动激活,需要用户手动点击,因而flash控件也不能幸免。下图为腾讯首页的一个Flash,各大门户网站只有腾讯的Flash控件没有进行激活处理:目前只能通过修改网页来解决激活问题,微软官方给出的自动激活方法

1655

【转】自动激活 ActiveX 控件

自动激活 ActiveX 控件 2009-03-17 23:21 原文:http://hi.baidu.com/xiaozhang/blog/item/69a3a7862ae1553666096e0e.html 自从微软对IE6的ActiveX更新后,每次用IE打开带有ActiveX控件的页面时,必须要进行控件激活操作(点击相关控件),否则该控件将无法正常工作。如果在页面上使用ActiveX控...

weixin_30342209的博客 113

激活 ActiveX 控件

自从微软对IE6的ActiveX更新后,每次用IE打开带有ActiveX控件的页面时,必须要进行控件激活操作(点击相关控件),否则该控件将无法正常工作。如果在页面上使用ActiveX控件不多的话,每次多点一下也就算了,不过一旦要频繁操作或者控件很多,每次要做这个重复劳动时,客户肯定会疯掉了。MSDN提供了相应的解决办法,可以不需要手工激活,回到以前一样的操作。下面三种办法,关键是把传统页面和控...

weixin_33744141的博客 875

如何解决Flex发布的swf自动激活的问题

众所周知ActiveX控件需要自动激活方可使用,在编写ActiveX控件时只需要加入下面的代码即可。int CPlayerLIVE3_Ctrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) { // TODO: Add your message handler code here and/or call def

tmeteor的专栏 1318

LegacyUpdate:让老旧Windows系统重获安全更新的终极解决方案

LegacyUpdate是一款专为老旧Windows系统设计的实用工具,能够帮助运行Windows XP、Windows 7等已停止支持系统的用户重新获取安全更新,解决系统无法连接Windows Update服务的问题。无论是遇到错误代码80072EFE,还是系统检查更新时无限加载,LegacyUpdate都能自动识别并安装缺失的关键更新,让老旧电脑重获安全防护。 ## 🔧 老旧Windows

gitblog_00333的博客 344

插件学习笔记-2007-05-14

最近计划对插件方面进行深入的了解,首先是针对IE插件方面,就目前自己的情况和了解的资料来看,应该先对ActiveX,OLE,Com三个概念入手,MSDN应该是最好的去处,暂从下面开始: http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_activex_control_conta...

41

LegacyUpdate:让老旧Windows系统重获新生的终极解决方案

你是否还在使用Windows XP或Windows 7等老旧系统?是否经常遇到Windows Update无法连接、显示错误代码80072EFE,或者永远停留在检查更新界面?LegacyUpdate正是为解决这些问题而生的开源工具,它能让你的老旧Windows系统重新获得安全更新支持,恢复完整的Windows Update功能。 ## 为什么老旧Windows系统需要LegacyUpdate?

gitblog_01120的博客 516

使用JS代码把WEB页面的数据导入Excel,代码如下:

 script type="text/javascript">  function AutomateExcel() ...{    var oXL=new ActiveXObject("Excel.Application");       var oWB=oXL.Workbooks.Add();     oSheet=oWB.Worksheets.Add();         sel=do

quweiie的专栏 1883

关于IE非安全更新带来flash和ActivX不能激活的解决办法(zt)

最近在作网页设计的时候,无意间发现IE浏览器打开含有Flash的页面的时候,总会有 个粗粗的框子,而且对于还有脚本的Flash不能自动播放,当鼠标移动上去的时候,会出来一行提示,“单击以激活控件”,刚开始我还很纳闷,以为是什么 IE自带的加载项禁用了Flash,结果查了半天,没有发现任何异常插件。于是上Google一搜,结果出来了,原因在于我的机器安装了微软的一个新的 IE非安全更新KB...

dianlang1572的博客 221
上一篇: 在浏览器控件中启用自动完成功能
下一篇: 定制浏览器
skyremember
博客等级 码龄20年 203粉丝 484原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值