使用VB在应用程序中注册热键

原创 2004年07月12日 10:35:00


'窗体中
Option Explicit

Private Sub Form_Load()
Dim ret As Long
    '记录原来的window程序地址
    preWinProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
    '用自定义程序代替原来的window程序
    ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf wndproc)
    idHotKey = 1 'in the range &h0000 through &hBFFF
    Modifiers = MOD_ALT         '辅助键为Alt
    uVirtKey1 = vbKeyQ          '注册的热键为Alt+Q
    '注册热键
    ret = RegisterHotKey(Me.hWnd, idHotKey, Modifiers, uVirtKey1)
    If ret = 0 Then
        MsgBox "注册热键失败,请使用其它热键!", vbCritical, "错误"
    End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim ret As Long
    '取消Message的截取,使之送往原来的window程序
    ret = SetWindowLong(Me.hWnd, GWL_WNDPROC, preWinProc)
    Call UnregisterHotKey(Me.hWnd, uVirtKey1)
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, uVirtKey1 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
Dim lp As taLong, i2 As t2Int

    If Msg = WM_HOTKEY Then
        If wParam = idHotKey Then
            lp.ll = lParam
            LSet i2 = lp
            If (i2.lWord = Modifiers) And i2.hword = uVirtKey1 Then
                Form1.Visible = Not Form1.Visible
            End If
        End If
    End If
    '如果不是热键信息则调用原来的程序
    wndproc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Function

使用VB在应用程序中注册热键

  • zgqtxwd
  • zgqtxwd
  • 2008年04月24日 08:48
  • 88

详解VB中系统热键使用

最近弄这个很头疼了,没多少基础,不好理解,现在弄清楚了,这里总结一下. 先说要用到的API SetWindowLong GetWindowLong  '用来获取/设置窗口的消息处理函数地址,为什...
  • FranticBlack
  • FranticBlack
  • 2011年08月22日 14:44
  • 2819

在PB中实现系统热键功能

本方法可以实现在任何时候,即无论你的窗口是不是当前获得焦点的窗口,还是处于系统图标区,只要用户按下热键,都将触发窗口中的事件,在本例中实现窗口的状态切换。  1、首先我们必须声明Windows API...
  • Luckeryin
  • Luckeryin
  • 2008年11月28日 21:25
  • 1343

注册热键及使用方法

作者:古典小说网 头条:讨厌编程  、 古典古韵古典小说 作品:快乐课堂软件、任性动图软件、古典小说大全 定义 HACCEL m_hAccelerator;// 加速...
  • shuilan0066
  • shuilan0066
  • 2017年11月20日 11:17
  • 110

VB在程序中注册热键

 collected by barenx Option ExplicitPrivate Sub Form_Load()Sub Form_Load()Dim ret As Long    记录原来的wi...
  • barenx
  • barenx
  • 2008年03月31日 22:11
  • 780

在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错

今天在写程序的时候遇到了这个问题,在网上查了半天,终于找到原因.下面来总结一下 我想让用户在访问我的程序的Admin文件夹下的页面时需要登录,而在访问其他页面时则不需要,也就是说Admin文件...
  • LengMuYan
  • LengMuYan
  • 2017年01月17日 17:10
  • 972

Windows热键注册原理

要像系统注册一个全局热键,需要用到RegisterHotKey,函数用法如下(MSDN):BOOL RegisterHotKey(                  HWND hWnd,       ...
  • testcs_dn
  • testcs_dn
  • 2014年05月05日 14:55
  • 6604

MFC中注册热键操作--以CHotKeyCtrl设置热键为例

使用CHotKeyCtrl为程序添加热键功能,进行主界面的显示隐藏,类似于老板键,具体操作如下:第一:获取设置的热键并使用RegisterHotKey进行热键的注册,代码如下://获取热键键值 CHo...
  • zjccsg
  • zjccsg
  • 2016年07月16日 19:57
  • 433

C#注册全局热键

注册全局热键要用到Windows的API方法RegisterHotKey和UnregisterHotKey。一、声明注册热键方法[DllImport("user32.dll")] private st...
  • s4gg
  • s4gg
  • 2008年09月24日 20:31
  • 6940

Qt注册全局热键

Qt注册全局热键首先到 https://github.com/ddqd/qxtglobalshortcut5 下载要用到的库 在工程 pro 文件中加入子项目依赖,然后再项目上 qmake 一...
  • yangyang031213
  • yangyang031213
  • 2017年11月20日 17:20
  • 125
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用VB在应用程序中注册热键
举报原因:
原因补充:

(最多只允许输入30个字)