怎么实现像QQ热键设置一样的热键程序,最好能给个实例参考

解决方案 »

  1.   

    1   .
    Private Const WM_SETHOTKEY = &H32
    Private Const HOTKEYF_SHIFT = &H1
    Private Const HOTKEYF_CONTROL = &H2
    Private Const HOTKEYF_ALT = &H4
    Private Const HOTKEYF_EXT = &H8
    Private Declare Function SendMessageAny Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Type t2Byte
            lByte As Byte
            hByte As Byte
    End TypePrivate Type tInteger
            aint As Integer
    End TypeDim ii As tInteger, bb As t2Byte     '用来指定程序的快捷键Private Sub Form_Load()
      bb.hByte = HOTKEYF_CONTROL Or HOTKEYF_SHIFT: bb.lByte = vbKeyT
      LSet ii = bb:        wParam = CLng(ii.aint)
      i = SendMessageAny(Me.hWnd, WM_SETHOTKEY, wParam, 0)     '指定Ctl-Shift-T 为hotkey
    End Sub
    2
    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 Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
    Private Declare Function WaitMessage Lib "user32" () As Long
    '  声明结构
    Private Type POINTAPI
        x As Long
        y As Long
    End Type
    Private Type Msg
        hWnd As Long
        Message As Long
        wParam As Long
        lParam As Long
        time As Long
        pt As POINTAPI
    End Type
    '  声明常数
    Private Const MOD_ALT = &H1
    Private Const MOD_CONTROL = &H2
    Private Const MOD_SHIFT = &H4
    Private Const PM_REMOVE = &H1
    Private Const WM_HOTKEY = &H312Private HotKey_Fg As BooleanPrivate Sub Form_Load()
        Dim Message As Msg
        '注册 Ctrl+Y 为热键
        RegisterHotKey Me.hWnd, &HBFFF&, MOD_CONTROL, vbKeyY
        'RegisterHotKey Me.hWnd, &HBFF2&, MOD_CONTROL, vbKeyU
        Me.Show
        Form1.Hide
        '等待处理消息
        HotKey_Fg = False
        Do While Not HotKey_Fg
            '等待消息
            WaitMessage
            '检查是否热键被按下
            If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
                Shell "calc.exe", vbNormalFocus
                'Form1.Show 1
                
            End If
            
            '转让控制权,允许操作系统处理其他事件
            DoEvents
        Loop
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        HotKey_Fg = True
        '撤销热键的注册
        Call UnregisterHotKey(Me.hWnd, &HBFFF&)
    End Sub
      

  2.   

    楼上的你试过没有? laviewpbt(人一定要靠自己) 他的第二种方法是对的,至少我试过
    可以用ctrl或者shift的,即使窗口不在当前也可以