Java学习笔记 Java调用Win32 API控制鼠标活动范围

来源:互联网 发布:赛门铁克数据备份软件 编辑:程序博客网 时间:2024/05/17 09:48
 
今天学习Java看到Jni部分, 终于看到Java如何调用其他语言写的函数(我期待已久了…. :P)
下面把过程写下来,免得以后忘了又要是处找资料.
 
首先是Java写的测试类
public class TestJni
{
 
   native void SetMouseRangle(int left, int right, int top, int bottom);
   
   static{
     System.loadLibrary("TestJni");
   }
 
   public static void main(String []args){
         TestJni test = new TestJni();
         test.SetMouseRangle(0,0,0,0);
         test.SetMouseRangle(100,100,200,200);
   }
 
}
 
SetMouseRangle用它来代替同名的本地函数,它的前面必须要有native关键字,而且它不能有函数体.这个函数是为了指定一个矩形的范围,把鼠标限定在这个矩形里面5秒钟.
 
   static{
     System.loadLibrary("TestJni");
   }
是为了加载TestJni.dll的(在其他平台上动态库的后缀名不为dll,这里由系统自己判断后缀名是dll还是os等),本地的SetMouseRangle就放在这个动态库中.
 
然后用javac生成class文件.用,javah生成c语言的头文件.
 
然后打开C++编译器,新建一个win32动态链接库项目.把生成的TestJni.h头文件包含进去就行了.
 
然后 #include"TestJni.h"
创建一个导出函数
 
JNIEXPORT void JNICALL Java_TestJni_SetMouseRangle
 (JNIEnv *, jobject, jint left, jint right, jint top, jint bottom)
{
      RECT rect;
      rect.left = left;
      rect.right = right;
      rect.top = top;
      rect.bottom = bottom;
      
      ClipCursor(&rect);
      Sleep(5000);
      ClipCursor(0);
}
ClipCursor为一个Win32 API函数,作用是把鼠标限定在传入的矩形范围内.最后要调用ClipCursor(0);
否则鼠标将一直被限定在那个矩形范围内.
 
然后编译,在这里处了点问题,提示找不到Jni.h,想到一个笨办法,把Jni.h的目录附加进来.我的
Jni.h所在目录为C:/Program Files/Java/jdk1.6.0/include,还要把一个目录附加进来,因为还会用到C:/Program Files/Java/jdk1.6.0/include/win32这个目录中的头文件
 
然后编译,将生成的dll拷贝到class所在目录,如果名字不为TestJni.dll就把它改为这个名字,就可以运行了.
 
原创粉丝点击