我要用vb写应用程序,当程序失去焦点(最小化)我如何在屏幕上接收激活此程序的按键!也就是说要重新激活这段程序,谢谢!!!

解决方案 »

  1.   

    全局hook
    win2000可以用 注册热键.
      

  2.   

    当窗口最小化时。他窗口里的TIMER控件还是能响应的。
    所以。
    可以在窗口里加一个TIMER控件来检测系统按钮。
      

  3.   

    例子:添加一个窗体,里面的代码是:
    Private Sub Form_Load()
        Call frmMainProc
        Call myFunction.RegHotKey(hwnd, 1, , vbKeyF4)
        Call myFunction.RegHotKey(hwnd, 2, , vbKeyF6)
        Call myFunction.RegHotKey(hwnd, 3, , vbKeyF7)End Sub
    添加一个模块,里面的代码:
    Option Explicit'Public Declare Function SetKeyboardHook Lib "KeybHook" (ByVal hwndPost As Long, ByVal MSG As Long) As Long
    'Public Declare Function ReleaseKeyboardHook Lib "KeybHook" () 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 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 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
    ' RegHotKey
    Public Const WM_HOTKEY = &H312
    Public Const MOD_ALT = &H1
    Public Const MOD_CONTROL = &H2
    Public Const MOD_SHIFT = &H4Public Const GWL_WNDPROC = (-4)
    Public Const WM_USER = &H400
    Public myFunction As New clsFunction
    Public OldWndProc As Long
    Public Function frmMainProc()
        OldWndProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf MainProc)
    End Function
      
    Public Function MainProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        '这里是我们写程序最重要的部分 相当于 VB 中的事件
        Select Case uMsg
            Case WM_HOTKEY
                Select Case wParam
                    Case Is = 1
                        '按了F4键,窗口最大化
                         Form1.WindowState = 2
                    Case Is = 2
                         '按了F6键,窗口最小化
                         Form1.WindowState = 1
                    Case Is = 3
                         '按了F4键,窗口恢复原状
                         Form1.WindowState = 0
                
                End Select
        End Select
        MainProc = CallWindowProc(OldWndProc, hwnd, uMsg, wParam, lParam)
    End Function
    添加一个类模块,里面的代码:'Private Const WM_HOTKEY = &H312
    'Private Const MOD_ALT = &H1
    'Private Const MOD_CONTROL = &H2
    'Private Const MOD_SHIFT = &H4Private Type POINTAPI
            X As Long
            Y As Long
    End TypeDim X1 As Long, Y1 As Long
    Dim RColor As Long, GColor As Long, BColor As Long
    Dim reColor As LongPublic Function RegHotKey(hwnd As Long, Optional RegKeyID As Long, Optional ModifiersKey As Long, Optional vk As Long) As Long
    '注册热键    Call RegisterHotKey(hwnd, RegKeyID, ModifiersKey, vk)
    End Function
    Public Function DelHotKey(hwnd As Long, Optional DelKeyID As Long) As Long
    '删除热键
        Call UnregisterHotKey(hwnd, DelKeyID)
    End Function
    粘完就运行一下,试试F4,F6,F7按键产生的效果,自己根据需要去修改吧。
      

  4.   

    补充: 上面例子中类模块的名字是 clsFunction ,模块随便起名,窗体名是form1