如何使用Windows + m键盘快捷键最小化我的应用程序?

我在VB.NET 2008中有一个简单的winforms应用程序。我使用完全自定义外观的表单,所以没有标题栏,因此没有最小化,最大化和closuresbutton。 我已经创build了自定义控件来replace这些。

如果我的应用程序正在运行,并且点击“显示桌面”快捷方式,所有程序都会正确地最小化,包括我的。 但是,如果我使用Windows + M快捷方式,除了我最小化以外的所有程序。 看起来,缺less内置的最小化button在窗体上导致我的应用程序忽略Windows + M。

如何检测Windows + M ,特别是如果我的应用程序不活动,或者如何复制内置最小化button的function?

编辑:

我试着实现下面的代码,没有成功。

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收到任何消息。 或者,更可能的是,我没有正确拦截他们。

编辑:

我已经检查了我的应用程序使用Spy ++收到的消息(再次感谢SLaks),看起来WM_SIZE消息没有发送到我的应用程序。 我试着用标准的标题栏和button来试用一个常规的winforms应用程序,并且当按下Windows + M时它会收到WM_SIZE消息。 不知怎的,缺less标题栏阻止在我的自定义窗体的WndProc中收到WM_SIZE消息。

编辑:

我越深入这一点,我认为越多,可能没有办法解决这个问题。 我已经确认,如果窗体没有边框,则不会收到WM_SIZE消息。 坐在我旁边的开发人员在Qt中使用C ++,并且显示了完全相同的行为:没有窗体/窗口边框=当Windows + M被按下时没有消息来最小化。 Windows + D确实可以最大限度地减less一切,但我相信这是显示桌面button的重复。

我得出的结论是,如果窗体没有边界,Windows甚至不会生成消息,因此无法拦截它。 我注意到,Windows媒体播放器展品相同的行为。 当它在皮肤模式下时, Windows + M不会将其最小化。

Solutions Collecting From Web of "如何使用Windows + m键盘快捷键最小化我的应用程序?"

使用Spy ++检查当按下Window + M时应用程序接收到哪些Windows消息,然后检查窗体的WndProc中的消息并最小化表单。

看来,Windows + M发送一个wParam设置为SIZE_MINIMIZEDWM_SIZE消息。

我面临同样的问题。 我发现的解决方案是在最小化时隐藏应用程序。 因此,当窗口打开时,图标在任务栏中可见,但在应用程序最小化时不可见。