Java Native Access (JNA) Windows : Connaître la position d'une fenêtre
Cet exemple vous montre comment récupérer la position d'une fenêtre d'un programme Windows externe grâce à la Java Native Access (JNA).
Dans cet exemple vous récupérez la position de la fenêtre du programme Bloc-notes.
Vous devez démarrer Bloc-notes avant d'exécuter le programme Java.
Les dépendances Maven Java Native Access (JNA)
<dependencies>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.8.0</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>5.8.0</version>
</dependency>
</dependencies>
Le code Java Java Native Access (JNA)
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public class WindowPositionExampleWin32 {
/* Interface JNA */
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.load("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);
HWND FindWindow(String lpClassName, String lpWindowName);
int GetWindowRect(HWND handle, int[] rect);
}
/** Retourne la position et la taille de la fenêtre */
public static int[] getWindowRectangleForWindowName(String windowName) {
/* Le rectangle qui représente la fenêtre */
int[] rectangle = {
0,
0,
0,
0
};
/* Trouve la fenêtre avec le titre */
HWND hwnd = User32.INSTANCE.FindWindow(null, windowName);
/* Initialise le rectangle (position de fenêtre) */
User32.INSTANCE.GetWindowRect(hwnd, rectangle);
return rectangle;
}
public static void main(String[] args) {
String windowName = "Sans titre - Bloc-notes";
/* Récupère la position de la fenêtre */
int[] rectangle = WindowPositionExampleWin32.getWindowRectangleForWindowName(windowName);
/* Affiche la position dans la console */
System.out.printf("Window : [upper-left-corner-x=%s, upper-left-corner-y=%s, lower-right-corner-x=%s, lower-right-corner-y=%s]", rectangle[0], rectangle[1], rectangle[2], rectangle[3]);
}
}
Commentaires
Enregistrer un commentaire