这里用的是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);elsertnv = _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);}}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