Вы можете попробовать использовать JNA. Я дам вам некоторый код для Windows (более или менее будет для других систем) с использованием Maven:
(извините, но я не могу правильно отформатировать)
Создание проекта Maven и добавление зависимостей:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>platform</artifactId>
<version>3.4.0</version>
</dependency>
Создать интерфейс
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);
}
Создать класс
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;
}
}
И вызвать
User32.INSTANCE.SetFocus(Win32WindowUtils.GetWindowHandle(windowTitle.toUpperCase(), null);
Конечно - windowTitle
- это заголовок вашего окна (String
), на котором вы хотите сфокусироваться.