也就是说我想在程序打开的情况下(不一定获得焦点)按某组合键后,自动弹出密码窗口,输入正确后才可返回程序。
还请各位大虾帮忙!谢谢!!!

解决方案 »

  1.   

    Dim wHotkey As Long
       wHotkey = (HOTKEYF_ALT) * (2 ^ 8) + 65
       l = SendMessage(Me.hwnd, WM_SETHOTKEY, wHotkey, 0)
    则定义了Alt+A为快捷键
      

  2.   

    Option Explicit
    '  声明API函数
    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