Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/170: Рейтинг темы: голосов - 170, средняя оценка - 4.67
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30

Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"

06.05.2012, 22:50. Показов 36951. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что происходит при нажатии этой кнопки в плане сообщениий, и как их перехватить и игнорировать,что бы окно не сворачивалось?
Чем это событие отличается от обычного сворачивания окна через кнопку свернуть ?
Календарик на рабочий стол в C++/WinAPI
Изображения
 
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2012, 22:50
Ответы с готовыми решениями:

Предотвратить сворачивание окна по нажатию кнопки Windows «Свернуть все окна»
Здравствуйте, пишу что то вроде гаджета на c# wpf, и возник вопрос: можно ли как нибудь предотвратить сворачивание окна при нажатии...

При нажатии кнопки закрытия окна, оно должно сворачиваться, а при нажатии на сворачивание - закрываться
привет всем)) задача такая: при нажатии кнопки закрытия окна, оно должно сворачиваться, а при нажатии на сворачивание - закрываться)) с...

Как запретить сворачиваться окну при нажатии кнопки "свернуть все окна"?
Как запретить сворачиваться окну при нажатии кнопки "свернуть все окна", или отловить событие сворачивания и развернуться?

40
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.05.2012, 02:02  [ТС]
Студворк — интернет-сервис помощи студентам
Пытался анализировать что происходит с окном во время такого сворачивания с помощью Spy, но чет не доганяю что проиходит
То что выдал Spy
// Прога N1
WM_WINDOWPOSCHANGING lpwp:000E1448
WM_GETMINMAXINFO lpmmi:000DFDA4
WM_GETMINMAXINFO lpmmi:000DFEBC
WM_WINDOWPOSCHANGING
WM_NCCALCSIZE fCalcValidRects:True lpncsp:000E13E8
WM_NCCALCSIZE fuValidRect:0000 lpncsp:000E1528
WM_WINDOWPOSCHANGED lpwp:000E1448
WM_MOVE xPos:33536 yPos:33536
WM_MOVE
WM_SIZE fwSizeType:SIZE_MINIMIZED nWidth:0 nHeight:0 // 1 !!!
WM_NOTIFY idCtrl:0 pnmh:000DE334
WM_NOTIFY
WM_SIZE
WM_WINDOWPOSCHANGED
// Прога N2
WM_MOVE xPos:33536 yPos:33536
WM_MOVE
WM_SIZE fwSizeType:SIZE_MINIMIZED nWidth:0 nHeight:0 // 1 !!!
WM_WINDOWPOSCHANGING lpwp:0012F3A8
WM_GETMINMAXINFO lpmmi:0012EDE0
WM_GETMINMAXINFO lpmmi:0012EDE0
WM_WINDOWPOSCHANGING
WM_SHOWWINDOW fShow:False fuStatus:0 (был вызван элемент ShowWindow)
WM_SHOWWINDOW
WM_WINDOWPOSCHANGING lpwp:0012F04C
WM_WINDOWPOSCHANGING
WM_WINDOWPOSCHANGED lpwp:0012F04C
WM_WINDOWPOSCHANGED
WM_STYLECHANGING wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:0012F2CC
WM_STYLECHANGING
WM_STYLECHANGED wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:0012F2CC
WM_STYLECHANGED
WM_STYLECHANGING wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:0012F348
WM_STYLECHANGING
WM_STYLECHANGED wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:0012F348
WM_STYLECHANGED
WM_STYLECHANGING wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:0012F348
WM_STYLECHANGING
WM_STYLECHANGED wStyleType:GWL_EXSTYLE | GWL_STYLE lpss:0012F348
WM_STYLECHANGED
WM_SIZE
WM_WINDOWPOSCHANGED
// Прога N3
WM_WINDOWPOSCHANGING lpwp:0839F370
WM_GETMINMAXINFO lpmmi:0839F0A0
WM_GETMINMAXINFO lpmmi:0839F218
WM_WINDOWPOSCHANGING
WM_NCCALCSIZE fCalcValidRects:True lpncsp:0839F310
WM_NCCALCSIZE fuValidRect:0000 lpncsp:0839F4B0
WM_WINDOWPOSCHANGED lpwp:0839F370
WM_MOVE xPos:33536 yPos:33536
WM_MOVE
WM_SIZE fwSizeType:SIZE_MINIMIZED nWidth:0 nHeight:0
WM_SIZE
WM_WINDOWPOSCHANGED
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 02:03
Цитата Сообщение от Toshkarik Посмотреть сообщение
Про гаджеты я имел ввиду, что ими управляет процесс/служба. Они не являются отдельными простыми оконными приложениями.
вот именно управляет , а всё управление сводится к тому , что бы поставить определённый гаджет , а дальше всю работу делает самостаятельное окно !!!
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
07.05.2012, 02:05
Нет у гаджета самостоятельного окна, как и у процесса/службы. sidebar "встраивается" в рабочий стол. Это что вроде старого active desktop.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 02:10
Цитата Сообщение от Toshkarik Посмотреть сообщение
Нет у гаджета самостоятельного окна
а я вам говорю , что есть и программа полностью в ответе за свою окно.

