У меня есть простое приложение winforms в VB.NET 2008. Я использую форму с абсолютно пользовательским взглядом, таким образом, нет никакой строки заголовка, таким образом не минимизируйте, максимизируйте, и близкие кнопки. Я создал пользовательские элементы управления для замены их.
Если у меня есть свое выполнение приложения, и я нажимаю ярлык 'Show Desktop', все программы минимизируют правильно, включая мое. Но, если я использую Windows + M ярлык, все программы шахта EXCEPT минимизируют. Кажется, что отсутствие встроенной кнопки свертывания окна на форме заставляет мое приложение игнорировать Windows + M.
Как я могу обнаружить Windows + M, особенно если мое приложение не активно, или как я могу копировать функциональность встроенной Кнопки свертывания окна?
Править:
Я попытался реализовать следующий код без успеха.
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. Или более вероятно я не прерываю их правильно.
Править:
Я проверил сообщения, что мое приложение получает со Шпионом ++ (еще раз спасибо SLaks), и это похоже WM_SIZE
сообщение не становится отправленным в мое приложение. Я попробовал обычное приложение winforms стандартной строкой заголовка и кнопками, и она получает WM_SIZE
обменивайтесь сообщениями как ожидалось, когда Windows + M будет нажат. Так или иначе отсутствие строки заголовка предотвращает WM_SIZE
сообщение от того, чтобы быть полученным в WndProc моей пользовательской формы.
Править:
Чем больше я рою в это, тем больше, что я думаю, не может быть пути вокруг этого поведения. Я подтвердил это, если форма не имеет границы, нет WM_SIZE
сообщение получено. Разработчик, сидящий рядом со мной, использует C++ в QT, и то же самое поведение показано: Никакая форма/граница окна = никакое сообщение для уменьшения, когда Windows + M нажимается. Windows + D действительно работает для уменьшения всего, но я полагаю, что это - дубликат кнопки Show Desktop.
Я прихожу к выводу, что, если форма не имеет никакой границы, Windows даже не генерирует сообщение, таким образом нет никакого способа прервать его. Я заметил, что Windows Media Player показывает это то же поведение. Когда это находится в покрытом кожей режиме, Windows + M не минимизирует его.
Используйте Spy ++, чтобы проверить, какие сообщения Windows получает ваше приложение при нажатии Window + M, затем проверьте наличие этого сообщения в WndProc
вашей формы и сверните форму.
Похоже, что Windows + M отправляет сообщение WM_SIZE
с параметром wParam, установленным на SIZE_MINIMIZED
.
Посмотрите этот форум http://www.windows-tech.info/3/e4b66d1b1b690888.php решение заключается в переопределении метода CreateParams формы.