Http://www.cnng.net  首页 原创软件   VB文挡  VB资源   乱舞人生  资源   Tags  给我留言 
用户登陆
用户:
密码:
 

站点日历
73 2022 - 12 48
    123
45678910
11121314151617
18192021222324
25262728293031


站点统计

最新日志
如何让你的发言语出惊人 获取windows特殊目录的函数(模块)
晴天 全局热键的写法(占很少的资源)   [ 日期:2007-11-23 ]
看过网上很多的全局热键的写法,几乎都用 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





[阅读字体大小: ]
[本日志由 admin 于 2013-11-01 10:56 PM 编辑]
引用通告地址 (0):
复制引用地址http://www.cnng.net/blog/trackback.asp?tbID=52
复制引用地址http://www.cnng.net/blog/trackback.asp?tbID=52&CP=GBK
暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户名:  密码:   注册? 验证码: 
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
表  情