【问题标题】:How to minimize my application with the Windows+m keyboard shortcut?如何使用 Windows+m 键盘快捷键最小化我的应用程序?
【发布时间】:2010-02-17 20:18:20
【问题描述】:

我在 VB.NET 2008 中有一个简单的 winforms 应用程序。我正在使用具有完全自定义外观的表单,因此没有标题栏,因此没有最小化、最大化和关闭按钮。我创建了自定义控件来替换它们。

如果我的应用程序正在运行,并单击“显示桌面”快捷方式,所有程序都会正确最小化,包括我的程序。但是,如果我使用 Windows + M 快捷方式,除了我的所有程序都会最小化。似乎表单上缺少内置的最小化按钮会导致我的应用忽略 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 的任何消息。或者,更有可能是我没有正确拦截它们。

编辑:

我已经检查了我的应用使用 Spy++ 接收的消息(再次感谢 SLaks),看起来WM_SIZE 消息没有发送到我的应用。我尝试了一个带有标准标题栏和按钮的常规 winforms 应用程序,当按下 Windows + M 时,它会按预期收到WM_SIZE 消息。不知何故,缺少标题栏会阻止在我的自定义表单的 WndProc 中接收 WM_SIZE 消息。

编辑:

我越深入研究这一点,我就越认为可能无法解决这种行为。我已经确认如果表单没有边框,则不会收到WM_SIZE 消息。坐在我旁边的开发人员在 Qt 中使用 C++,并且表现出完全相同的行为:没有窗体/窗口边框 = 按下 Windows + M 时没有要最小化的消息。 Windows + D 确实可以最小化所有内容,但我认为这是“显示桌面”按钮的副本。

我得出的结论是,如果表单没有边框,Windows 甚至不会生成消息,因此无法拦截它。我注意到 Windows Media Player 表现出同样的行为。当它处于皮肤模式时,Windows + M 不会最小化它。

【问题讨论】:

  • 代表互联网 - 感谢您在您的程序中关心这一点。
  • 你检查过 Spy++ 中发生了什么吗?
  • 不是无边框的窗体,而是处理 NC(边框)区域的所有者绘制,使其看起来像您想要的那样,但仍然充当完整的窗口。

标签: .net windows winforms keyboard-shortcuts


【解决方案1】:

使用 Spy++ 检查您的应用在按下 Window+M 时收到哪些 Windows 消息,然后在表单的 WndProc 中检查该消息并最小化表单。

Windows+M 似乎发送了一条 WM_SIZE 消息,其中 wParam 设置为 SIZE_MINIMIZED

【讨论】:

  • @SLaks,感谢您提供此信息。我已经尝试过实施,但还没有运气(我的编辑中包含的代码)。还有什么建议吗?
【解决方案2】:

查看此论坛http://www.windows-tech.info/3/e4b66d1b1b690888.php 解决方案是覆盖表单的 CreateParams 方法。

【讨论】:

  • 该论坛帖子解决了一个完全不同的问题。任务栏切换从来都不是问题。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多