Как минимизировать мое приложение с сочетанием клавиш Windows+m?

У меня есть простое приложение 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 не минимизирует его.

10
задан 10 revs, 2 users 87% 13 September 2011 в 09:21
поделиться

2 ответа

Используйте Spy ++, чтобы проверить, какие сообщения Windows получает ваше приложение при нажатии Window + M, затем проверьте наличие этого сообщения в WndProc вашей формы и сверните форму.

Похоже, что Windows + M отправляет сообщение WM_SIZE с параметром wParam, установленным на SIZE_MINIMIZED .

9
ответ дан 4 December 2019 в 01:56
поделиться

Посмотрите этот форум http://www.windows-tech.info/3/e4b66d1b1b690888.php решение заключается в переопределении метода CreateParams формы.

0
ответ дан 4 December 2019 в 01:56
поделиться