powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Комбинация win+d и разворачивание моего окна
14 сообщений из 14, страница 1 из 1
Комбинация win+d и разворачивание моего окна
    #38990281
Solyanik Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Окно главной формы без границ, при запуске развернуто таким образом:

Код: plaintext
1.
2.
this.Bounds = Screen.PrimaryScreen.WorkingArea;
this.WindowState = FormWindowState.Normal;

Приложение не закрывается, а только сворачивается в трей:
Код: plaintext
1.
2.
3.
4.
5.
private void fMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = CancelClose;
            this.Hide();
        }

при двойном клике на иконке трея разворачивается:
Код: plaintext
1.
2.
3.
this.Show();
this.Activate();
this.WindowState = FormWindowState.Normal;

С этим все отлично, все работает. Проблема в следующем - если пользователь сворачивает все окна виндовой кнопкой "Показать рабочий стол" (или win+d) - мое приложение естественно тоже сворачивается, НО при открытии любого другого приложения - мое тоже разворачивается на заднем плане.

Подскажите, пожалуйста, как от этого избавиться?

Заранее спасибо)
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38990862
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solyanik Alexey,

а, зачем тебе окно держать постоянно открытым? почему не закрываешь его?
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38990977
Solyanik Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pation,

приложение всегда висит в трее, его нельзя закрыть, можно только свернуть.

НО даже если оно свернуто, а потом в какой-то момент пользователь нажимает win+d и открывает любую другую программу - моя разворачивается на весь экран. Вот в этом-то и загвоздка
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991054
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solyanik Alexeypation,

приложение всегда висит в трее, его нельзя закрыть, можно только свернуть.

НО даже если оно свернуто, а потом в какой-то момент пользователь нажимает win+d и открывает любую другую программу - моя разворачивается на весь экран. Вот в этом-то и загвоздканужно не сворачивать, а прятать (visible = false).
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991055
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя кажется я не правильно понял.
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991066
Solyanik Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

к сожалению в обоих случаях одно и тоже
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991070
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй нажать Windows-M - свернуть все окна
По идее, Windows-D это быстрый доступ к Desktop'у и при адекватном поведении, окна должны вернуться в прежнее состояние, когда пользователь открыл новое или старое окно, но это далеко не всегда так, так как программа, программе рознь.
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991075
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solyanik AlexeyAntonariy,

к сожалению в обоих случаях одно и тожев то, что свернутое разворачивается - верю, сам наблюдал, но чтобы невидимое само собой показывалось - нет.
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991124
Solyanik Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,
Спасибо за ответ!

нигде в коде нет сворачивания окна,

Код: c#
1.
2.
3.
4.
5.
private void fMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = CancelClose;
            this.Hide();
        }



этот же код не сворачивает, а также делает visible=false через метод Hide().


Roman Mejtes,

Спасибо за ответ!
win+m сворачивает все окна кроме моего! Как так?! Может натолкнете на мысль - что может быть у меня не так.
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991170
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyно чтобы невидимое само собой показывалось - нет.
Я нарвался. Tray+форма которая Me.Visible = False в Load (с некоторыми махинациями, чтоб не мелькала при загрузке, не суть)
+ код вызова меню из трея.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
      Case WM_MySysTrayNotify 'уведомления Tray -вместо WM_MOUSEMOVE
        Dim lw_lparam As Integer = LOWORD(m.LParam)
        Select Case lw_lparam
          Case WM_RBUTTONUP 'display popup menu
            'Debug.Print("WM_RBUTTONUP")
            SetForegroundWindow(Me.Handle)
            TrackPopupMenu(Me.menu_App.Handle, TPM_LEFTBUTTON,
             Control.MousePosition.X, Control.MousePosition.Y, 0, Me.Handle)



При показанном меню (при том что сработала SetForegroundWindow),
нажимаем ESC (меню закрывается), затем ENTER
и моя Me, которая .Visible = False мерзким образом появлялась на экран.
В VB6 такого глюка не было, в .Net возник.

Вылечил так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  Public Const WM_QUERYOPEN = &H13

  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    Select Case m.Msg
...
      Case WM_QUERYOPEN
        'Debug.WriteLine("WM_QUERYOPEN")
        m.Result = New IntPtr(0) 'the window about to restore,should return FALSE to prevent from being opened
        Exit Sub
...
      Case Else
    End Select

    ' Forward message to base WndProc.
    MyBase.WndProc(m)
  End Sub



Уж не знаю насколько это поможет автору,
насколько понимаю автор таки показывает форму на экран, моя затычка абсолютна, но м.б. какие условия наложить.
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991275
Solyanik Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,
спасибо за совет!

Сделал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        private const int WM_QUERYOPEN = 0x0013;

        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            if (m.Msg == WM_QUERYOPEN)
            {
                m.Result = new IntPtr(0);
            }

            base.WndProc(ref m);
        }



проблема исправилась на половину, т.е. если спрятать приложение, потом нажать win+d и открыть любое другое приложение - мое больше не показывается (а раньше даже в таком случае оно показывалось),

НО если мое приложение показано на экране - то после win+d оно прячется и при открытии любого другого все так же и появляется на заднем плане...
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991582
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solyanik Alexeypation,

приложение всегда висит в трее, его нельзя закрыть, можно только свернуть.

НО даже если оно свернуто, а потом в какой-то момент пользователь нажимает win+d и открывает любую другую программу - моя разворачивается на весь экран. Вот в этом-то и загвоздка
я говорю не о приложении, а о окне
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991774
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Solyanik Alexeyпроблема исправилась на половину, т.е. если ...
Я не говорил что даю тебе решение ТВОЕЙ проблемы.
В общем-то и не вдавался в нее.
Просто показалось в чем-то похоже на мою которую описал.
Если хочешь идти по этому пути, то разумно смотреть какие сообщения получает окно, результатом чего является "глюк",
потом читать описание этих сообщений в Native MSDN и играться.
Ну, и следует понимать что .Net свойства-методы не всегда линейно соответствует API-представлению.
Т.е. например Me.Enabled= и EnableWindow(Me.Handle,..) это не совсем одно и то же
В нек. случаях помогает изначальное использование API -вызова вместо установки .Net свойства.
И даже при таком подходе .Net-объектная модель всегда может "поднасрать", поэтому надо аккуратно и проверять чего получается.

Ну, либо глушить/затыкать через WndProc, пример чего я тебе привел.
...
Рейтинг: 0 / 0
Комбинация win+d и разворачивание моего окна
    #38991844
Solyanik Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77Я не говорил что даю тебе решение ТВОЕЙ проблемы.


так я ж ничего плохого не говорю) наоборот вы как раз и натолкнули меня на
Дмитрий77Если хочешь идти по этому пути, то разумно смотреть какие сообщения получает окно, результатом чего является "глюк",
потом читать описание этих сообщений в Native MSDN и играться.


Так что в любом случае спасибо!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Комбинация win+d и разворачивание моего окна
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]