写一个按下F2键就有声音提示的VB程序,我想了好久老实现不了,请帮助!要求:
1、要在后台运行,在任何时候只要按下F2键便能听到指定的声音(d:\msg.wav)
2、开机后自启动该程序
3、可否写出源代码谢谢

解决方案 »

  1.   

    不行啊,要求必须用到这个键。反正它要求在WINDOWS的任何页面下按F2键就能出声,不能用beep
      

  2.   

    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerPrivate Sub Timer1_Timer()
            Dim i As Integer
            i = GetAsyncKeyState(vbKeyF2)        If (i And 1) <> 0 Then
                '播放声音
            End If
    End Sub
      

  3.   

    yachong(蚜虫),不行啊。如果界面失去焦点时按F2键就没用了的
      

  4.   

    很简单的东西模块Option Explicit
    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 LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hwnd As Long, ByVal nIndex 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 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
         hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As LongPublic Const WM_HOTKEY = &H312
    Public Const GWL_WNDPROC = -4
    Public Const WM_SETHOTKEY = &H32Public Const MOD_CTRL = &H2
    Public Const MOD_SHFT = &H4
    Public Const MOD_ALT = &H1
    Private Const VK_DELETE = &H2E
    Private Const VK_INSERT = &H2D'Public Const HOTKEYF_SHIFT = &H1 '注释: shift键
    'Public Const HOTKEYF_CONTROL = &H2 '注释:ctrl键
    'Public Const HOTKEYF_ALT = &H4 '注释:alt键'Public Const VK_NUMPAD0 = &H60
    'Public Const VK_NUMPAD1 = &H61
    'Public Const VK_NUMPAD2 = &H62
    'Public Const VK_NUMPAD3 = &H63
    'Public Const VK_NUMPAD4 = &H64
    'Public Const VK_NUMPAD5 = &H65
    'Public Const VK_NUMPAD6 = &H66
    'Public Const VK_NUMPAD7 = &H67
    'Public Const VK_NUMPAD8 = &H68
    'Public Const VK_NUMPAD9 = &H69
    'Public Const VK_MULTIPLY = &H6A
    'Public Const VK_ADD = &H6B
    'Public Const VK_SEPARATOR = &H6C
    'Public Const VK_SUBTRACT = &H6D
    'Public Const VK_DECIMAL = &H6E
    'Public Const VK_DIVIDE = &H6F
    Public Const VK_F1 = &H70
    Public Const VK_F2 = &H71
    Public Const VK_F3 = &H72
    Public Const VK_F4 = &H73
    Public Const VK_F5 = &H74
    Public Const VK_F6 = &H75
    Public Const VK_F7 = &H76
    Public Const VK_F8 = &H77
    Public Const VK_F9 = &H78
    Public Const VK_F10 = &H79
    Public Const VK_F11 = &H7A
    Public Const VK_F12 = &H7B
    Public Const VK_F13 = &H7C
    Public Const VK_F14 = &H7D
    Public Const VK_F15 = &H7E
    Public Const VK_F16 = &H7F
    Public Const VK_F17 = &H80
    Public Const VK_F18 = &H81
    Public Const VK_F19 = &H82
    Public Const VK_F20 = &H83
    Public Const VK_F21 = &H84
    Public Const VK_F22 = &H85
    Public Const VK_F23 = &H86
    Public Const VK_F24 = &H87Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Public glWinRet As Long, preWinProc As Long
    Public unloadHotKey As IntegerPublic 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 FunctionPrivate Function DoFunctions(ByVal vKeyID As Long)
        On Error Resume Next
        
        If vKeyID = 1003 Then
            Beep 800, 2000
            Exit Function
        End IfEnd Function窗体Private Sub Form_Load()
        preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)    glWinRet = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf CallbackMsgs) '调用函数
        RegisterHotKey Me.hwnd, 1003, 0, vbKeyF2
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong Me.hwnd, GWL_WNDPROC, preWinProc
    End Sub
      

  5.   

    to chenhui530(陈辉) 
    你这样写 把系统注册的热键给抢掉了,在windows里f2是重命名的快捷键(选中一个文件点f2可以方便的改名)而按你这么做重命名的功能就失效了。
      

  6.   

    谢谢Alzzl(果子林)在QQ帮助我,他的答案很完美
      

  7.   

    yachong(蚜虫),不行啊。如果界面失去焦点时按F2键就没用了的!◎#¥%……※×()
    高度怀疑你是否实验了我的代码