在java中使用Jawin组件访问Windows应用程序

时间:2021-08-22 20:48:28

(1)Jawin(Java/Win32)是一个免费的、开放源代码的体系结构,用于Java组件与WindowsCOM对象或WindowsDLL之间的互操作。Jawin允许Java应用程序调用任何基于COM或DLL的遗留代码,而不需要编写任何JNI代码。您的代码将能与诸如MicrosoftOffice套件等可编写脚本的应用程序交互,调用诸如Microsoft的基于COM的XML解析器和工具等可编写脚本的逻辑组件,以及访问诸如Windows注册表、安全API和事件日志等Win32API特性。 (2)Jawin包括一个用于可编写脚本的COM组件的代码生成器(typebrowser),该代码生成器读取类型库,并自动产生Java应用程序中调用该组件所需要的Java存根(stub)。

http://sourceforge.net/projects/jawinproject/

Jawin2.0-alpha1下载地址:http://jawinproject.sourceforge.net/

下载文件是一个zip文件,叫jawin-2.0-alpha1.zip。解压缩后,将bin/jawin.dll文件(约264k)拷贝到系统的system32文件夹下,将lib/jawin.jar和lib/jawin-stubs.jar拷贝到C:/J2SE6/jre/lib/ext文件夹下(我的j2seJDK安装在c:/J2SE6文件夹下)。其他设置不需要做。

举例1:CreateWord.java,新建一个Word文档。

/****************************************** *CreateWord.java *CreateaWorddocument * *version1.0 *authorHowwa@sina.com http://blog.sina.com.cn/u/1495389370 *******************************************/

importorg.jawin.DispatchPtr; importorg.jawin.win32.Ole32;

public class CreateWord{ public static void main(String[]args){ try{ Ole32.CoInitialize(); //初始化 DispatchPtr app=new DispatchPtr("Word.Application"); //创建word对象 app.put("Visible",true); //使word可见 DispatchPtr docs=(DispatchPtr)app.get("Documents"); //获得document对象集合 DispatchPtr doc=(DispatchPtr)docs.invoke("Add"); //新增一个文档 app.invoke("Activate"); //激活当前文档 Ole32.CoUninitialize(); //释放对象 }catch(Exception e){ e.printStackTrace(); } } }

 

举例2:OpenWord.java,打开一个已存在的Word文档。

/****************************************** *OpenWord.java *OpenaWorddocument * *version1.0 *authorHowwa@sina.com http://blog.sina.com.cn/u/1495389370 *******************************************/

importorg.jawin.DispatchPtr; importorg.jawin.win32.Ole32;

public class OpenWord{ public static void main(String[]args){ try{ Ole32.CoInitialize(); DispatchPtr app=new DispatchPtr("Word.Application"); app.put("Visible",true); DispatchPtr docs=(DispatchPtr)app.get("Documents"); DispatchPtr doc=(DispatchPtr)docs.invoke("Open","C://test.doc"); Ole32.CoUninitialize(); }catch(Exception e){ e.printStackTrace(); } } }

在编译、运行时要注意大小写。同时,C盘根目录下要有test.doc文件。 /* *CreateWordDoc.java * *1.Createanewworddocument; *2.assignfontname *3.assignfontsize *4.writetwosentences *5.saveit *6.closeit *7.exitword. * *@versionvision:1.0 *@authorhowwa@sina.com *http://blog.sina.com.cn/u/1495389370 */

importorg.jawin.DispatchPtr; importorg.jawin.win32.Ole32;

public class CreateWordDoc{ public static void main(String[]args){ try{ Ole32.CoInitialize(); //初始化 DispatchPtr app=new DispatchPtr("Word.Application"); //创建word对象 app.put("Visible",true); //使word可见 DispatchPtr docs=(DispatchPtr)app.get("Documents"); //取得document对象集合(Documents) DispatchPtr doc=(DispatchPtr)docs.invoke("Add"); //新增一个文档 app.invoke("Activate"); //激活当前文档 DispatchPtr objTextFont=(DispatchPtr)((DispatchPtr)doc.get("Content")).get("Font"); //取得Font对象 objTextFont.put("Name","黑体"); //设置字体 objTextFont.put("Size","48"); //设置字号 DispatchPtr docSelection=(DispatchPtr)app.get("Selection"); //取得Selection对象 docSelection.invoke("TypeText","Jawwintesttext!/nJawin测试文本。"); //使用TypeText方法添加文本 doc.invoke("SaveAs","c://jawintest.doc"); //保存文档(保存在C盘根目录下) //doc.invoke("Close"); //关闭当前文档,去掉前面的注释符并重新编译后可生效 //app.invoke("Quit"); //退出Word,去掉前面的注释符并重新编译后可生效 Ole32.CoUninitialize();//释放对象 }catch(Exception e){ e.printStackTrace(); } } }