登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: java 调用 windows api , 调用 com 的方法     [回主站]     [分站链接]
标题
java 调用 windows api , 调用 com 的方法
clq
浏览(0) + 2010-06-18 09:21:03 发表 编辑

关键字:

java 调用 windows api , 调用 com 的方法

调用 api 要用 jinvoke,这个是要钱注册的.
调用 com 则要用 Jacob,这个是免费的.

--------------------------------------------------
8一下,写个 com 在 com 里调用 api 或者 dll 不就免费了?

clq
2010-6-18 9:28:54 发表 编辑

jinvoke 解除一个月试用限制
2010-02-26 09:52

JInvoke 可以到以下网址下载,www.jinvoke.com/,至于这个东东是干什么的,看一下网站介绍就清楚了,


LINUX下只要你使用过一次 jinvoke 就会在用户家目录里生成文件 : ~/.java/.userPrefs/com/jinvoke/prefs.xml
你要做的只是修改这个文件即可无限制使用.

prefs.xml原内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE map SYSTEM "http://java.sun.com/dtd/preferences.dtd">
<map MAP_XML_VERSION="1.0">
<entry key="bummibumpa" value="1265089716621"/>
</map>

只要将value改大即可,比如2050年1月1日就是:2524579200000
这个数字如何得到?如下:
System.out.println(new SimpleDateFormat("yyyyMMdd").parse("20500101").getTime());
呵呵.

Windows 中也同样方便,修改一下注册表就OK了.
将以下内容保存成*.reg 导入就行了:

Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com\jinvoke]
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\com\jinvoke]
"bummibumpa"="2524608000000"

clq
2010-6-18 9:29:23 发表 编辑

网友破解版. http://eatsalt.blog.163.com/blog/static/879402662009910101025137/

clq
2010-6-18 9:30:50 发表 编辑

java调用windows API
浏览次数: 36 次 字体:[增加 减小] 类型:转载

使用jinvoke调用windowsAPI。jna使用比较麻烦,需要写c代码和参数转换,jinvoke的使用就像jdk中的包一样。

官网使用参考:http://www.jinvoke.com/calling-the-win32-api-from-java

一个弹出框的例子(这种代码用于调用任何dll,不只是windows的,也可以是自己写的dll)

import com.jinvoke.JInvoke;
import com.jinvoke.NativeImport;

public class HelloWindows
{
@NativeImport(library="User32")
public static native int MessageBox(int hwnd,
           String text,
           String caption,
           int type); //windows Api MessageBox函数原型


public static void main(String[]argc)
{
   JInvoke.initialize();
   MessageBox(0,"Thisi MessageBox is a native Win32 MessageBox",
      "Hellow World",0);
}
}

运行效果:

*
使用以上代码方式可以任意调用本地的DLL文件。
注意:1.import com.jinvoke.JInvoke;import com.jinvoke.NativeImport;//引用包
   2.@NativeImport(library="User32")//指定本地的DLL文件
   3.public static native int MessageBox(int hwnd,String text,String caption,int type); //windows Api MessageBox函数原型 声明一个可以在java当前类中使用的方法
   4.JInvoke.initialize();//实例化JInvoke
   5.MessageBox(0,"Thisi MessageBox is a native Win32 MessageBox","Hellow World",0);//然后就可以开始调用DLL中的函数了


*
如果只是为了使用User32.dll中的函数可以直接使用jinvoke.jar中提供的User32类,而不必使用 @NativeImport(library="User32")去包含一个DLL,再去声明一个做函数的类型转换的方法。

*

编译是需要带上jinvoke.jar即:java -classpath .;jinvoke.jar HelloWindows

clq
2010-6-18 9:32:54 发表 编辑

    本文为大家讲一个用C#做一个Com,调用.net DLL实现加密解密的方法,然后提供给java使用,达到利用java调用.net DLL的功能。

51CTO曾经为大家讲过“Java与.NET的 WebServices相互调用”,但是如何实现Java调用.net DLL的方法呢?我们在网上搜索了一番,也没找到啥东西,甚至看到人扬言此事绝无可能。本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:“在Java项目中必须使用其提供的用.net写的DLL加密机制!”

环境与工具:

◆.net framework 3.5  C#

◆java jdk1.5,   Tomcat 5.5

◆jacob-1.15-M3

实现例子:

一、C# 制作Com组件

新建一个Class 项目,取名TestCom

