VB 全局热键

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建立一个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 两种方法实现热键

VB 使用SendMessage枚举文件与目录

VB 二进制数组与十六进制字符串相互转换

VB 二进制数据读写实例

VB 进制转换大全(十进制、十六进制、八进制、二进制、二进制流)互转

VB 判断是否文本文件

VB 读取UTF-8编码文件函数

VB 按指定编码格式写入文本文件

VB UTF-8 URL编码函数

VB 实现UTF-8 GB2312互转

VB 设置ListView中指定一行的背景颜色

VB SendMessage向其他程序窗口发送字符串消息实例

VB Listview导出到CSV文件函数

vb卸载所有窗体

VBNull, Empty, Nothing, and vbNullString的区别

利用API函数计算程序运行时间VB

获取快捷方式原文件路径vb路径

利用VB函数Dir()实现递归搜索目录

VB数组的清除和重新定义

RtlAdjustPrivilege来调整进程权限(VB6.0代码)

获取对象的接口信息(方法/属性/事件)(VB6代码)

VB6中给数组赋值的限制

[vb]一些窗口消息的详解

VB直接播放EXE文件中的声音文件

VB中利用CopyMemory使用指针

VB读写注册表的三种方法

[VB]SaveSetting 语句 和 DeleteSetting 语句

VB APP对象属性一览表 + 灵活使用VBAPP对象

[vb]SendMessageA函数

使用VB绘制抛物线动画曲线

关于vb中的容器

[vb]利用WScript.Shell对象隐藏cmd命令行运行

浅析VB For Each.Next语句

VB中窗体模块、标准模块、类模块的区别

引用 VB类模块

VB中什么是类,类模块有什么作用

VB SendKeys 语句

VB 全局热键

VB轻松调用其他程序

vb读取txt文件到textbox

如何去优化你的VB程序3

如何去优化你的VB程序2

如何去优化你的VB程序1

[VB]在状态栏中显示帮助信息

[VB]把屏幕保存为图像

Mp3Play.ocx控件让音乐之声响起来


更多精彩>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值