看过网上很多的全局热键的写法,几乎都用 do loop 写,很占资源。
这个是占很少资源的 全局热键。
-----------在窗体-------------------
Private Sub Form_Load()
RegHotKey Me.hwnd, CTRL + ALT, vbKeyD
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnRegHotKey Me.hwnd
End Sub
--------------在模块----------------
Option Explicit
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private 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
Private Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As Long
Private preWinProc As Long
Private Modifiers As Long, uVirtKey As Long, idHotKey As Long
Private Const WM_HOTKEY = &H312
Private Const GWL_WNDPROC = (-4)
Public Enum ThreeKey
CTRL = &H2
SHIFT = &H4
ALT = &H1
NONE = &H0
End Enum
Private Type taLong
ll As Long
End Type
Private Type t2Int
lWord As Integer
hWord As Integer
End Type
Private 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
Public Sub RegHotKey(FormHwnd As Long, fiers As ThreeKey, vKey As Long, Optional HotKey As Long = 1)
preWinProc = GetWindowLong(FormHwnd, GWL_WNDPROC)
SetWindowLong FormHwnd, GWL_WNDPROC, AddressOf Wndproc
idHotKey = HotKey
Modifiers = fiers
uVirtKey = vKey
RegisterHotKey FormHwnd, idHotKey, Modifiers, uVirtKey
End Sub
Public Sub UnRegHotKey(FormHwnd As Long)
SetWindowLong FormHwnd, GWL_WNDPROC, preWinProc
Call UnregisterHotKey(FormHwnd, uVirtKey)
End Sub
VB部分相关文章推荐
※VB快速读取 TextBox 第 N 行的资料
※VB禁止使用 Alt-Tab 或 Ctrl-Alt-Del
※生成迷宫的程序
※另一方法转换大小写
※VB控件注册 - 利用资源文件将dll、ocx打包进exe文件
※VB利用资源文件进行工作
※[转]vb高效编程(优化)
※VB阳历转阴历
※纯VB代码取得硬盘的物理序列号
※VB获得磁盘的文件系统
※做VB的,经常注册和反注册OCX控件和DLL链
※VB从程序中生成Exe文件
※VB6监视/操作剪贴板示例(VB6.0代码)
※VB6里自动提交/自动填表的一种相对通用的方案
※VB移动没有标题的窗体
※VB随机字母的函数
※VB删除带子文件夹和文件的文件夹
※VB怎样屏蔽 Alt+F4键
※VB 隐藏进程
※vb屏蔽文本框点右键时的弹出菜单
※VB手控Combobox的打开或收起
※在VB中INI文件的读写、删除(对中文支持很好)
※vb全局热键的写法(占很少的资源)
※vb取消文本框的粘贴功能
※VB常用文件操作类
※VB获取特殊文件夹
※VB获取windows各常用目录的函数(模块)
※VB生成太极图
※VB:常用内部函数大全,你会了几个呢?
※vb中SendMessage函数
※精简VB程序的代码
※VB:将数字转换为大写中文
※VB:设定 MsgBox 在若干时间之后若无回应则自动关闭
※VB:读取及设定NumLock/CapsLock/ScrollLock的值
※VB:您知道 Mid$ 函量可以放在 '=' 的左方吗
※VB后台获得按键,并执行自己的函数(非钩子及热键)
※VB:将短文件名格式转成长文件名
※在vb中使用Iphlpapi.dll获取网络信息(上)
※在vb中使用Iphlpapi.dll获取网络信息(下)
更多精彩>>>
评论