Windows api свернуть окно
Развернутое окно (maximized window)- окно, которое имеет стиль WS_MAXIMIZE. По умолчанию, Windows увеличивает развернутое окно так, чтобы оно заполнило экран или, в случае дочернего окна, рабочую область родительского окна. Хотя размеры окна могут быть установлены в тех же самых размерах развернутого окна, развернутое окно немного отличается. Windows автоматически перемещает строку заголовка окна в верхнюю часть экрана или в верхнюю часть рабочей области родительского окна. Windows также отключает опцию установки размеров рамки окна и возможность позиционирования окна в строке заголовка (так, чтобы пользователь не мог перемещать окно, перемещая строку заголовка).
Свернутое окно (minimized window) — окно, которое имеет стиль WS_MINIMIZE. По умолчанию, Windows уменьшает свернутое окно до размера его кнопки панели задач и перемещает свернутое окно в панель задач. Восстановленное окно (restored window) — окно, которое было возвращено к его прежним размерам и в позицию до свертывания или до развертывания. Если прикладная программа определяет стиль WS_MAXIMIZE или WS_MINIMIZE в функции CreateWindowEx, окно первоначально развернуто или свернуто. После создания окна, прикладная программа может использовать функцию CloseWindow, чтобы свернуть окно. Функция ArrangeIconicWindows упорядочивает пиктограммы на рабочем столе, или она упорядочивает свернутые дочерние окна в родительском окне. Функция OpenIcon восстанавливает свернутое окно в его предыдущих размерах и позиции.
Функция ShowWindow может свертывать, развертывать, или восстанавливать окно. Она может также устанавливать видимость окна и состояние активности. Функция SetWindowPlacement включает те же самые функциональные возможности, что и ShowWindow, но она может отменять свертывание, развертывание и восстановление позиции окна назначенные по умолчанию.
Функции IsZoomed и IsIconic определяют соответственно, развернуто ли или свернуто данное окно. Функция GetWindowPlacement восстанавливает свернутые, развернутые и восстановленные позиции окна, а также определяет состояние показа окна.
Когда Windows принимает команду, чтобы развернуть или восстановить свернутое окно, Windows посылает окну сообщение WM_QUERYOPEN. Если оконная процедура возвращает значение ЛОЖЬ(FALSE), Windows игнорирует команду Maximize (Развернуть) или Restore(Восстановить).
Windows автоматически устанавливает размер и позицию развернутого окна по определенным системой значениям по умолчанию для развернутого окна. Чтобы отменить эти значения по умолчанию, прикладная программа может или вызывать функцию SetWindowPlacement или обработать сообщение WM_GETMINMAXINFO, которое получаемое окном, когда Windows собирается развернуть его. WM_GETMINMAXINFO включает в себя указатель на структуру MINMAXINFO, содержащую значения Windows, используемые для установки развернутого размера и позиции. Замена этих значений отменяет значения по умолчанию.
Win32 API. Окна
Страница 21. Свернутое, развернутое и восстановленное окно
Свернутое, развернутое и восстановленное окно
Развернутое окно (maximized window)- окно, которое имеет стиль WS_MAXIMIZE. По умолчанию, Windows увеличивает развернутое окно так, чтобы оно заполнило экран или, в случае дочернего окна, рабочую область родительского окна. Хотя размеры окна могут быть установлены в тех же самых размерах развернутого окна, развернутое окно немного отличается. Windows автоматически перемещает строку заголовка окна в верхнюю часть экрана или в верхнюю часть рабочей области родительского окна. Windows также отключает опцию установки размеров рамки окна и возможность позиционирования окна в строке заголовка (так, чтобы пользователь не мог перемещать окно, перемещая строку заголовка).
Свернутое окно (minimized window) — окно, которое имеет стиль WS_MINIMIZE. По умолчанию, Windows уменьшает свернутое окно до размера его кнопки панели задач и перемещает свернутое окно в панель задач. Восстановленное окно (restored window) — окно, которое было возвращено к его прежним размерам и в позицию до свертывания или до развертывания. Если прикладная программа определяет стиль WS_MAXIMIZE или WS_MINIMIZE в функции CreateWindowEx, окно первоначально развернуто или свернуто. После создания окна, прикладная программа может использовать функцию CloseWindow, чтобы свернуть окно. Функция ArrangeIconicWindows упорядочивает пиктограммы на рабочем столе, или она упорядочивает свернутые дочерние окна в родительском окне. Функция OpenIcon восстанавливает свернутое окно в его предыдущих размерах и позиции.
Функция ShowWindow может свертывать, развертывать, или восстанавливать окно. Она может также устанавливать видимость окна и состояние активности. Функция SetWindowPlacement включает те же самые функциональные возможности, что и ShowWindow, но она может отменять свертывание, развертывание и восстановление позиции окна назначенные по умолчанию.
Функции IsZoomed и IsIconic определяют соответственно, развернуто ли или свернуто данное окно. Функция GetWindowPlacement восстанавливает свернутые, развернутые и восстановленные позиции окна, а также определяет состояние показа окна.
Когда Windows принимает команду, чтобы развернуть или восстановить свернутое окно, Windows посылает окну сообщение WM_QUERYOPEN. Если оконная процедура возвращает значение ЛОЖЬ(FALSE), Windows игнорирует команду Maximize (Развернуть) или Restore(Восстановить).
Windows автоматически устанавливает размер и позицию развернутого окна по определенным системой значениям по умолчанию для развернутого окна. Чтобы отменить эти значения по умолчанию, прикладная программа может или вызывать функцию SetWindowPlacement или обработать сообщение WM_GETMINMAXINFO, которое получаемое окном, когда Windows собирается развернуть его. WM_GETMINMAXINFO включает в себя указатель на структуру MINMAXINFO, содержащую значения Windows, используемые для установки развернутого размера и позиции. Замена этих значений отменяет значения по умолчанию.
Windows api свернуть окно
Здравствуйте. Мне надо свернуть и развернуть чужое приложение. И проблема в том, что приложение нормально не разворачивается.
Всякие PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0), ShowWindowAsync( wnd, SW_SHOWNORMAL ) и SetForegroundWindow( wnd ) я уже перепробовал в разных комбинациях.
Есть ли возможность узнать какое по счету нужное окно в alt-tab панели и столько раз послать alt-tab?
Или можно как-то программно кликнуть по значку окна в панели задач?
Возможно есть еще какие-то способы восстановить окно в то состояние, что было до сворачивания? Что можете посоветовать?
| От: | theTosh |
Дата: | 03.07.09 12:23 | |
Оценка: | -1 |
Здравствуйте, Andreww, Вы писали:
A>Здравствуйте. Мне надо свернуть и развернуть чужое приложение. И проблема в том, что приложение нормально не разворачивается.
A>Всякие PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0), ShowWindowAsync( wnd, SW_SHOWNORMAL ) и SetForegroundWindow( wnd ) я уже перепробовал в разных комбинациях.
A>Есть ли возможность узнать какое по счету нужное окно в alt-tab панели и столько раз послать alt-tab?
A>Или можно как-то программно кликнуть по значку окна в панели задач?
A>Возможно есть еще какие-то способы восстановить окно в то состояние, что было до сворачивания? Что можете посоветовать?
Свернуть: ShowWindow(HWND,SW_SHOWMINIMIZED)
Так ваще спрятать: ShowWindow(HWND,SW_HIDE)
Развернуть, как было: ShowWindow(HWND,SW_RESTORE)
| От: | Andreww |
Дата: | 03.07.09 16:46 | |
Оценка: |
Здравствуйте, theTosh, Вы писали:
T>Здравствуйте, Andreww, Вы писали:
A>>Здравствуйте. Мне надо свернуть и развернуть чужое приложение. И проблема в том, что приложение нормально не разворачивается.
A>>Всякие PostMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0), ShowWindowAsync( wnd, SW_SHOWNORMAL ) и SetForegroundWindow( wnd ) я уже перепробовал в разных комбинациях.
A>>Есть ли возможность узнать какое по счету нужное окно в alt-tab панели и столько раз послать alt-tab?
A>>Или можно как-то программно кликнуть по значку окна в панели задач?
A>>Возможно есть еще какие-то способы восстановить окно в то состояние, что было до сворачивания? Что можете посоветовать?
T>Свернуть: ShowWindow(HWND,SW_SHOWMINIMIZED)
T>Так ваще спрятать: ShowWindow(HWND,SW_HIDE)
T>Развернуть, как было: ShowWindow(HWND,SW_RESTORE)
Спасибо, но ShowWindow(HWND,SW_RESTORE) не помогло.
Точнее разворачивает, но не так, как оно было до сворачивания. ( до сворачивания игра была в полном окне, после разворачивания — в оконном режиме ). Клик же по иконке на панели задач или выбор в alt-tab панели разворачивает игру именно так, как она была свернута.
Так что вопрос в силе.
| От: | theTosh |
Дата: | 03.07.09 17:55 | |
Оценка: |
Здравствуйте, Andreww, Вы писали:
T>>Свернуть: ShowWindow(HWND,SW_SHOWMINIMIZED)
T>>Так ваще спрятать: ShowWindow(HWND,SW_HIDE)
T>>Развернуть, как было: ShowWindow(HWND,SW_RESTORE)
A>Спасибо, но ShowWindow(HWND,SW_RESTORE) не помогло.
A>Точнее разворачивает, но не так, как оно было до сворачивания. ( до сворачивания игра была в полном окне, после разворачивания — в оконном режиме ). Клик же по иконке на панели задач или выбор в alt-tab панели разворачивает игру именно так, как она была свернута.
A>Так что вопрос в силе.
Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.
| От: | Andreww |
Дата: | 06.07.09 16:46 | |
Оценка: |
Здравствуйте, theTosh, Вы писали:
T>Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.
flags — 0
showCmd — SW_SHOWNORMAL
и перед минимизацие, и после RESTORE. А вот rcNormalPosition разные.
| От: | theTosh |
Дата: | 06.07.09 17:11 | |
Оценка: |
Здравствуйте, Andreww, Вы писали:
T>>Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.
A>flags — 0
A>showCmd — SW_SHOWNORMAL
A>и перед минимизацие, и после RESTORE. А вот rcNormalPosition разные.
А в то время, когда окно минимизировано showCmd какое? Ты уверен, что нужное окно дёргаешь? Класс окна какой?
Вот еще попробуй для восстановления функцию OpenIcon().
| От: | Аноним |
Дата: | 06.10.09 18:03 | |
Оценка: |
Здравствуйте, theTosh, Вы писали:
T>Здравствуйте, Andreww, Вы писали:
T>>>Вызови перед минимизацией GetWindowPlacement() и посмотри, какие у него flags и showCmd. Может это поможет.
A>>flags — 0
A>>showCmd — SW_SHOWNORMAL
A>>и перед минимизацие, и после RESTORE. А вот rcNormalPosition разные.
T>А в то время, когда окно минимизировано showCmd какое? Ты уверен, что нужное окно дёргаешь? Класс окна какой?
T>Вот еще попробуй для восстановления функцию OpenIcon().
А что делать, если я знаю только hwnd главной формы, у которой в свою очередь может быть открыто какое-нибудь модальное окно?
Как это реализовано при переключении по Alt+Tab?
| От: | Аноним |
Дата: | 07.10.09 13:54 | |
Оценка: |
А>А что делать, если я знаю только hwnd главной формы, у которой в свою очередь может быть открыто какое-нибудь модальное окно?
А>Как это реализовано при переключении по Alt+Tab?
Проблема решена, т.к. приложение написано на Delphi, то главным окном является TApplication, при отправке ему сообщений всё нормально проходит)