VB 全局热键

这篇博客介绍了如何在VB中设置全局热键。通过创建一个新的FORM,利用API函数`RegisterHotKey`和`UnregisterHotKey`,结合`SetWindowLong`和`GetWindowLong`,可以实现在VB程序中响应特定的组合键,如Alt+Ctrl+A,并在按下热键时弹出提示信息。
摘要由CSDN通过智能技术生成

新建立一个FORM~

Private Sub Form_Load()
    Dim ret As Long
    preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
    ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)
    idHotKey = 1
    Modifiers = MOD_ALT + MOD_CONTROL
    uVirtKey = vbKeyA
    ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Dim ret As Long
    ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
    Call UnregisterHotKey(Me.hwnd, uVirtKey)

End Sub

新建立一个模块

Option Explicit

Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As Long

Public Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)

Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As Long

Private Type taLong
    ll As Long
End Type

Private Type t2Int
    lWord As Integer
    hWord As Integer
End Type

Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = WM_HOTKEY Then
        If wParam = idHotKey Then
            Dim lp As taLong, i2 As t2Int
            lp.ll = lParam
            LSet i2 = lp
            If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then
                MsgBox "你按下了热键哦~"
            End If
        End If
    End If
    Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function

VB相关


VB 读写TXT文本文件函数

VB 提取TextBox 文本框中指定一行字符串

VB 获取汉字拼音的首字母

VB 汉字字符串转换成拼音

VB判断指定名字的进程是否存在函数

VB 两种方法实现热键

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB.NET中注册多个热键,可以使用Windows API函数来实现。以下是一个示例代码,说明如何在VB.NET中注册多个热键: 首先,导入系统的用户界面库: Imports System.Runtime.InteropServices 然后,定义一些常量和API函数: Public Class Form1 ' 定义常量 Private Const MOD_CONTROL As Integer = &H2 Private Const WM_HOTKEY As Integer = &H312 ' 导入Windows API函数 <DllImport("user32.dll")> _ Private Shared Function RegisterHotKey(ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean End Function <DllImport("user32.dll")> _ Private Shared Function UnregisterHotKey(ByVal hWnd As IntPtr, ByVal id As Integer) As Boolean End Function 接下来,在窗体加载事件中注册热键: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 注册热键 RegisterHotKey(Me.Handle, 1, MOD_CONTROL, Keys.A) RegisterHotKey(Me.Handle, 2, MOD_CONTROL, Keys.B) End Sub 接着,在窗体消息处理事件中处理热键消息: Protected Overrides Sub WndProc(ByRef m As Message) If m.Msg = WM_HOTKEY Then Dim hotkeyId As Integer = m.WParam.ToInt32() Select Case hotkeyId Case 1 ' 处理热键1的逻辑 MessageBox.Show("热键1被触发") Case 2 ' 处理热键2的逻辑 MessageBox.Show("热键2被触发") End Select End If MyBase.WndProc(m) End Sub 最后,在窗体关闭事件中取消注册热键: Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing ' 取消注册热键 UnregisterHotKey(Me.Handle, 1) UnregisterHotKey(Me.Handle, 2) End Sub 以上代码演示了如何在VB.NET中注册多个热键,并在热键被触发时处理相应的逻辑。你可以根据需要修改和扩展这个示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值