У меня есть простое приложение winforms в VB.NET 2008. Я использую форму с полностью настраиваемым внешним видом, поэтому строка заголовка отсутствует, поэтому нет кнопок свертывания, разворачивания и закрытия. Я создал пользовательские элементы управления, чтобы заменить их.
Если у меня запущено приложение и я нажимаю ярлык «Показать рабочий стол», все программы корректно свернуты, включая мою. Но, если я использую ярлык Windows + M , все программы за исключением моей минимизируются. Кажется, что отсутствие встроенной кнопки минимизации в форме заставляет мое приложение игнорировать Windows + M .
Как я могу обнаружить Windows + M , особенно если мое приложение не активно или как мне дублировать функции встроенной кнопки сворачивания?
EDIT:
Я попытался реализовать следующий код, но безуспешно.
Const WM_SIZE As Integer = &H5
Const SIZE_MINIMIZED As Integer = &H1
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If m.Msg = WM_SIZE Then
If m.WParam = SIZE_MINIMIZED Then
//Minimize the form.
Me.WindowState = FormWindowState.Minimized
End If
End If
End Sub
Это похоже на правильный подход (благодаря SLaks), но мое приложение не получает никаких сообщений от Windows + M . Или, скорее всего, я не перехватываю их должным образом.
EDIT:
Я проверил сообщения, которые мое приложение получает с помощью Spy ++ (еще раз спасибо, SLaks), и похоже, что сообщение WM_SIZE
не отправляется в мое приложение. Я попробовал обычное приложение winforms со стандартной строкой заголовка и кнопками, и оно получает сообщение WM_SIZE
, как и ожидалось, когда нажимается Windows + M . Каким-то образом отсутствие строки заголовка препятствует получению сообщения WM_SIZE
в WndProc моей пользовательской формы.
EDIT:
Чем больше я копаюсь в этом, тем больше я думаю, что, возможно, не будет способа обойти это поведение. Я подтвердил, что если форма не имеет границы, сообщение WM_SIZE
не принимается. Сидящий рядом со мной разработчик использует C ++ в Qt, и демонстрируется точно такое же поведение: нет границы формы / окна = нет сообщения, которое можно свернуть при нажатии Windows + M .
Windows + D работает, чтобы свернуть все, но я считаю, что это дубликат кнопки Показать рабочий стол.
Я прихожу к выводу, что если форма не имеет границы, Windows даже не генерирует сообщение, поэтому нет способа его перехватить. Я заметил, что Windows Media Player демонстрирует такое же поведение. Когда он находится в режиме скинов, Windows + M не минимизирует его.