激活 ActiveX 控件

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

方法一(入门篇,解决问题即可):
<!-- ActiveX.html -->
<html>
 <body leftmargin=0 topmargin=0 scroll=no>
   <script src="docwrite.js"></script>
 </body>
</html>

// docwrite.js
document.write('<object classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6">');
document.write('<param name="URL" value="example.wmv">');
document.write('<param name="autoStart" value="-1"></object>');


方法二(专业篇):
<!-- ActiveX.html -->
<html>
 <body>
   <div id="DivID">
     <script src="createElementExplicit.js"></script>
 </body>
</html>

// 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" ;


方法三(终极篇,适合批量更新):
<!-- ActiveX.html -->
<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 + '/>';
}


下面是MSDN的解决办法:

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

本主题包含以下部分。

*

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

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


了解控件激活

交互控件 是提供用户界面的 ActiveX 控件。当 Web 页使用 APPLETEMBEDOBJECT 元素加载某个 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 的自定义应用程序不会阻止由 APPLETEMBEDOBJECT 元素加载的交互式 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

-

 

转到原英文页面

Tags: 激活  ActiveX  

 

TrackBack:http://www.yaosansi.com/post/811.html

转载于:https://www.cnblogs.com/hdjjun/archive/2008/06/17/1223739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB GUI ActiveX控件是一种用于创建图形用户界面的工具,它可以与其他应用程序进行交互,如Microsoft Excel、Word等。使用ActiveX控件,用户可以在MATLAB GUI中嵌入其他应用程序的功能,从而实现更加丰富的功能和交互性。同时,MATLAB GUI ActiveX控件也可以用于创建自定义的控件,以满足特定的需求。 ### 回答2: MATLAB GUI与ActiveX控件是两个非常实用的工具,都可以实现非常多样化的功能和效果。MATLAB GUI能够方便地创建图形用户界面,使得程序的使用和交互更加人性化和简便;而ActiveX控件则可以实现更加高级的功能,如自定义的图表处理、数据提取等等。 在MATLAB GUI中,ActiveX控件常被用于实现一些特殊的功能。例如,在数据可视化方面,可以使用ActiveX控件创建精美的图表,并为其加入一些数据交互特效,实现更加人性化的数据展示。在各类图像处理中,也可以使用ActiveX控件来进行图像的显示和图像处理,提升图像处理的效率和质量。在数据分析中,ActiveX控件常被用于Excel交互操作,提高数据处理的便捷性和效率。 除此之外,MATLAB GUI和ActiveX还可以相互配合,实现更加强大的功能。例如,可以在MATLAB GUI中嵌入ActiveX控件,实现对外部软件的调用,扩展程序的功能。可以通过MATLAB GUI创建一个基础的图形用户界面,在其中嵌入ActiveX控件,实现更加高级的数据处理和展示。 总的来说,MATLAB GUI和ActiveX控件是两个非常实用的工具,特别是在一些高级数据处理和数据可视化方面,具有非常大的优势。同时也需要注意,使用这些控件要具备一定的编程基础和相关技能,在应用过程中需要进行适当的调试和优化。 ### 回答3: MATLAB GUI是一个用于创建交互式用户界面的平台,可帮助用户复合不同的组件,如按钮、菜单、文本等,以及数据可视化工具(图形工具箱)和外部控制器(如ActiveX)。 ActiveX控件是微软公司推出的一种用于Windows应用程序的可复用软件组件。ActiveX控件可以是一个单独的应用程序或活动文档,并且可以作为控件嵌入到其他应用程序中。MATLAB GUI提供了与ActiveX控件交互的功能,例如将Excel表格、Word文档、图形组件等嵌入到GUI中。 使用ActiveX控件可以增强用户界面的互动性、实现数据共享、提高数据的处理速度和精确度等。通过MATLAB GUI与ActiveX控件的结合,用户可以实现更为复杂的功能,例如实时数据连接、大数据处理、多文档编辑、多工具框架等。 在使用MATLAB GUI和ActiveX控件时需要注意的是: 1.需要调用ActiveX控件前,应先安装该控件,并指定正确的注册表。 2.控件的性能受计算机硬件的影响,建议使用较高配置的计算机进行操作。 3.操作时需要保持锁定状态(Locked),以保证系统的稳定性。 4.需要使用ActiveX的方法和属性时,应先了解控件的接口文档。 总之,MATLAB GUI和ActiveX控件的结合能够实现复杂的功能,提高交互性和可视化效果,为用户带来更好的使用体验。如果您在使用MATLAB GUI和ActiveX控件时遇到问题,可以查看MATLAB的官方文档或不同社区的网站获得支持和帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值