如何設置VB.NET 窗體的全局熱鍵(快捷鍵),很多人都為這個頭疼,看到網上有很多的例子,但是都感覺好復雜,越看越糊涂。經過筆者的研究,把代碼做了最簡化的處理,使您一看就明白。本文使用API函數注冊熱鍵表,下面代碼可以直接復制運行,不用做任何修改,方便您測試學習。
關于半全局熱鍵(只對一個窗體或控件集有效)的定義,我在另一篇博文中有說明(章魚哥出品—VB.Net 自定義快捷鍵詳解之半全局快捷鍵)
<p></p><p>'******************************************************************************** </p>'作者:章魚哥 QQ:3107073263 群:309816713 '需要源碼或是有好的建議請聯系我'主要內容:' 利用API函數設置全局熱鍵(快捷鍵)的流程和實現'實現功能:' 按下Shift+Q時 觸發(fā)Button1的Click事件' 按下Ctrl+D時,觸發(fā)Button2的Click事件'********************************************************************************* Public Class Form1 '聲明注冊熱鍵API函數 Public Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Integer, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer '聲明注銷熱鍵API函數 Public Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Integer, ByVal id As Integer) As Integer Public Const WM_HOTKEY As Short = &H312S '熱鍵消息ID,此值固定,不能修改 Public Const MOD_ALT As Short = &H1S 'ALT按鍵ID Public Const MOD_CONTROL As Short = &H2S 'Ctrl Public Const MOD_SHIFT As Short = &H4S 'Shift Public uVirtKey1, Modifiers, idHotKey As Integer Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load idHotKey = 1 '注冊的熱鍵的消息ID,這個值可以隨便定義,只要與下面兩個參數對應即可 Modifiers = MOD_SHIFT '輔助鍵為Shift uVirtKey1 = Keys.Q '注冊的熱鍵為Shift+Q '注冊熱鍵 RegisterHotKey(Me.Handle.ToInt32, idHotKey, Modifiers, uVirtKey1) '注冊的熱鍵為Shift+Q RegisterHotKey(Me.Handle.ToInt32, 2, MOD_CONTROL, Keys.D) '注冊的熱鍵為Ctrl+D。這里和上步一樣,我把參數直接寫了,沒有先賦值,相信大家都明白 End Sub '窗體的消息處理函數 Protected Overrides Sub WndProc(ByRef m As Message) If m.Msg = WM_HOTKEY Then '判斷是否為熱鍵消息 Select Case m.WParam.ToInt32 '判斷熱鍵消息的注冊ID Case 1 Button1_Click(Nothing, Nothing) 'Shift+Q Case 2 Button2_Click(Nothing, Nothing) 'Ctrl+D End Select End If MyBase.WndProc(m) '循環(huán)監(jiān)聽消息 End Sub '按鈕1的Click事件 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "此時觸發(fā)按鈕1,快捷鍵" & Button1.Text End Sub '按鈕2的Click事件 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Text = "此時觸發(fā)按鈕2,快捷鍵" & Button2.Text End Sub '最后別忘記注銷熱鍵哦 Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing UnregisterHotKey(Me.Handle.ToInt32, uVirtKey1) UnregisterHotKey(Me.Handle.ToInt32, Keys.D) End SubEnd Class
代碼實現效果截圖:
問題:本來是想使用Application.AddMessageFilter 方法的,但是后來發(fā)現單個按鍵的快捷鍵還能實現,但是組合快捷鍵就不容易實現了,有大神實現的,請賜教