Добавлено через 2 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
"встраивается"
это как это оно встраивается????????????
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
07.05.2012, 02:11
Ну так можно спорить бесконечно, переубеждать Вас не буду, так как недостаточно пока знаний winapi, пусть каждый останется при своем мнении.

Добавлено через 43 секунды
Цитата Сообщение от Игорь с++ Посмотреть сообщение
это как это оно встраивается
Так же как и active desktop.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 02:14
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну так можно спорить бесконечно, переубеждать Вас не буду, так как недостаточно пока знаний winapi, пусть каждый останется при своем мнении.
Ок!!!
Просто не охото в столь поздний час лазить по инету и кидать ссылку с информацией.

Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
Так же как и active desktop.
ну так всраивание как вы говорите тоже и там нет.
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.05.2012, 02:14  [ТС]
Проверил код действительно работает нормально, спасибо!
Навсякий добавил

C++
1
2
3
4
5
6
7
case WM_SIZE:
if(wParam==SIZE_MINIMIZED) // это
  {  
   SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 1, 1, SWP_NOMOVE | SWP_NOSIZE);
   ShowWindow(hWnd,SW_SHOWNORMAL);
  }
break
(Поначалу необратил внимание на флаги SWP_NOMOVE | SWP_NOSIZE)
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
07.05.2012, 02:16
Цитата Сообщение от Игорь с++ Посмотреть сообщение
ну так всраивание как вы говорите тоже и там нет.
А что там по Вашему там же запускалось отдельное приложение со своим окном?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.05.2012, 02:20  [ТС]
Нет у гаджета самостоятельного окна, как и у процесса/службы. sidebar "встраивается" в рабочий стол
Ну если судить по cкринам то есть... Или чего то не понимаю...
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
07.05.2012, 02:28
Цитата Сообщение от Avazart Посмотреть сообщение
Ну если судить по кринам то есть... Или чего то не понимаю...
Вы наверно не правильно поняли меня. Гаджет - это не отдельное приложение. Гаджетами управляет sidebar. Кнопки закрыть и настроить, как я считаю, никак не относятся к кнопкам Закрыть/Свернуть/Развернуть у отдельных оконных приложений. Гаджеты пишутся на xml и html вроде. Sidebar их встраивает в рабочий стол как маленькие веб-странички, так же, как active desktop встраивал поддержку HTML в рабочий стол в ранних версиях windows ( до Vista ).
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.05.2012, 02:32  [ТС]
Игорь с++, теперь другой бок HWND_TOPMOST помещает форму поверх других, что приводит к тому что при разворачивании той же кнопкой форма висит поверх други окон.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
07.05.2012, 02:33
Первая же ссылка в гугле о создании гаджетов.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.05.2012, 02:36  [ТС]
Toshkarik, да это понятно...
То есть вы хотите сказать что служба урегулирывает как то с ОС вопрос сворачивания окон?
Обработка окон ведется не html или на js ?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
07.05.2012, 02:46
Ну насколько можно верить статье, то поддерживаются VBScript и Java Script. Обработка идет HTML, которая в свою очередь содержит эти скрипты. Причем ничего компилировать не нужно. Все файлы с xml и html кодами помещаются в папку с любым названием, но обязательно оканчивающуюся на .gadget

Добавлено через 4 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
То есть вы хотите сказать что служба урегулирывает как то с ОС вопрос сворачивания окон?
Ну как еще объяснить. Ну вот например для Aero вроде тоже запускается отдельная служба, но ведь никаких окон у нее нет, сворачивать нечего, она просто является частью интерфейса.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 11:35
Цитата Сообщение от Avazart Посмотреть сообщение
теперь другой бок HWND_TOPMOST помещает форму поверх других
Так после попытки свернуть окно измените это.Я же говорил с самого начало , что есть некоторые ньюансы в этом коде.Нужна доработка.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.05.2012, 16:49  [ТС]
Так после попытки свернуть окно измените это
Ну и как это сделать?
0
26 / 26 / 3
Регистрация: 13.04.2012
Сообщений: 61
15.08.2017, 02:05
Для того, чтобы система не сворачивала окно программы нужно, чтобы окно было поверх остальных (HWND_TOPMOST), и не дать обработать сообщение WM_SHOWWINDOW с параметрами wParam = false, lParam = SW_PARENTCLOSING

