`
ppg
  • 浏览: 15844 次
  • 来自: 上海
社区版块
存档分类
最新评论

java 用swt调用com组建之ie组建基础版

阅读更多
首先必须要感谢我的同事lig的研究,在我换工作之际把些许工作成果分享。
内容版本会陆续更新。
java可以通过swt提供的方法调用windows的com组建,譬如ie,甚至可以控制页面中每一个dom的内容、事件等。
附件是swt的包。
首先是最基本的内嵌ie浏览器,打开网页。
建立SuperOcx.java

import org.eclipse.swt.ole.win32.OleAutomation;
public class SuperOcx extends Composite {
	protected OleAutomation player;
	protected OleControlSite controlSite;
	protected int Type;
	/**
	 * @param parent
	 * @param style
	 */
	public SuperOcx(Composite parent, int style) {
		super(parent, style);
	}

	protected int getType() {
		return Type;
	}

	protected void setType(int type) {
		Type = type;
	}

	public int getID(String name) {
		try {
			int[] ids = player.getIDsOfNames(new String[] { name });
			if (ids.length >= 0)
				return ids[0];
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return -1;
	}
	public int[] getIDs(String... name) {
		try {
			int[] ids = player.getIDsOfNames(name);
			if (ids.length >= 0)
				return ids;
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return null;
	}
	public Variant execute(String methodName) {
		int mid = getID(methodName);
		if (mid < 0)
			return null;

		Variant rtnv = player.invoke(mid);
		return rtnv;
	}
	public Variant getProperty(String parameter){
		int mid = getID(parameter);
		if(mid<0)return null;
		return player.getProperty(mid);
	}
	public Variant execute(String methodName, Variant[] parameter) {
		int mid = getID(methodName);
		if (mid < 0)
			return null;

		Variant rtnv = player.invoke(mid, parameter);
		return rtnv;
	}

	public Variant executes(String[] methodName, Variant[] parameter) {
		int[] mid = getIDs(methodName);
		if (mid == null)
			return null;
		int[] x = new int[1];
		x[0] = mid[1];
		Variant rtnv = player.invoke(mid[0], parameter, x);
		return rtnv;
	}

	/**
	 * 添加事件监听
	 * 
	 * @param eventID
	 * @param listener
	 */
	public void addEventListener(int eventID, OleListener listener) {
		controlSite.addEventListener(eventID, listener);
	}

	/**
	 * 移除事件监听
	 * 
	 * @param eventID
	 * @param listener
	 */
	public void removeEventListener(int eventID, OleListener listener) {

		controlSite.removeEventListener(eventID, listener);
	}
}

然后建立ie的ocx组建
IEOCX.java
import org.eclipse.swt.SWT;

public class IEOCX extends SuperOcx {
	public IEOCX(Composite parent, int style) {
		super(parent, style);
		setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
		createContents();
	}

	protected void createContents() {
		setLayout(new FillLayout());
		try {
			OleFrame frame = new OleFrame(this, SWT.NO_TRIM);
			controlSite = new OleControlSite(frame, SWT.NO_TRIM, "Shell.Explorer");
			controlSite.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
			controlSite.setRedraw(true);
			controlSite.setLayoutDeferred(true);
			controlSite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
			controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
			controlSite.pack();
			player = new OleAutomation(controlSite);
			setFocus();
		} catch (SWTException e) {
			throw new RuntimeException(e.getMessage(), e);
		} catch (SWTError e) {
			throw new RuntimeException(e.getMessage(), e);
		}
	}

	public long Navigate(String rgvarg, int rgdispidNamedArgs) {
		Variant v[] = new Variant[2];
		v[0] = new Variant(rgvarg);
		v[1] = new Variant(rgdispidNamedArgs);
		return execute("Navigate", v).getLong();
	}

	public OleAutomation getElementById(String id) {
		Variant v[] = new Variant[1];
		v[0] = new Variant(id);
		return execute("getElementById", v).getAutomation();
	}

	@Override
	public void addEventListener(int eventID, OleListener listener) {
		super.addEventListener(eventID, listener);
	}

	@Override
	public void removeEventListener(int eventID, OleListener listener) {
		super.removeEventListener(eventID, listener);
	}
}


最后是主程序,用swt绘制窗口并加载ie,打开网页
Player.java
import org.eclipse.swt.SWT;

public class Player {
	protected Shell shell;
	private IEOCX ie;

	/**
	 * Launch the application
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Player window = new Player();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window
	 */
	public void open() {
		final Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	/**
	 * Create contents of the window
	 */
	protected void createContents() {
		shell = new Shell();
		shell.setSize(850, 600);
		shell.setText("SWT Application");
		ie = new IEOCX(shell, SWT.NONE);
		ie.setSize(850, 600);
		String[] methodName = new String[] { "Navigate", "URL" };
		String url="www.baidu.com";
		Variant[] v = new Variant[1];
		v[0] = new Variant(url);
		ie.executes(methodName, v);

	}
}


这个是最简单的调用过程,之后会更新复杂的部分。
  • swt.jar (1.8 MB)
  • 下载次数: 25
分享到:
评论

相关推荐

    java 用swt调用com组建之ie组建加强版

    在"java 用swt调用com组建之ie组建加强版"这个主题中,我们可以预想博主可能探讨了以下内容: 1. **创建SWT Browser实例**:SWT提供了一个`Browser`类,可以用来创建一个ActiveX版本的浏览器实例,这在很多情况下...

    java浏览器调用ie内核

    总结来说,Java调用IE内核主要涉及Java与ActiveX控件的交互,这一技术虽然有一定的历史背景,但在现代Web开发中已经较少使用,更多的现代解决方案倾向于使用标准Web技术或者基于Chromium的框架。理解和学习这个知识...

    swt调用ocx应用实例(wps和windows本机播放器)

    本压缩包中的"swt调用ocx应用实例"展示了如何在SWT程序中使用OCX控件来实现特定功能。第一个实例是调用WPS(Kingsoft Office)打开DOC文件。WPS是一款兼容Microsoft Office的办公软件,其OCX控件可以被嵌入到其他...

    SWT调用OCX组件DEMO

    本示例"SWT调用OCX组件DEMO"是关于如何在Java中利用SWT来集成和操作OCX(Object Control eXtension)组件的一个实践。 OCX是Microsoft Windows平台上的控件技术,它基于COM(Component Object Model)模型,允许...

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

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

    java swt自定义控件

    SWT使用JNI(Java Native Interface)来实现这一目标,它允许Java代码直接调用操作系统提供的API,从而避免了Java AWT和Swing中的“重量级”组件带来的性能问题。 ### 2. 自定义控件的基础 在SWT中,自定义控件通常...

    使用java SWT编写界面的例子,多代码

    Java SWT(Standard Widget Toolkit)是Java编程环境中用于创建桌面应用程序用户界面的一种库,它是Java AWT和Swing之外的一个选择。SWT提供了与操作系统原生界面控件的直接交互,因此,使用SWT编写的程序可以拥有更...

    java SWT教程

    SWT利用JNI(Java Native Interface)调用操作系统内核API,实现了Java应用程序与本地窗口系统的直接交互,从而达到接近原生应用的性能。SWT提供了各种基本的UI组件,如按钮、文本框、列表等。 【JFace简介】 JFace...

    Java SWT(win32 X86) 开发包

    Java SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建原生图形用户界面(GUI)的开源库,它允许Java开发者构建与操作系统深度融合的应用程序。在Windows 32位(win32 X86)平台上,SWT提供了丰富的控件...

    java socket swt聊天糸统

    Java Socket SWT聊天系统是一个基于...学习这个项目,你可以掌握如何使用Java Socket进行网络通信,如何用SWT创建美观的用户界面,以及如何在服务器和客户端之间同步数据,这对于提升Java全栈开发能力是非常有帮助的。

    javaSWT简易计算器

    Java SWT(Standard Widget Toolkit)是Java编程环境中用于创建图形用户界面(GUI)的一种库,它是Java AWT和Swing之外的另一种选择。本项目“javaSWT简易计算器”利用SWT来构建一个基本的计算器应用,能够执行基本...

    SuperMap Objects Java: SWT框架 快速入门

    **SuperMap Objects Java与SWT框架的结合使用** 在IT行业中,SuperMap Objects Java是一款强大的地理信息系统(GIS)开发库,它提供了丰富的GIS功能,帮助开发者构建地理信息应用。而SWT(Standard Widget Toolkit...

    java swt jnilib 库

    在SWT中,JNI库扮演了关键角色,它使得Java代码能够调用操作系统提供的API,以实现与原生UI组件的交互,如窗口、按钮、菜单等。在MacBook M1上,由于硬件架构的变化,需要使用专门为aarch64架构编译的jnilib文件,...

    Java swt完整教程

    这个“Java SWT完整教程”将引导你从基础到进阶,全面掌握SWT的使用,让你能够利用这个强大的工具包创建功能丰富、性能优秀的Java桌面应用程序。无论是初学者还是有经验的开发者,都能从中受益匪浅,提升你的GUI编程...

    java-swt

    Java SWT(Standard Widget Toolkit)是Java编程环境中用于创建桌面应用程序的一个库,它是Java AWT(Abstract Window Toolkit)和Swing之外的一个替代选择。SWT设计的目的是提供更原生、性能更高的用户界面组件,...

    Java+SWT+图形用户界面教程+PDFJava源码

    Java是世界上最流行的编程语言之一,尤其在开发桌面应用程序时,其强大的GUI(图形用户界面)框架使得开发者能够创建美观且功能丰富的应用。本教程聚焦于Java结合SWT(Standard Widget Toolkit)来构建GUI,SWT是...

    Java64位SWT

    Java 64位SWT是Java开发者用于创建图形用户界面(GUI)的一种工具包,它提供了与操作系统底层更紧密的集成,使得Java应用程序能够拥有原生应用般的性能和外观。SWT,全称Standard Widget Toolkit,是Eclipse开源组织...

    java运行SWT必须用的插件

    总的来说,"java运行SWT必须用的插件"不仅包含了SWT的基础控件,还通过JFace提供了一套高级的GUI开发框架。这个插件对于那些希望在Java环境下使用原生外观和感觉的GUI开发人员来说,是一个不可或缺的工具。通过深入...

Global site tag (gtag.js) - Google Analytics