在Java中激活其他进程的窗口

我有两个Java swing应用程序(意味着在两个JVM中运行)。有什么办法可以在它们之间切换吗?通过Java代码激活另一个应用程序的窗口?

回答:

您可以尝试使用JNA。我将使用Maven为您提供一些适用于Windows的代码(或多或少适用于其他系统):(对不起,但我无法正确设置格式)

  1. 创建Maven项目,并添加依赖项:

    <dependency>

    <groupId>net.java.dev.jna</groupId>

    <artifactId>jna</artifactId>

    <version>3.4.0</version>

    net.java.dev.jna

    platform

    3.4.0

  2. 创建界面

    public interface User32 extends StdCallLibrary {

    User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, W32APIOptions.DEFAULT_OPTIONS);

    HWND GetParent(HWND hWnd);

    HWND FindWindow(String lpClassName, String lpWindowName);

    HWND SetFocus(HWND hWnd);

    HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter, String lpszClass, String lpszWindow);

    int GetWindowText(HWND hWnd, char[] lpString, int nMaxCount);

    }

  3. 建立课程

    public final class Win32WindowUtils {

    private static final int WIN_TITLE_MAX_SIZE = 512;

    public HWND GetWindowHandle(String strSearch, String strClass) {

    char[] lpString = new char[WIN_TITLE_MAX_SIZE];

    String strTitle;

    int iFind = -1;

    HWND hWnd = User32.INSTANCE.FindWindow(strClass, null);

    while(hWnd != null) {

    User32.INSTANCE.GetWindowText(hWnd, lpString, WIN_TITLE_MAX_SIZE);

    strTitle = new String(lpString);

    strTitle = strTitle.toUpperCase();

    iFind = strTitle.indexOf(strSearch);

    if(iFind != -1) {

    return hWnd;

    }

    hWnd = User32.INSTANCE.FindWindowEx(null, hWnd, strClass, null);

    }

    return hWnd;

    }

    }

  4. 并调用

    User32.INSTANCE.SetFocus(Win32WindowUtils.GetWindowHandle(windowTitle.toUpperCase(), null);

当然- windowTitle是您String要聚焦的窗口标题()。

以上是 在Java中激活其他进程的窗口 的全部内容, 来源链接: utcz.com/qa/407520.html

回到顶部