牛骨文教育服务平台(让学习变的简单)
博文笔记

Java调用win32API与DLL的使用

创建时间:2016-08-16 投稿人: 浏览次数:218
之前一直觉得Java不能调用系统API就是一个莫大的遗憾,后来发现,我错了,还真可以的,下面就由小桩带你研究研究,如果你会会C++当然最好,学习Java的都知道,Java是跨平台的语言,需要虚拟机,Java是无法直接访问操作系统API的,这样在某些需求下就会受到限制,比如。我现在想关闭显示器,或锁定鼠标键盘,或获取系统信息,获取浏览器URL,获取播放器来播放多媒体等等,我们会发现Java貌似无法做到,那么我们如何用Java来操作系统API或调用DLL动态链接库呢?答案肯定是有的,他们就是JNA与JNI技术。

什么是JNI?全称Java Native Interface,即Java本地接口,它提供一套能与其它语言通信的API,主要是C(C++),其使用步奏如下:

 图片 
什么是JNA? 全称Java Native Access,使用JNA比JNI简单许多,我们只需要在Java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射,调用起来感觉就像在调用Java代码一样方便。使用JNA需要两个架包,即jna-4.1.0.jar与jna-platform-4.1.0.jar,这样就行了。

以下代码将演示如何用JNA技术来调用User32 API来阻塞鼠标键盘的控制,并且开始闪屏,闪烁十次后退出,哈哈

import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

public class Test
{
 public interface User32 extends StdCallLibrary
 {
  User32 INSTANCE = (User32)Native.loadLibrary("User32",User32.class);//加载系统User32 DLL文件,也可以是C++写的DLL文件
  int SendMessageA(int hwnd,int msg,int wparam,int lparam);
  int FindWindowA(String arg0,String arg1);
  void BlockInput(boolean isBlock);
  int MessageBoxA(int hWnd,String lpText,int lpCaption,int uType);
 }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。