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