Как я могу прошить панель задач Windows, используя Swing? - PullRequest
8 голосов
/ 28 января 2009

Я разрабатываю приложение Swing, и мне нужно прошить панель задач Windows. Я не могу использовать frame.requestFocus(), потому что я не хочу красть фокус из других приложений.

Ответы [ 5 ]

12 голосов
/ 29 января 2009

Я не знаю, применимо ли это к более новым версиям Windows, но метод .toFront () используется для обновления окна, если ни одно из окон текущей виртуальной машины не было на переднем плане.

Это означает, что вызов frame.toFront () для минимизированного фрейма всегда заставляет его мигать ...

4 голосов
/ 29 января 2009

JNIWrapper с расширением winpack может делать то, что вы хотите.

Демо на сайте показывает это в действии.

1 голос
/ 04 января 2015

Вы можете принудительно свернуть графический интерфейс и .toFront -en:

        Gui.frame.setState(Frame.ICONIFIED);
        for (int i = 0; i < 3; i++) {
            Thread.sleep(10);
            Gui.frame.toFront();
            Thread.sleep(10);
            Gui.frame.setVisible(false);
            Thread.sleep(10);
            Gui.frame.toBack();
            Thread.sleep(10);
            Gui.frame.setVisible(true);
        }
        // be creative!!

, что, к сожалению, уберет фокус из активного окна. Вы можете найти активное окно и активировать его позже. Но, тем не менее, мигание будет длиться около трех секунд.

... или перейдите к сути вопроса, используя DLL -all на FlashWindow. Вызов dll невозможен с чистым кодом Java, вам понадобится помощь других языков программирования, например, например. с JNA . Кроме этого, вы также можете написать свою собственную программу на другом языке и вызывать ее из вашего Java-приложения. Я приведу пример в AutoHotkey ниже:

Код AutoHotkey:

    if 0 != 1       ; note: in ahk, 1 corresponds args[1] and 0 corresponds args.length
    {
        msgbox, There needs to be ONE parameter passed over to this file, which is the name of the window that should be flashed.
        ExitApp
    }
    programName = %1%
    winget, hWnd, ID, %programName%
    DllCall("FlashWindow",UInt,hWnd,Int,True)

скомпилированный в файл с именем flash.exe, помещенный в ваш рабочий каталог Java, вы можете вызвать его из любой функции:

    Runtime.getRuntime().exec("./flash.exe \"" + MyJFrame.getTitle() + "\"");

В качестве альтернативы, можно использовать AutoHotkey.dll и получить к нему доступ в Javacode (есть инструкции о том, как это сделать в Интернете), так что вам не понадобятся внешние exe-файлы.

Если у вас все еще есть проблемы с перепрошивкой на панели задач Windows, пожалуйста, дайте мне знать!

0 голосов
/ 13 апреля 2016

Лучший способ сделать это:

if (!isFocused()) {
        setVisible(false);
        setVisible(true);
    }
0 голосов
/ 29 января 2009

Используя Swing как таковой, вы, скорее всего, не сможете; это специфическая вещь Widnows.

...