У меня есть простое приложение winforms в VB.NET 2008. Я использую форму с полностью обычным внешним видом, поэтому нет строки заголовка, таким образом, кнопки минимизации, максимизации и закрытия. Я создал пользовательские элементы управления, чтобы заменить их.
Если у меня есть приложение, и я нажимаю ярлык "Показывать рабочий стол", все программы сведены к минимуму, включая мои. Но, если я использую ярлык Windows + M, все программы EXCEPT mine минимизируют. Похоже, что отсутствие встроенной кнопки минимизации в форме заставляет мое приложение игнорировать 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
. Разработчик, сидящий рядом со мной, использует С++ в Qt, и проявляется то же самое поведение: No form/window border = no message для минимизации при нажатии Windows + M.
Windows + D работает, чтобы свести к минимуму все, но я считаю, что это дубликат кнопки "Показать рабочий стол".
Я прихожу к выводу, что если форма не имеет границы, Windows даже не генерирует сообщение, поэтому невозможно ее перехватить. Я заметил, что Windows Media Player демонстрирует такое же поведение. Когда он находится в режиме скина, Windows + M не минимизирует его.