• 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);
    }
    }

     

  • 相关阅读:
    MapReduce 中的Map后,sort不能对中文的key排序
    wordCount程序中MapReduce工作过程分析
    使用eclipse的快捷键自动生成的map或者reduce函数的参数中:“org.apache.hadoop.mapreduce.Reducer.Context context”
    "hadoop namenode -format"命令的作用和影响的文件
    伪分布模式下使用java接口,访问hdfs
    MySQL Server 5.5.44免安装版配置详解
    quartz Cron表达式一分钟教程
    【转载】jQuery弹出层始终垂直居中于当前屏幕
    LeetCode 151 翻转字符串里的单词
    LeetCode 43 字符串相乘
  • 原文地址:https://www.cnblogs.com/happyhuangjinjin/p/8215262.html
Copyright © 2020-2023  润新知