代码

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Runtime.InteropServices;  
  6.  
  7. namespace TestCom  
  8. {  
  9.     [Guid("E9BCF867-CD81-40d0-9591-ED28D1ED2B53")]  
  10.     public interface IEncrypt  
  11.     {  
  12.         [DispId(1)]  
  13.          string GetEncrypt(string str,string str2);  
  14.     }  
  15.     [Guid("33A6E58D-E1F5-4b53-B2E2-03B9F8BA2FAD"), ClassInterface(ClassInterfaceType.None)]  
  16.     public class Encrypt:IEncrypt  
  17.     {  
  18.         public Encrypt(){}  
  19.  
  20.         public string GetEncrypt(string str,string str2)  
  21.         {  
  22.              
  23.              return  "测试 | "+str+"|"+str2;  
  24.         }  
  25.     }  

打开 Project-->  Properties菜单  在Application标签中打开 Assembly Information 将Make assembly Com-Visible一项选中。再切换到Build标签将 Register for COM interop一项选中。

Guid的生成:打开Visual Studio Command Prompt 输入guidgen 命令调出工具。类型选择Registry Format,点击New Guid,然后COPY出来。

[DispId(1)]为函数的标识。如果有多个函数可相应的在函数前面加[DispId(2)], [DispId(3)]…

编译程序Debug目录中会生成 TestCom.dll 和TestCom.tlb

手工注册Com方法:

打开Visual Studio Command Prompt进入Debug目录,运行命令注册:regasm TestCom.DLL /tlb:TestCom.tlb

二、Java调用Com

部署jacob

◆在开发环境中引入jacob.jar

◆拷贝jacob-1.15-M3-x86.dll 文件到 C:\Windows\System32目录,如果是Web应用的话还需要拷贝到jdk1.5.0_16\bin目录(jdk安装目录下的bin目录)

java调用代码

代码

  1. import com.jacob.activeX.ActiveXComponent;  
  2. import com.jacob.com.ComThread;  
  3. import com.jacob.com.Dispatch;  
  4. import com.jacob.com.Variant;  
  5. public class test {  
  6.  
  7.     /**  
  8.      * @param args  
  9.      */  
  10.     public static void main(String[] args) {  
  11.         // TODO Auto-generated method stub  
  12.         try{  
  13.             ActiveXComponent dotnetCom = null;  
  14.             dotnetCom = new ActiveXComponent("TestCom.Encrypt");  
  15.             Variant var = Dispatch.call(dotnetCom,"GetEncrypt","哥是第一个参数","哥是第二个参数");  
  16.             String str  = var.toString(); //返回值  
  17.             } catch (Exception ex) {  
  18.                 ex.printStackTrace();  
  19.             }  
  20.     }  
  21.  

这便完成了Java调用.net DLL的方法!

原文地址:http://www.cnblogs.com/windsor/archive/2010/06/17/1759289.html


clq
2010-6-18 9:35:12 发表 编辑

如果涉及到特殊的数据类型的话我估计还是很麻烦.
clq
2010-6-18 9:38:30 发表 编辑

http://webservices.ctocio.com.cn/java/18/9347518.shtml
--------------------------------------------------

Java调用com组件操作word使用总结(jacob)

作者: 佚名,  出处:IT专家网, 责任编辑: 谢妍妍, 
2009-12-31 13:00
   先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于 1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。

  一、 准备工作

  先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于 1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。

  Jacob下载地址:http://sourceforge.net/project /showfiles.php?group_id=109543&package_id=118368

  我在这里下载了Jacob1.14.3和jacob1.9的版本两个版本

  这里下载的是目前最新的Jacob1.14.3的Release版。

  另外java操作word方式还有(个人认为通过jacob最好,自己可以扩展,网上除poi之外几乎全是java-com技术实现的):

  (1):Apache POI - Java API To Access Microsoft Format Files(http://poi.apache.org/);对word处理不够强处理Excel功能可以,但是全是通过java完成的,不需 要com组件支持;

  (2):java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。(好象也是用的java-com技术);

  (3)web开发语言操作word的功能最好还是用第三方的控件, 看看这个SOAOFFICE,还可以使用js 写VBA呢 http://www.kehansoft.com/soaoffice/doclist.asp

  二、安装Jacob

  Jacob的安装非常的简单,我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件,如 果是 Jacob1.14.3则是jacob-1.14.3-x86.dll(32位,机和jacob-1.14.3-x64.dll(64位)和 jacob.jar两个文件。Jacob.dll直接放到系统的system32文件夹下就行了,连注册都不用的(或者拷贝到jdk或者jre的bin目 录下也行,当前测试文件所在的目录也行,就是只要在java.library.path中就可以)。而jacob.jar设置到classpath中去就 可以了,或者在IDE开发环境的工程中设置扩展库也一样的,我是这样使用的将jacob-1.14.3-x86.dll或复制 到%Tomcat5%\bin目录下将jacob.jar复制到%Tomcot5%\Share\lib目录下,我使用过程中感觉放到这里是一个最终解决 办法,当你放哪都有问题的时候。我这样用之后再没有出过因为系统不一样出现的各种各样的问题,当然你作的是web的项目。

  注意使用jacob一写要安装word,我装的word2003,如果是操作word2007就不用jacob了(好像这方面的API)。

  对jacob.dll几种配置方法 (网上看到):

  2008-07-31 11:59:49

  1、把jacob.dll文件,复制到 windows\system32 目录下。(注:我用的时候这个方法不能运行)

  2、 把jacob.dll放入 Java\jdk1.5.0_06\jre\bin目录下.把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext目录下.可以正常运行。

  3、把jacob.dll放入 \glc\src目录下.把jacob.jar放入WEB-INF\lib目录下,也是可以正常运行。

  三、使用(以下是我改写的一个word操作类,希望有兴趣的朋友完善,记得发给我一份)

 


 //注意java操作 word关键是定位操作对象;
  import com.jacob.activeX.ActiveXComponent;
   import com.jacob.com.Dispatch;
  import com.jacob.com.Variant;
   /**
  * jacob操作MSword类
  * @author
  */
   public class WordBean {
  // word文档
  private Dispatch doc;
   // word运行程序对象
  private ActiveXComponent word;
  // 所有word文档集合
   private Dispatch documents;
  // 选定的范围或插入点
   private Dispatch selection;
  private boolean saveOnExit = true;
   public WordBean()throws Exception{
  if (word == null) {
   word = new ActiveXComponent("Word.Application");
   word.setProperty("Visible", new Variant(false)); //不可见打开word
   word.setProperty("AutomationSecurity", new Variant(3)); //禁用宏
  }
   if (documents == null)
   documents = word.getProperty("Documents").toDispatch();
  }
   /**
  * 设置退出时参数
  *
  * @param saveOnExit
   * boolean true-退出时保存文件,false-退出时不保存文件
  */
   public void setSaveOnExit(boolean saveOnExit) {
   this.saveOnExit = saveOnExit;
  }
  /**
  * 创建一个新的word文档
   *
  */

clq
2010-6-18 9:44:46 发表 编辑

http://www.blogjava.net/lusm/archive/2008/11/22/JACOB.html

[原创]浅析 JACOB

 

小觅向大家问好:

 

废话多多:

JACOB在很长一段时间收到各位JAVA编程人士的重用,许多和小寻一样热 爱编程的朋友找到我讨论各种关于JACOB的问题,在这些前来讨论技术的朋友当中,不少朋友是第一次接触,被JACOB语法所迷惑,不知所措,为了让大家少 走冤枉路,小寻特意写下这篇文章,由于本人技术浅薄,如有不足,还请批评指正。

如何下载:

JACOB是来自danadler.com公司的开源产品, 大家以往都是通过http://danadler.com对该公司的主页做访问,但是你现在打开会看到“Internet Explorer 无法显示该网页 如果我没记错我们以往 使用的jacob_1.9.zipjacob_1.7.zip都是从http://danadler.com/jacob 处下载的,但目前看来这个网址不可用了。做一下搜索,发现sourceforge.net 有一个叫jacob的项目,想是该公司搬家了吧!通 过http://sourceforge.net/projects/jacob-project/ 我们访问到该工程主页,然后下载jacob-project 1.14.3 晕连版本也变了,再也找不到那些老版本了(大家如果有老版本的下载地址一定 要留言通知小弟,感激不尽!!!)

源代码下载:jacob-1.14.3_src.zip  

代码包下载:jacob-1.14.3.zip

API分析:(jacob-1.14.3\docs\api\index.htm)

JACOB里的总共有两个包:

com.jacob.activeX:JACOB可以通过它调度(DispatchactiveX 控件

com.jacob.comJACOB通过它调用系统DLL

(activeX是由微软公司推出的用于Internet的技术,以前曾经被称为OLE OCXactiveX web插件可以用于各种非HTML的工作,比如,对MicrosoftExcel MicrosoftWord 文件做 操作、解析JS,VB脚本、播放FALSH、调用Microsoft MediaPlayer.

(更多关于activexCOMhttp://www.itcups.com/Articals/Artical_10121.html

内部结构:


  
   有一点可以确定的是在
JACOB内部,com.jacob.activeX是建立在com.jacob.com之上的。

com.jacob.com中有一个很基础的类com.jacob.com.JacobObject

其中比较常用的两个com.jacob.com.Dispatchcom.jacob.com.Variant便是继承自它。(com.jacob.com.Dispatch;里面提供了调度MS windows系统API,比如进程的管理。com.jacob.com.Variant; 里面数据类型的转换的方法,Variant类本身是JACOB的最最基本的数据类,他可以被转 换成任何的类,如: 使用toDispatch();可以将Variant转化成Dispatch对象。)

com.jacob.com中还有其他的一 些类不是建立在JacobObject之上的,如com.jacob.com.ComThread(负责COM线程管 理。)

 com.jacob.com所有的类,包括上面说到的JacobObjectComThread都是通过com.jacob.com.LibraryLoader中的loadJacobLibrary()方法:
static 

{       

   LibraryLoader.loadJacobLibrary();

}



调用jacob.dll内的方法,比如:Dispatch.java就通过LibraryLoaderDispatch.hDispatch.cpp建立联系。
从而建立起javajacob.dlljni的之间的联系。


总数:7 页次:1/1 首页 尾页  
总数:7 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1