Originariamente inviato da Gipple
Grazie mille per il link, ci ho dato un occhiata e continuerò a farlo anche oggi in maniera più approfondita... spero di riuscire a saltarci fuori :/
Un semplice esempio forse ti può aiutare. Tra le API Win32 esiste una funzione GetDoubleClickTime() (la documentazione è qui) che fornisce il tempo di doppio click con il mouse (quello che si può configurare da Pannello di controllo -> Mouse).
codice:
import com.sun.jna.*;
import com.sun.jna.win32.*;
public class Prova {
public static void main(String[] args) {
int time = MyUser32Lib.INSTANCE.GetDoubleClickTime();
System.out.println("Tempo doppio click = " + time + " millisecondi");
}
}
interface MyUser32Lib extends StdCallLibrary {
MyUser32Lib INSTANCE = (MyUser32Lib) Native.loadLibrary("user32", MyUser32Lib.class);
int GetDoubleClickTime();
}
La libreria User32 di Windows è "descritta" definendo una interfaccia che estende StdCallLibrary (perché le API Win32 usano la convenzione di passaggio dei parametri "stdcall") e la libreria viene caricata con quella loadLibrary(). Quel INSTANCE è una "costante".
Poi nella interfaccia è definito il metodo che corrisponde come nome alla funzione nativa. Il metodo nativo restituisce un UINT. In Java non ci sono tipi unsigned (a parte il char) e comunque il valore fornito da GetDoubleClickTime è sicuramente limitato, quindi non ci sarebbero problemi con il segno e il valore di ritorno in Java va bene come 'int'.
Il resto mi pare ovvio.