登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

miaozk2006

点滴积累与收藏:关于技术,关于生活

 
 
 

日志

 
 

vb全局热键的写法(占很少的资源)  

2012-01-01 17:30:35|  分类: 编程-VB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
看过网上很多的全局热键的写法,几乎都用 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控件注册 - 利用资源文件将dllocx打包进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的打开或收起

VBINI文件的读写、删除(对中文支持很好)

vb全局热键的写法(占很少的资源)

vb取消文本框的粘贴功能

VB常用文件操作类

VB获取特殊文件夹

VB获取windows各常用目录的函数(模块)

VB生成太极图

VB:常用内部函数大全,你会了几个呢?

vbSendMessage函数

精简VB程序的代码

VB:将数字转换为大写中文

VB:设定 MsgBox 在若干时间之后若无回应则自动关闭

VB:读取及设定NumLock/CapsLock/ScrollLock的值

VB:您知道 Mid$ 函量可以放在 '=' 的左方吗

VB后台获得按键,并执行自己的函数(非钩子及热键)

VB:将短文件名格式转成长文件名

vb中使用Iphlpapi.dll获取网络信息(上)

vb中使用Iphlpapi.dll获取网络信息(下)

更多精彩>>>

  评论这张
 
阅读(1676)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018