当前位置: 代码迷 >> VB Dotnet >> 求好手帮助小修下全局热键的代码,让支持组合键
  详细解决方案

求好手帮助小修下全局热键的代码,让支持组合键

热度:126   发布时间:2016-04-25 02:02:42.0
求高手帮助小修下全局热键的代码,让支持组合键
我搜集的代码,全局热键的,但是只是HOME END 
我想要能改变这两个按键的方法, 比如 我不用home,我用F10。。

还有 ,能改成支持组合键吗??比如 CTRL +F10


源码如下:


'=================================================================
'用途:该模块用于注册热键(END,HOME)
'=================================================================
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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public 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
Public RHK_HOME_ID As Long, RHK_END_ID As Long
Public preWinProc As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_HOTKEY = &H312


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
        Select Case (wParam)
        Case RHK_HOME_ID: '<--------------------------Home
        
        Debug.Print "Home被按下"
  
        Case RHK_END_ID: '<--------------------------End
             Debug.Print "End被按下"
        End Select
    End If
    '与form_load中的ADDRESSOF WNDPROC对应
    WndProc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Function



'以下内容放在窗体里
'=================================================================
'用途:该模块用于注册热键(END,HOME)
'=================================================================
     preWinProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) '获得窗口过程的地址,或代表窗口过程的地址的句柄
    Call SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WndProc)
    
    '---------------------------注册home键
    RHK_HOME_ID = 181
    RHKmodifier = 0
    RHKvk = vbKeyHome
    RegisterHotKey Me.hWnd, RHK_HOME_ID, RHKmodifier, RHKvk
    
    '----------------------------注册end键
    RHK_END_ID = 443
    RHKvk = vbKeyEnd
    RegisterHotKey Me.hWnd, RHK_END_ID, RHKmodifier, RHKvk
'=================================================================
 

------解决思路----------------------
'加上这些定义'
Public Const MOD_ALT As Long = &H1
Public Const MOD_CONTROL As Long = &H2
Public Const MOD_SHIFT As Long = &H4
Public Const MOD_WIN As Long = &H8
Public RHK_F10_ID As Long


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
        Select Case (wParam)
            Case RHK_F10_ID
                Debug.Print "Ctrl+F10被按下"
  
            ...
        End Select
    End If
    WndProc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Function

    '---------------------------注册Ctrl+F10键
    RHK_F10_ID = 121 '<-要和其它ID不同'
    RHKmodifier = MOD_CONTROL
    RHKvk = vbKeyF10
    RegisterHotKey Me.hWnd, RHK_F10_ID, RHKmodifier, RHKvk

------解决思路----------------------
RHKmodifier = MOD_CONTROL Or MOD_ALT
RHKvk = vbKeyF10
  相关解决方案