我在VB.NET 2008中有一个简单的winforms应用程序。我使用完全自定义外观的表单,所以没有标题栏,因此没有最小化,最大化和关闭按钮。我已经创建了自定义控件来替换它们。如何使用Windows + m键盘快捷键最小化我的应用程序?
如果我的应用程序正在运行,并且点击了“显示桌面”快捷方式,所有程序都会正确地最小化,包括我的。但是,如果我使用Windows + M快捷方式,所有程序除了我最小化。看起来,窗体上内置的最小化按钮的缺失导致我的应用程序忽略Windows + M。
如何检测的Windows + 中号,尤其是如果我的应用程序不活跃,或我怎么能复制内置的功能,最小化按钮?
编辑:
我试过执行下面的代码,但没有成功。
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 + 中号收到任何消息。或者,更可能的是,我没有正确拦截他们。
编辑:
我已经签出我的应用程序与间谍++(再次感谢SLaks)接收消息和它看起来像WM_SIZE
消息不越来越发送到我的应用程序。我试着用标准的标题栏和按钮尝试一个常规的winforms应用程序,并且它按照预期收到WM_SIZE
消息Windows + M被按下。不知何故,缺少标题栏会阻止在自定义窗体的WndProc中收到WM_SIZE
消息。
编辑:
我越挖成这样,我觉得有可能不是解决此问题的方式更多。我已确认,如果表单没有边框,则不会收到WM_SIZE
消息。坐在我旁边的开发人员在Qt中使用C++,并且展示了完全相同的行为:没有窗体/窗口边框=没有消息以最小化Windows + M被按下。 Windows + D可以最大限度地减少所有事情,但我相信这是显示桌面按钮的重复。
我得出的结论是,如果窗体没有边框,Windows甚至不会生成消息,因此无法拦截它。我注意到Windows媒体播放器呈现出相同的行为。当它处于剥皮模式时,Windows + M不会使其最小化。
代表互联网 - 感谢您在您的程序中关心此事。 – 2010-02-17 20:42:54
你检查了间谍++中发生了什么? – SLaks 2010-02-17 20:50:08
而不是无边界形式,处理NC(边界)区域的所有者绘画,使其看起来像你想要的方式,但仍然作为一个完整的窗口。 – 2014-03-06 22:28:08