`
zhangfan822
  • 浏览: 255937 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

COM操纵SWT Browser控件

    博客分类:
  • swt
 
阅读更多
通过OleAutomation 来调用Browser内部的浏览器组件打印,如果对SWT调用COM操作不熟悉,请参阅相关文档。

常用方法列表
ExecWB(1,1) 打开
ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
ExecWB(4,1) 保存网页
ExecWB(6,1) 打印
ExecWB(7,1) 打印预览
ExecWB(8,1) 打印页面设置
ExecWB(10,1) 查看页面属性
ExecWB(17,1) 全选
ExecWB(22,1) 刷新
ExecWB(45,1) 关闭窗体无提示

//首先获取Browser内部的OleClientSite,也就是浏览器对象
//此方式打破了Browser封装,一般不建议使用
OleClientSite clientSite = (OleClientSite) ((Composite) browser.getChildren()[0]).getChildren()[0];

//创建OleAutomation对象
OleAutomation auto = new OleAutomation(clientSite);
//调用OleAutomation对象的一个方法,例如 ExecWB(7,1)打印预览
invoke(auto,"ExecWB",7,1);
//释放OleAutomation对象
auto.dispose();

下面这段代码是对OleAutomation方法调用的封装。提供了简单的调用
OleAutomatinon方法。

对于任何OleAutomation对象,只需要invoke(Ole对象,"方法名",参数列表...);
/**
  * 执行OleAutomation的一个方法
  * @param automation
  * @param funcName 方法名
  * @param values 参数列表
  * @return 返回值
  */
  public Object invoke(OleAutomation automation, String funcName, Object... values) {
     //获取方法ID
    int[] rgdispid = automation.getIDsOfNames(new String[] { funcName });
    if (rgdispid == null || rgdispid.length == 0) {
        return null;
    }

    int dispIdMember = rgdispid[0];

    if (values == null || values.length == 0) {
         //无参数方法调用
        Variant pVarResult = automation.invoke(dispIdMember);
        if (pVarResult != null) {
          Object value = getValue(pVarResult);
          pVarResult.dispose();
          return value;
        }
    } else {
         
         //构造参数列表
        Variant[] variants = new Variant[values.length];
        for (int i = 0; i < values.length; i++) {
          Variant variant = createVariant(values[i]);
          variants[i] = variant;
        }

        Variant pVarResult = automation.invoke(dispIdMember, variants);
       
        //释放参数对象
        for (int i = 0; i < variants.length; i++) {
          variants[i].dispose();
        }
       
        //获取调用结果
        if (pVarResult != null) {
          Object value = getValue(pVarResult);
          pVarResult.dispose();
          return value;
        }

    }

    return null;

  }

  /**
  * 将Java对象转换为Variant
  * @param value
  * @return
  */
 
  private Variant createVariant(Object value) {
    Variant variant = null;

    if (value == null) {
        variant = new Variant();
    } else if (value instanceof Boolean) {
        variant = new Variant(((Boolean) value).booleanValue());
    } else if (value instanceof Short) {
        variant = new Variant(((Short) value).shortValue());
    } else if (value instanceof Integer) {
        variant = new Variant(((Integer) value).intValue());
    } else if (value instanceof Float) {
        variant = new Variant(((Float) value).floatValue());
    } else if (value instanceof String) {
        variant = new Variant(value.toString());
    } else if (value instanceof IDispatch) {
        variant = new Variant((IDispatch) value);
    } else if (value instanceof IUnknown) {
        variant = new Variant((IUnknown) value);
    } else if (value instanceof OleAutomation) {
        variant = new Variant((OleAutomation) value);
    }
    return variant;
  }



  /**
  * 将Variant转换为Java对象
  * @param variant
  * @return
  */
 
  private Object getValue(Variant variant) {

    short type = variant.getType();

    switch (type) {
    case COM.VT_BOOL:
        return variant.getBoolean();
    case COM.VT_I2:
        return variant.getShort();
    case COM.VT_I4:
        return variant.getInt();
    case COM.VT_R4:
        return variant.getFloat();
    case COM.VT_BSTR:
        return variant.getString();
    case COM.VT_DISPATCH:
        return variant.getAutomation();
    case COM.VT_UNKNOWN:
        return variant;
    case COM.VT_EMPTY:
        return null;
    }
    if ((type & COM.VT_BYREF) != 0) {
        return variant.getByRef();
    }

    return null;
  } 
分享到:
评论

相关推荐

    java swt自定义控件

    本文将深入探讨在Java中使用SWT进行自定义控件的开发。 ### 1. SWT概述 SWT是一个开源的Java库,它的目标是提供与原生GUI库(如Windows的Win32 API,Mac OS的Cocoa,Linux的GTK+)类似的性能和功能。SWT使用JNI...

    SWT Browser(内嵌浏览器)所需SWTResourceManager Jar包

    SWT Browser(内嵌浏览器)所需SWTResourceManager Jar包

    Java使用SWT JFreeChart控件实现的小游戏.zip

    Java使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的小游戏.zipJava使用SWT JFreeChart控件实现的...

    SWT/JFace 自定义日历控件(可绑定注册到其他控件)

    SWT自带的DateTime控件属实不好用,而且无法绑定到其他控件上。因此自己写一个日历控件用着方便,功能大致如下: 1、日历控件可自定义设置常见的几种日期格式; 2、可以绑定注册到其他控件如:文本框、按钮、标签上...

    SWT 自定义控件

    ### SWT 自定义控件开发详解 #### 背景与需求 随着基于Eclipse平台的应用程序日益增多,开发者越来越依赖于SWT/JFace等提供的工具包来构建丰富的用户界面。然而,这些内置组件库虽然提供了大量的基础控件,但在特定...

    SWT Browser浏览器小程序

    用SWT 组建实现一个简单的浏览器实例。具有搜索功能,

    SWT 时间控件及执行bat文件

    在“SWT 时间控件及执行bat文件”这个例子中,我们将探讨如何使用SWT来创建时间选择控件,以及如何利用Java的TimerTask类进行定时任务,同时还会学习如何通过批处理(bat)文件运行Java应用程序。 1. SWT时间控件:...

    SWT日期控件

    在SWT中,虽然内建了一些基本的控件,但并没有内置日期选择器(date picker)组件。因此,为了在SWT应用中实现日期选择功能,通常会采用第三方库或插件来扩展这一功能,如"SWT 第三方 date picker RCP"。 这个描述...

    一个SWT日期时间选择控件类

    在给定的资源中,“SWT日期时间选择控件类”是一个专门为SWT环境设计的控件,使得开发者能够轻松地在Java应用中集成日期和时间选择功能,并且支持拖放操作,提高了用户体验。 这个控件类可能是基于SWT的`Combo`或`...

    SWT日期时间选择控件.rar

    在这个“SWT日期时间选择控件.rar”压缩包中,包含的是一个针对SWT框架自定义封装的日期和时间选择器控件。这个控件允许用户方便地选取特定的日期和时间,提高了用户界面的交互性和用户体验。 在SWT中,虽然有基础...

    SWT控件

    **SWT控件详解** SWT(Standard Widget Toolkit)是由Eclipse基金会开发并维护的一套用于构建图形用户界面(GUI)的开源库,它是Java语言中的一个GUI工具包,主要面向那些希望创建高性能、原生外观的应用程序的...

    Draw2D 模拟SWT控件之RadioButton、CheckedBox

    本文将深入探讨如何使用Draw2D模拟SWT中的RadioButton和CheckedBox控件,以及这些控件在实际应用中的作用和实现方式。 首先,RadioButton和CheckedBox是GUI中的两种常见选择控件。RadioButton通常用于提供一组互斥...

    SWT/JFace 控件实例

    "SWT、JFace控件实例"这个压缩包可能包含了各种使用SWT和JFace创建的GUI示例,如按钮、文本框、列表、表格等控件的使用方法,以及对话框、视图和数据绑定的示例。这些实例对于初学者来说是非常宝贵的资源,因为它们...

    SWT日历控件

    在使用SWT 的控件CalendarCombo时,点击None之后再选择其他时间,会出现空指针异常,且会导致程序崩溃,改包下的几个类通过改写CalendarCombo解决了这个小bug ,使用方法与CalendarCombo类似,MyCalendarCombo mc=...

    Draw2D 模拟SWT控件之TextField、TextArea

    "Draw2D模拟SWT控件之TextField、TextArea"这个主题聚焦于使用Draw2D库来模仿SWT(Standard Widget Toolkit)中的两种基本输入控件:TextField和TextArea。SWT是Eclipse基金会的一个开源项目,用于构建原生外观的...

    SWT Table单元格编辑功能

    在Java图形用户界面(GUI)开发中,SWT(Standard Widget Toolkit)是一个广泛使用的工具包,它提供了丰富的控件集合,用于构建高性能的桌面应用程序。其中,`Table`控件是SWT中最常用的数据展示组件之一,尤其适用...

    SWT(JFace)小制作 FileBrowser文件浏览

    代码如下: 代码如下:package swt_jface.demo6; import java.io.File; import java.util.Date; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics....

    在SWING、SWT中嵌入浏览器

    对于SWT中的`Browser`,可能还需要根据操作系统选择相应的 SWT 版本,因为SWT是高度平台依赖的。 2. 创建`Display`对象:这是SWT的主线程,负责处理所有GUI相关的操作。 3. 创建`Shell`对象:它是SWT窗口的基本...

Global site tag (gtag.js) - Google Analytics