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

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

您可以尝试使用JNA。 我将使用Maven为您提供一些Windows代码(或多或少将用于其他系统):(抱歉,我无法正确格式化)

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

      net.java.dev.jna jna 3.4.0   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 )。