小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一篇使用COM操縱SWT Browser控件的文章

 Long_way 2007-07-10
一篇使用COM操縱SWT Browser控件的文章
2006-07-12 00:11:10
在Eclipse論壇上看到的文章,很不錯,拿過來共享一下.
 
通過OleAutomation 來調(diào)用Browser內(nèi)部的瀏覽器組件打印,如果對SWT調(diào)用COM操作不熟悉,請參閱相關(guān)文檔。

常用方法列表
ExecWB(1,1) 打開
ExecWB(2,1) 關(guān)閉現(xiàn)在所有的IE窗口,并打開一個新窗口
ExecWB(4,1) 保存網(wǎng)頁
ExecWB(6,1) 打印
ExecWB(7,1) 打印預(yù)覽
ExecWB(8,1) 打印頁面設(shè)置
ExecWB(10,1) 查看頁面屬性
ExecWB(17,1) 全選
ExecWB(22,1) 刷新
ExecWB(45,1) 關(guān)閉窗體無提示


//首先獲取Browser內(nèi)部的OleClientSite,也就是瀏覽器對象
//此方式打破了Browser封裝,一般不建議使用
OleClientSite clientSite = (OleClientSite) ((Composite) browser.getChildren()[0]).getChildren()[0];

//創(chuàng)建OleAutomation對象
OleAutomation auto = new OleAutomation(clientSite);
//調(diào)用OleAutomation對象的一個方法,例如 ExecWB(7,1)打印預(yù)覽
invoke(auto,"ExecWB",7,1);
//釋放OleAutomation對象
auto.dispose();

下面這段代碼是對OleAutomation方法調(diào)用的封裝。提供了簡單的調(diào)用
OleAutomatinon方法。

對于任何OleAutomation對象,只需要invoke(Ole對象,"方法名",參數(shù)列表...);



  /**
  * 執(zhí)行OleAutomation的一個方法
  * @param automation
  * @param funcName 方法名
  * @param values 參數(shù)列表
  * @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) {
         //無參數(shù)方法調(diào)用
        Variant pVarResult = automation.invoke(dispIdMember);
        if (pVarResult != null) {
          Object value = getValue(pVarResult);
          pVarResult.dispose();
          return value;
        }
    } else {
         
         //構(gòu)造參數(shù)列表
        Variant[] variants = new Variant[values.length];
        for (int i = 0; i < values.length; i++) {
          Variant variant = createVariant(values
);
          variants
= variant;
        }

        Variant pVarResult = automation.invoke(dispIdMember, variants);
       
        //釋放參數(shù)對象
        for (int i = 0; i < variants.length; i++) {
          variants
.dispose();
        }
       
        //獲取調(diào)用結(jié)果
        if (pVarResult != null) {
          Object value = getValue(pVarResult);
          pVarResult.dispose();
          return value;
        }

    }

    return null;

  }

  /**
  * 將Java對象轉(zhuǎn)換為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轉(zhuǎn)換為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;
  }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多