Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2009, 00:14   #1
CMYK
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 6
По умолчанию Свернуть окна без анимации свертывания

Привет всем! проблема такая нужно свернуть все окна кроме своей программы у меня это получается (пишу на java)
нашел пример на делфи

Код:
procedure TForm1.Button1Click(Sender: TObject);
        var WH:HWnd;
        begin
        WH:=Handle;
        repeat
        WH:=GetNextWindow(WH,GW_HWNDNEXT);
        if (GetParent(WH)=0)and(not IsIconic(WH))and(IsWindowVisible(WH)) then
        PostMessage(WH,WM_SYSCOMMAND,SC_MINIMIZE,0);
        until WH=0;
        end;
попытался воспроизвести на java получилось (пример ниже), но надо их свернуть без анимации свертывания т.е. быстро как по типу если паравой кнопкой кликнуть на понели задачь и нажать показать рабочий стол, какой фонкцией это можно реалировать или какое сообщение нужно разослать?

правда Program Manager цепляет пришлось костыль дописывать
Код:
 private void minimizeWindow(){


    W32API.HWND hWnd = User32.INSTANCE.GetForegroundWindow();
    W32API.HWND myhWnd = hWnd;
    W32API.HWND pogMan = User32.INSTANCE.FindWindow(null, "Program Manager");

        while(hWnd != null){
            hWnd = User32.INSTANCE.GetWindow(hWnd, 2);
            if(User32.INSTANCE.GetParent(hWnd) == null &
                    User32.INSTANCE.IsIconic(hWnd) == 0 &
                    User32.INSTANCE.IsWindowVisible(hWnd) > 0 & 
                    !myhWnd.equals(hWnd) &
                    !pogMan.equals(hWnd)){

                User32.INSTANCE.ShowWindow(hWnd, 2);
                //User32.INSTANCE.SendMessage(hWnd, 274, -4064, 0); //сврачивает только среду разработки
		//User32.INSTANCE.PostMessage(hWnd, 274, -4064, 0); //сврачивает только среду разработки
            }
        }
    }


Код:
import com.sun.jna.Native;



public interface User32 extends W32API{


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


    boolean ShowWindow(HWND hWnd, int nCmdShow);

    boolean SetForegroundWindow(HWND hWnd);
    
    HWND GetForegroundWindow();

    HWND FindWindow(String winClass, String title);

    HWND FindWindowEx(HWND Parent, HWND hWnd, String winClass, String title);

    int SendMessage(HWND hWnd, int msg, int wParam, int lParam);

    int PostMessage(HWND hWnd, int msg, int wParam, int lParam);

    HWND GetWindow(HWND hWnd, int Cmd); // тут норма

    HWND GetNextWindow(HWND hWnd, int Cmd); //не может подгрузить ошибка

    HWND GetParent(HWND hWnd);

    int IsIconic(HWND hWnd);

    int IsWindowVisible(HWND hWnd);

}

Последний раз редактировалось CMYK; 04.11.2009 в 01:02.
CMYK вне форума Ответить с цитированием
Старый 04.11.2009, 00:58   #2
CMYK
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 6
По умолчанию

Нарыл в Гугле вот такой вот шедевр
Код:
HWND wnd = FindWindow("Shell_TrayWnd", NULL);
if (wnd != NULL)
    ::SendMessage(wnd, WM_COMMAND, 0x019f, 0);
вот так же быстро бы развернуть свою прогу, но у меня не получается, хотя такой вариант тоже кастыль. сверни потом разверни.
в общем буду дальше рыть, тема открыта.

Последний раз редактировалось CMYK; 04.11.2009 в 18:33.
CMYK вне форума Ответить с цитированием
Старый 04.11.2009, 12:49   #3
CMYK
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 6
По умолчанию

Получается меня спасает только SystemParametersInfo в смысле выключать анимацию на время или может есть еще какой-то способ?
Я понимаю, что тем тут подобных много, но не в одной решения своей проблемы я не нашел, обратите на меня внимание!
CMYK вне форума Ответить с цитированием
Старый 04.11.2009, 18:22   #4
CMYK
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 6
По умолчанию

Уважаемые модераторы у меня вопрос по win api а не по синтаксису java почему переместили?
CMYK вне форума Ответить с цитированием
Старый 05.11.2009, 01:13   #5
CMYK
Новичок
Джуниор
 
Регистрация: 03.11.2009
Сообщений: 6
По умолчанию

Короч плачу сколько-то рублёв за исходник программы на JAVA следущего вида: JFrame имеет JButton по нажатию на JButton свернуть все остальные окна без анимации свертывания т.е. как по типу если паравой кнопкой кликнуть на понели задачь в windows xp и нажать показать рабочий стол, но чтобы наш JFrame не свернулся ни одного раза использовать JNA и win api. Програ должна работать в windows xp, vista и 7. Ваша цена за сие великолепие.

Последний раз редактировалось CMYK; 05.11.2009 в 01:16.
CMYK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свернуть все окна Veiron Общие вопросы Delphi 7 24.05.2012 16:13
Свернуть окна Михаил Юрьевич Общие вопросы Delphi 9 06.06.2008 19:16
Свернуть все окна Altera Win Api 2 22.05.2008 09:26
Мучение без анимации! Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 17.05.2008 18:08
Как развернуть окно без анимации Dima63 Общие вопросы Delphi 1 17.04.2007 22:06