При этом не получается свернуть окно при нажатии на кнопку свернуть в правом верхнем углу. Для решения этой проблемы нужно перехватить сообщение WM_SYSCOMMAND с параметром wParam = SC_MINIMIZE и вызвать обработку WM_SHOWWINDOW вручную.

Вот пример на Borland C++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DWORD OWndProc = 0;
 
LRESULT APIENTRY MyWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 
    if(uMsg == WM_SHOWWINDOW && wParam == false && lParam == SW_PARENTCLOSING)
        return 0;
 
    if(uMsg == WM_SYSCOMMAND && wParam == SC_MINIMIZE)
        CallWindowProc((FARPROC)OWndProc, Form1->Handle, WM_SHOWWINDOW, false, SW_PARENTCLOSING);
 
    return CallWindowProc((FARPROC)OWndProc, Form1->Handle, uMsg, wParam, lParam);
}
 
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    OWndProc = SetWindowLong(Form1->Handle, GWL_WNDPROC, (long)MyWndProc);
}
0
 Аватар для worldandlife
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 513
23.06.2018, 20:03
Avazart, Здравствуйте, так у вас получилось запретить сворачивание окна при нажатии кнопки "Свернуть все окна" (win+d)? Просто пишу гаджет на C# WPF и удалось сделать чтобы окно все время было на "дне", а вот чтобы нельзя было свернуть пока не смог сделать
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.06.2018, 20:30  [ТС]
Честно говоря не помню, давно это было...

Добавлено через 47 секунд
Совет Unwebo пробовали?
0
 Аватар для worldandlife
629 / 41 / 25
Регистрация: 25.04.2017
Сообщений: 513
25.06.2018, 16:10
Цитата Сообщение от Avazart Посмотреть сообщение
Совет Unwebo пробовали?
Я сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  public partial class MainWindow : Window
        {
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MINIMIZE = 0xF020;
        private const int WM_SHOWWINDOW = 0x0018;
        
        private HwndSource hwndSource;
 
            // функция-перехватчик
            private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
            if (msg == WM_SHOWWINDOW && (int)wParam == 0 && (int)lParam==1)
            {
 
                //MessageBox.Show("drive");
                handled = true;
 
 
            }
            if (msg == WM_SYSCOMMAND && (int)wParam== SC_MINIMIZE)
            {
 
               
                handled = true;
            }
 
            return IntPtr.Zero;
        }
 
            public MainWindow()
            {
                InitializeComponent();
            }
 
            protected override void OnSourceInitialized(EventArgs e)
            {
                base.OnSourceInitialized(e);
                // создаем экземпляр HwndSource
                hwndSource = PresentationSource.FromVisual(this) as HwndSource;
                // и устанавливаем перехватчик
                hwndSource.AddHook(WndProc);
            }
        }
Minimize вышло запретить, а вот свернуть все окна нет, что то не правильно делаю

Добавлено через 1 час 50 минут
Avazart, Даже когда просто ловлю WM_SYSCOMMAND ничего не происходит
C#
1
2
3
4
5
6
  if (msg == WM_SYSCOMMAND  )
            {
 
                MessageBox.Show("Hello World!");
                // SendMessage(hwnd, WM_SYSCOMMAND, (IntPtr)WM_SHOWWINDOW, IntPtr.Zero);
            }
То есть окно не сворачивается? Что же тогда нужно отлавливать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2018, 16:10

JS как отслеживать все кнопки и при нажатии на них показывать скрытые окна
Добрый день. Есть страница сайта. На странице есть динамически создаваемое количество кнопок для ответа на комментарий пользователя....

Как запретить сворачивание окна через WinApi?
Как запретить сворачивание окна через WinApi? Нашёл код Delphi как переписать для C#? public procedure WMActivate(var Message:...

Разворачивание / сворачивание окна при нажатии на кнопку
При нажатии на кнопку программа должна разворачивать экран в полный размер, а при втором нажатии брать исходный размер. Делаю вот так, но...

Как запретить кнопки "Свернуть" и "Развернуть" у сторонней программы хэндл окна которой ивестен
Ребята, подскажите пожалуйста, мне нужно запретить кнопки "Свернуть" и "Развернуть" в заголовке окна. procedure...

Запретить сворачивание окна
Пишу виджет для рабочего стола. Как запретить сворачивание окна? Пробовал разворачивать по таймеру, но при отключении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru