Как в Java отслеживать открытые приложения в Windows?

Какие библиотеки Java можно использовать для распознавания открытых окон программ в операционной системе Windows? Я ищу способ определить активное окно программы, а не окно, находящееся в фоновом режиме.
  • 8 ноября 2023 г. 16:09
Ответы на вопрос 1
Для отслеживания открытых приложений в Windows вы можете использовать Java Native Access (JNA) или JavaFX.

1. JNA: JNA позволяет вызывать функции из динамически подключаемых библиотек (DLL) операционной системы. Вам нужно будет использовать функции из библиотеки user32.dll, которая содержит информацию о текущих окнах. Вот пример кода, который позволяет определить активное окно:

```java
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinDef.RECT;

public class ActiveWindowTracker {
    public static void main(String[] args) {
        User32 user32 = User32.INSTANCE;
        HWND hwnd = user32.GetForegroundWindow();

        char[] buffer = new char[1024];
        user32.GetWindowText(hwnd, buffer, buffer.length);
        String windowName = Native.toString(buffer);

        RECT rect = new RECT();
        user32.GetWindowRect(hwnd, rect);

        System.out.println("Active window: " + windowName);
        System.out.println("Window position: " + rect.left + ", " + rect.top);
        System.out.println("Window size: " + (rect.right - rect.left) + " x " + (rect.bottom - rect.top));
    }
}
```

2. JavaFX: JavaFX предоставляет класс `Stage` для работы с окнами приложений. Вы можете использовать метод `isFocused()`, чтобы определить, является ли окно активным:

```java
import javafx.application.Application;
import javafx.stage.Stage;

public class ActiveWindowTracker extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.focusedProperty().addListener((obj, oldValue, newValue) -> {
            if (newValue) {
                System.out.println("Active window: " + primaryStage.getTitle());
            }
        });

        // Дополнительный код вашего приложения...
    }
}
```

Это простые примеры, которые помогут вам начать отслеживание активных окон в Windows с использованием Java. Обратите внимание, что код должен быть выполнен в операционной системе Windows, поскольку он использует функции и библиотеки, специфичные для данной платформы.
Похожие вопросы