swt java 内嵌ActiveX控件

这里用的是SWT/JFace开发application中SWT自带的org.eclipse.swt.ole.win32 包可以支持内嵌OLE和ActiveX。

具体用法如下:

//创建一个OleFrame做为OLE(或ActiveX)的框架

OleFrame oleFrame = new OleFrame(this, SWT.NONE);

//创建ActiveX的容器,其中的classID是ActiveX的classid,在注册表中可以找到

OleControlSite oleControl = new OleControlSite(oleFrame, SWT.NONE, “classID”);

//OleAutomation类用来执行ActiveX中的方法

OleAutomation oleAutomation = new OleAutomation(oleControl);

//将ActiveX显示在application中

oleControl.doVerb(OLE.OLEIVERB_SHOW);

调用AcitveX中方法的具体过程:

1、不带参数的方法调用

//获取Method Name的ID,Method Name为ActiveX中具体的方法名

int[] regspid = oleAutomation.getIDsOfNames(new String[] { "Method
Name" });

int dispIdMember = regspid[0];

//方法调用

oleAutomation.invoke(dispIdMember);

2、带参数的方法调用

//获取Method Name的ID,Method Name为ActiveX中具体的方法名

int[] regspid = oleAutomation.getIDsOfNames(new String[] { "Method
Name" });

int dispIdMember = regspid[0];

//设置方法的具体参数。Variant数组的长度为Method
Name方法参数的个数

//假设有四个参数

Variant[] rgvarg = new Variant[4];

rgvarg[0] = new Variant(fileID);

rgvarg[1] = new Variant(itdsURL);

rgvarg[2] = new Variant(idType);

rgvarg[3] = new Variant(reportURL);

//方法调用

oleAutomation.invoke(dispIdMember, rgvarg);

调用OLE Exemple:Java程序内嵌Word应用程序

package test.swt;

import java.io.File;

import org.eclipse.swt.SWT;

import org.eclipse.swt.graphics.Point;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.ole.win32.OLE;

import org.eclipse.swt.ole.win32.OleClientSite;

import org.eclipse.swt.ole.win32.OleFrame;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Composite;

public class ActiveXTest

{

private Shell sShell = null;

private Button button = null;

private OleClientSite clientSite;

public static void main(String[] args)

{

Display display =
Display.getDefault();

ActiveXTest thisClass = new ActiveXTest();

thisClass.createSShell();

thisClass.sShell.open();

while (!thisClass.sShell.isDisposed())

{

if (!display.readAndDispatch())

display.sleep();

}

display.dispose();

}

/**

* This method initializes sShell

*/

private void createSShell()

{

GridData gridData = new GridData();

gridData.horizontalSpan = 2;

GridLayout gridLayout = new GridLayout();

gridLayout.numColumns = 3;

sShell = new Shell();

sShell.setText("Shell");

sShell.setLayout(gridLayout);

sShell.setSize(new Point(800, 600));

OleFrame frame = new OleFrame(sShell, SWT.NONE);

button = new Button(sShell, SWT.NONE);

button.setLayoutData(gridData);

button.setText("Save");

button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {

public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)

{

clientSite.save(new File("d:/test.docx"),true);

}

});

frame.setSize(800,600);

clientSite = new OleClientSite(frame, SWT.NONE,"Word.Document.8");

clientSite.setSize(400,400);

clientSite.doVerb(OLE.OLEIVERB_SHOW);

}

}

SWT调用ActiveX简单总结

public class SWT_ActivexUtil {

private OleFrame _frame;

private OleControlSite _site;

private OleAutomation _auto;

SWT_ActivexUtil(String activexId, OleControlSite site){

if(site == null){

Shell shell = new Shell();

_frame = new OleFrame(shell, SWT.NONE);

_site = new OleControlSite(_frame, SWT.NONE, activexId);

_auto = new OleAutomation(_site);

}else{

_site = site;

_auto = new OleAutomation(site);;

}

}

public int getID(String name){

try {

int[] ids = _auto.getIDsOfNames(new String[]{name});

if(ids.length>=0)

return ids[0];

} catch (RuntimeException e) {

e.printStackTrace();

}

return -1;

}

public Variant[] createVariants(String[] paras){

Variant[] vr = new Variant[paras.length];

for(int i=0;i<paras.length;i++){

vr[i] = new Variant(paras[i]);

}

return vr;

}

public Variant getProperty(String prop){

int propId = getID(prop);

Variant v = null;

try {

v = _auto.getProperty(propId);

} catch (Exception e) {

e.printStackTrace();

}

return v;

}

public void setProperty(String name, String... params){

int propId = getID(name);

if(propId < 0)

return;

if(params.length==1)

_auto.setProperty(propId, new Variant(params[0]));

else{

Variant[] vs = new Variant[params.length];

int i=0;

for(String param:params){

vs[i] = new Variant(param);

i++;

}

_auto.setProperty(propId, vs);

}

}

public void setProperty(String name, Variant... params){

int propId = getID(name);

if(propId < 0)

return;

_auto.setProperty(propId, params);

}

public Variant execute(String methodName, Variant... params){

int mid = getID(methodName);

if(mid<0)

return null;

Variant rtnv;

if(params == null)

rtnv = _auto.invoke(mid);

else

rtnv = _auto.invoke(mid, params);

return rtnv;

}

public Variant execute(String methodName){

int mid = getID(methodName);

if(mid<0)

return null;

Variant rtnv = _auto.invoke(mid);
         return rtnv;

}

public void addEventListener(int eventID, OleListener listener){
            _site.addEventListener(eventID, listener);

}

public void removeEventListener(int eventID, OleListener listener){
           _site.removeEventListener(eventID, listener);

}

}

原文地址:https://www.cnblogs.com/happyhuangjinjin/p/8215262.html

时间: 2024-12-10 00:57:40

swt java 内嵌ActiveX控件的相关文章

转载 [WPF][C#]在WPF中内嵌WindowsForm控件-使用WindowsFormsControlLibrary

[WPF][C#]在WPF中内嵌WindowsForm控件-使用WindowsFormsControlLibrary 在[WPF][C#]在WPF中内嵌WindowsForm控件一文中为各位介绍了直接在WPF中使用XAML来嵌入Windows Form控件的作法,不过不是每个人都喜欢写XAML,而且有时候会需要把已经存在的Windows Form应用程序嵌入到WPF中,所以这次就来跟大家介绍怎么使用参考dll档的方式,把dll中的Windows Form加到WPF中. 都说了要使用Windows

在WPF中内嵌WindowsForm控件-使用WindowsFormsControlLibrary

原来有一个WINFORM项目的功能模块希望集成到新的WPF项目中,怎样集成才最简单? 思路:将原来的WINFORM项目类型改为WindowsFormsControlLibrary类型就OK了. 步骤: 1.所以我们就直接建立一个WindowsFormsControlLibrary项目吧!接着我在该项目中新增Windows Form,为Form1.也就是将原来的项目类型改造为WindowsFormsControlLibrary项目. 2新建Wpf项目 (1).添加两个引用:WindowsForms

Microsoft Windows Messenger ActiveX控件远程代码执行漏洞(MS11-027)

漏洞描述 此次扫描检测到目标主机尚未安装MS11-027/KB2508272漏洞相应的HotFix,也未安装可以修正该漏洞的Service Pack,这意味着目标主机可能存在MS11-027/KB2508272漏洞. Microsoft Windows是微软发布的非常流行的操作系统. Microsoft Windows Messenger ActiveX控件在实现上存在远程代码执行漏洞,远程攻击者可利用此漏洞在使用ActiveX应用程序中执行任意脚本代码. Microsoft Internet

ActiveX控件是什么?

一.ActiveX的由来 ActiveX最初只不过是一个商标名称而已,它所涵盖的技术并不是各自孤立的,其中多数都与Internet和Web有一定的关联.更重要的是,ActiveX的整体技术是由Microsoft的COM(Component Object Model,组件对象模型)构筑的.但不要误认为ActiveX是定义了所有包含基于COM的技术.COM与Microsoft Office和Windows以及Microsoft现在所做的一切都有关联,但显然这些产品并不是ActiveX家族中的成员.

常用的Activex 控件

1. Flash Player  ActiveX Control 6.0.47.0 与FLASH 6.0配套的浏览器端动画播放插件                  download.pchome.net/development/activex/551.html 2. ACE Mega Codec Pack Professional 6.03 目前互联网上最齐全的多媒体文件播放插件CoDecS.ActiveXFilterS和其他应用程序(基于                  www.onlin

ActiveX控件(ATL篇)

目录 第1章 VC++6.0创建    2 1.1 目标    2 1.2 创建项目    2 1.3 增加COM类    4 1.4 属性    7 1.5 事件    8 1.6 实现连接点    9 1.7 编码    11 1.7.1 增加成员变量    11 1.7.2 初始化成员变量    11 1.7.3 完成属性赋值代码    11 1.7.4 完成控件绘制代码    11 1.7.5 响应鼠标左键按下消息    13 1.7.6 修改DllUnregisterServer   

ActiveX控件(MFC篇)

目录 第1章 VC++6.0创建控件    1 1.1 目标    1 1.1.1 方法    1 1.1.2 属性    1 1.1.3 事件    1 1.2 创建项目    2 1.3 项目结构    6 1.3.1 COM接口    6 1.3.2 COM类    7 1.3.3 属性页    7 1.3.4 应用程序类    8 1.3.5 注册与注销    8 1.4 方法    9 1.4.1 增加    9 1.4.2 删除    11 1.5 属性    12 1.5.1 Te

ActiveX控件

什么是ActiveX控件:一个进程内服务器,支持多种的COM接口.(可以理解为,一个COM接口是一个纯抽象基类,你实现了它,并且它支持自注册,就是一个ActiveX控件了)可以把ActiveX控件看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行. 容器应用程序是可以嵌入或链接对象的应用程序. 服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序. 我们常用的word就是一个容器应用程序,例如,若在word文档中可以嵌入或链接一个Excel表格

IE将开始屏蔽旧版ActiveX控件

?? 根据用户的反馈情况,我们决定等到2014年9月9日再开始屏蔽那些旧版本的ActiveX控件.然而,旧版ActiveX控件的屏蔽功能和相关的组策略设置,仍然在2014年8月12日就可以开始使用. IE的此次变动会对您的企业带来哪些影响呢? 从2014年9月9日起,如果您的企业在使用IE访问的Internet网站仍然依赖于旧版本的JAVA,那么您将受到这次改动的影响. 用户将会看到屏蔽的通知界面(点击此处可预览界面),但其可以通过点击相应的按钮坚持允许旧版ActiveX控件运行. 如果对您的企