如何使用 Windows+m 鍵盤快捷鍵最小化我的應用程序?
我在 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 應用程序,當按下+時,它會WM_SIZE按預期接收消息。不知何故,缺少標題欄會阻止在我的自定義表單的 WndProc 中接收消息。Windows``M``WM_SIZE編輯:
我越深入研究這一點,我就越認為可能無法解決這種行為。我已經確認如果表單沒有邊框,則不會
WM_SIZE收到任何消息。坐在我旁邊的開發人員在 Qt 中使用 C++,並且表現出完全相同的行為:沒有窗體/視窗邊框 =按下Windows+時沒有要最小化的消息。+確實可以最小化所有內容,但我相信這是“顯示桌面”按鈕的副本。M``Windows``D我得出的結論是,如果表單沒有邊框,Windows 甚至不會生成消息,因此無法攔截它。我注意到 Windows Media Player 表現出同樣的行為。當它處於蒙皮模式時,
Windows+M不會將其最小化。
使用 Spy++ 檢查您的應用在按下 Window+M 時收到哪些 Windows 消息,然後在表單中檢查該消息
WndProc並最小化表單。Windows+M 似乎發送了
WM_SIZE一條 wParam 設置為的消息SIZE_MINIMIZED。
檢查這個論壇http://www.windows-tech.info/3/e4b66d1b1b690888.php解決方案是覆蓋表單的 CreateParams 方法。