如何在系统中注册热键,用哪个API  我自己编了个抓图的小程序,我想在玩游戏时按下键盘的特定按键把屏幕抓取下来。

解决方案 »

  1.   

    Private Sub Form_Load()
        Dim ret As Long
        preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)
        
        idHotKey = 1
        Modifiers = 0& 'MOD_CONTROL
        uVirtKey = vbKeySpace
        ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
    End Sub
    --------------------
    Option ExplicitDeclare 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 LongPublic 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 Const BM_CLICK = &HF5
    Public preWinProc As Long
    Public Modifiers As Long, uVirtKey As Long, idHotKey As LongPrivate Type taLong
        ll As Long
    End TypePrivate Type t2Int
        lWord As Integer
        hWord As Integer
    End Type
    Public iii As Long
    Public hWndlong 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
            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                '写出你想做什么
                End If
            End If
        End If
        Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
     
    End Function