Java Robot Class - добавить фокус на конкретное работающее приложение?

Я просто пытаюсь выяснить, можно ли / как заставить класс Java Robot изменить фокус с запущенного Java-приложения на конкретный процесс, такой как ms word или firefox.

Благодарность

 Vulcan07 июн. 2012 г., 03:42
Кажется дубликатом / Stackoverflow.com вопросы / 4782231 / ...
 user84527907 июн. 2012 г., 02:46
Класс Robot будет вводить символы в любое приложение, в котором есть фокус. Если вы хотите использовать Alt + Tab в Word, он тоже может это сделать. Итак, вы на правильном пути.

Ответы на вопрос(3)

на Mac есть возможность сделать это с помощью AppleScript. AppleScript интегрирован в систему, поэтому он всегда будет функционировать.https: //developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.htm

Тебе нужно только определить, что ты на Mac и у тебя есть название приложения.

Runtime runtime = Runtime.getRuntime();
            String[] args = { "osascript", "-e", "tell app \"Chrome\" to activate" };
            Process process = runtime.exec(args);
Решение Вопроса

е приложение через alt-tab, как было предложено выше, но вам нужно знать z-порядок приложения, которое вы хотите активировать. Я думаю, что для того, чтобы действительно сделать это лучше всего, вам нужно получить дескриптор окна (hWnd) окна верхнего уровня, которое вы хотите активировать (если это приложение для Windows), а затем с помощью функций библиотеки Windows user32 активировать желаемое окно. Для этого я рекомендую использовать ЮНА как один из самых простых способов (по сравнению с JNI). Сначала вам нужно будет скачать файлы JNA jna.jar и platform.jar jar и поместить их в путь к классам, а затем вы сможете легко вызывать большинство методов ОС. Например, у меня есть такая штука и работает для приложения Windows, где я могу получить hWnd для работающего приложения Windows верхнего уровня на основе имени окна (полное или частичное), а затем, используя этот hWnd, вызвать user32's Функция setForegroundWindow. Если вы хотите активировать приложение Windows и хотите продолжить это, прокомментируйте этот ответ, и я покажу вам, какой у меня есть код для этого. Если это так, вам нужно более подробно рассказать, что именно вы пытаетесь сделать.

Удачи

public class activate {

    public interface User32 extends W32APIOptions {

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


        boolean ShowWindow(HWND hWnd, int nCmdShow);

        boolean SetForegroundWindow(HWND hWnd);

        HWND FindWindow(String winClass, String title);

        int SW_SHOW = 1;

    }

    public static void main(String[] args) {  
        User32 user32 = User32.instance;  
        HWND hWnd = user32.FindWindow(null, "Downloads"); // Sets focus to my opened 'Downloads' folder
        user32.ShowWindow(hWnd, User32.SW_SHOW);  
        user32.SetForegroundWindow(hWnd);  
    } 
}

Credit:http: //www.coderanch.com/t/562454/java/java/FindWindow-ShowWindow-SetForegroundWindow-effect-wi

 Riscie15 дек. 2014 г., 20:23
Спасибо, работает как шарм!

Ваш ответ на вопрос