下面这段代码是设置CTRL+F10,CTRL+F11,CTRL+F12三个快捷键的操作。
新建一个工程,加入一个模块,窗体名为默认的form1模块中的代码如下:
Option ExplicitPublic Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
    
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const WM_HOTKEY = &H312
Public Const GWL_WNDPROC = -4Public Const MOD_CTRL = &H2Public Const VK_F10 = &H79
Public Const VK_F11 = &H7A
Public Const VK_F12 = &H7BPublic glWinRet As LongPublic Function CallbackMsgs(ByVal wHwnd As Long, ByVal wmsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long
    If wmsg = WM_HOTKEY Then
        Call DoFunctions(wp_id)
        CallbackMsgs = 1
        Exit Function
    End If
    CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wmsg, wp_id, lp_id)
End FunctionPublic Sub DoFunctions(ByVal vKeyID As Byte)
    
    Form1.Show
    Form1.WindowState = 0
    DoEvents
    If Form1.Visible = False Then
        Form1.Show
        Form1.WindowState = 0
    End If
    
    Form1.Cls
    
    Select Case vKeyID
    Case 0
        Form1.Print "执行 CTRL+F10 的操作!"
    Case 1
        Form1.Print "执行 CTRL+F11 的操作!"
    Case 2
        Form1.Print "执行 CTRL+F12 的操作!"
    End Select
End Sub窗体中的代码如下:
Option ExplicitDim retVal0 As Boolean, retVal1 As Boolean, retVal2 As BooleanPrivate Sub Form_Load()
    Me.AutoRedraw = True    MsgBox "将要设置 CTRL+F10, CTRL+F11, CTRL+F12 为快捷键"
    
    retVal0 = RegisterHotKey(Me.hwnd, 0, MOD_CTRL, VK_F10)
    If Not retVal0 Then
        MsgBox "无法设置CTRL+F10为快捷键!", vbCritical
    End If
    
    retVal1 = RegisterHotKey(Me.hwnd, 1, MOD_CTRL, VK_F11)
    If Not retVal1 Then
        MsgBox "无法设置CTRL+F11为快捷键!", vbCritical
    End If
    
    retVal2 = RegisterHotKey(Me.hwnd, 2, MOD_CTRL, VK_F12)
    If Not retVal2 Then
        MsgBox "无法设置CTRL+F12为快捷键!", vbCritical
    End If
    
    If (retVal0 = False And retVal1 = False And retVal2 = False) Then
        MsgBox "没有任何快捷键被设置!", vbCritical
        End
    End If
    
    glWinRet = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf CallbackMsgs)
    
End Sub
Private Sub Form_Resize()    If Me.WindowState = 1 Then
        Me.Hide
    End If
    
End Sub
Private Sub Form_Unload(Cancel As Integer)    If retVal0 = True Then
        UnregisterHotKey Me.hwnd, 0
    End If
    
    If retVal1 = True Then
        UnregisterHotKey Me.hwnd, 1
    End If
    
    If retVal2 = True Then
        UnregisterHotKey Me.hwnd, 2
    End If
    
End Sub

解决方案 »

  1.   

    这个其实可以简单实现的,在菜单编辑器中在欲加的项中加个"(&X)"即可.注:X是指你想定义的快捷键.
      

  2.   

    对,在caption 属性中加上(&x)就行了。
      

  3.   

    to:XUXUboy(旭旭) ,wangcun111(归鸿) 
        如果你们的窗体失去焦点后,还能响应这些快捷键吗?
        把题目看清楚点,好吗!
      

  4.   

    qbilbo(风之兄) 言之有理
    (&x)只在form获得焦点时有效
      

  5.   

    使用以下代码,当您按下 Ctrl + Alt + F 自动将窗口置于前台。Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_SETHOTKEY = &H32
    Const HOTKEYF_CONTROL = &H2
    Const HOTKEYF_ALT = &H4Private Sub Form_Load()
        Dim l As Long
        Dim wHotkey As Long
        wHotkey = (HOTKEYF_ALT Or HOTKEYF_CONTROL) * 256 + vbKeyF
        l = SendMessage(Me.hwnd, WM_SETHOTKEY, wHotkey, 0)
        '直接SendMessage注册热键
    End Sub
      

  6.   

    楼上的我没有用过,我以前下载过一个源代码,是可以的,
    不过,我这里没有源代码,不能帮你。你可以去
    www.dapha.net
    www.21code.com
    找一下。
    这两个都是VB源代码的基地
      

  7.   

    也可以这样
    在窗体上加入一个Timer  控件
    然后:Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerPublic Const VK_F12 = &H7BPublic Function MyHotKey(vKeyCode) As Boolean
    MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
    End FunctionPrivate Sub Timer1_Timer()
    If MyHotKey(VK_F12) Then。
    End If
    End Sub
      

  8.   

    这事还用得着 Timer?
    真是的。
      

  9.   

    可以试试用SETWINDOWHOOKEX具体的自己去找找吧!用HOOK