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

本文介绍了如何使用Java的JNI(Java Native Interface)调用Win32 API,实现控制鼠标在特定矩形区域内活动的功能。通过创建Java类,声明native方法,并使用javah生成C语言头文件,再用C++编译器创建动态链接库项目,最终编译生成DLL文件并与Java应用结合,成功实现了限制鼠标活动范围的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
今天学习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就把它改为这个名字,就可以运行了.
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值