使用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