章鱼哥出品—VB.NET 自定义快捷键使用详解之全局热键

原创 2014年10月06日 01:49:47

如何设置VB.NET 窗体的全局热键(快捷键),很多人都为这个头疼,看到网上有很多的例子,但是都感觉好复杂,越看越糊涂。经过笔者的研究,把代码做了最简化的处理,使您一看就明白。本文使用API函数注册热键表,下面代码可以直接复制运行,不用做任何修改,方便您测试学习。

关于半全局热键(只对一个窗体或控件集有效)的定义,我在另一篇博文中有说明章鱼哥出品—VB.Net 自定义快捷键详解之半全局快捷键

<p>
</p><p>'********************************************************************************  </p>'作者:章鱼哥  QQ:3107073263 群:309816713  
'需要源码或是有好的建议请联系我
'主要内容:
'       利用API函数设置全局热键(快捷键)的流程和实现
'实现功能:
'      按下Shift+Q时 触发Button1的Click事件
'     按下Ctrl+D时,触发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) '循环监听消息
    End Sub
    '按钮1的Click事件
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = "此时触发按钮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 = "此时触发按钮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 Sub
End Class

代码实现效果截图:


问题:本来是想使用Application.AddMessageFilter 方法的,但是后来发现单个按键的快捷键还能实现,但是组合快捷键就不容易实现了,有大神实现的,请赐教


章鱼哥出品—VB.Net 自定义快捷键详解之半全局快捷键

VB.Net 定义快捷键有些很方便的方法,我自己将这些快捷键分成了三类(非专业啊,别误导大家)         1、全局快捷键。作用在整个程序,就是不论现在的焦点在哪,在Form1也好Form2也好...
  • zhangyubishoulin
  • zhangyubishoulin
  • 2014年10月06日 17:19
  • 2623

vb.net 关于给Button设置快捷键功能

在窗体的KeyDown的时间中输入以下代码 ---------------------------------coding-------------------------------- ...
  • suming000
  • suming000
  • 2017年03月29日 21:18
  • 565

[VB.NET] 设置 全局热键

'自己在原文的基础上稍作修改,只要把以下代码粘贴到Form1的窗体代码中就能直接运行。'不能用于子窗体中。  Public Class Form1    Public Const WM_HOTKEY ...
  • wl1234234
  • wl1234234
  • 2011年01月11日 19:03
  • 1063

C#全局热键设置与窗体热键设置实例

1、窗体热键 首先要设置主窗体KeyPreview为true,可直接在属性中进行设置, 或者在窗体加载中设置: this.KeyPreview = true; 然后添加窗体KeyDown事件,如...
  • cuoban
  • cuoban
  • 2016年02月26日 16:16
  • 3657

VB为程序窗口设置快捷键,一个小例子

  • 2012年08月10日 10:48
  • 3KB
  • 下载

VB 全局热键

今天在研究我的新系统的时候坐在我旁边的磊磊说...想要一个热键功能~习惯了使用热键...我想想也是...于是就上网找了找VB全局热键的写法...一看才知道NND全局热键都很占资源大都用DO~LOOP来...
  • ZOU_SEAFARER
  • ZOU_SEAFARER
  • 2007年03月16日 23:08
  • 1988

章鱼哥出品—VB.NET 自定义快捷键使用详解之全局热键

如何设置VB.NET 窗体的全局热键(快捷键),
  • zhangyubishoulin
  • zhangyubishoulin
  • 2014年10月06日 01:49
  • 4374

VB.NET通过热键显示或隐藏窗体

  • 2012年09月25日 16:40
  • 27KB
  • 下载

Windows编程实现自定义全局热键

一、实现全局热键主要使用以下API(详情查看MSDN):- 获取热键标识:GlobalAddAtom - 注册热键:RegisterHotKey - 注销热键:UnregisterHotKey - 释...
  • zhoufuxinzfx
  • zhoufuxinzfx
  • 2016年03月09日 16:22
  • 3040

MFC实现全局热键

#define F10 0x00001
  • nonecode
  • nonecode
  • 2014年05月10日 13:46
  • 3447
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:章鱼哥出品—VB.NET 自定义快捷键使用详解之全局热键
举报原因:
原因补充:

(最多只允许输入30个字)