mciSendString+SetWindowsHookEx 怎么连起来就用不了了,本意是播放一个动画,不用SetWindowsHookEx 可以使用,但加上SetWindowsHookEx之后就只能播放第一帧和最后一帧.其它的没反应!兄弟本意是在播放过程中锁住键盘.如果有更好代码那更好,谢谢各位啦!
以下是放在Bas中:
Const WM_MOUSEFIRST = &H200
Public Const WM_KEYLAST = &H108
Public Const WM_KEYFIRST = &H100
Public Const WH_JOURNALRECORD = 0
Public Const WH_JOURNALPLAYBACK = 1Type EVENTMSG
message As Long
paramL As Long
paramH As Long
time As Long
hwnd As Long
End TypeDeclare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As LongDeclare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As LongDeclare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As LongPublic hNxtHook As Long ' handle of Hook Procedure
Public msg As EVENTMSG
Sub EnableHook()
hNxtHook = SetWindowsHookEx(WH_JOURNALPLAYBACK, AddressOf HookProc, App.hInstance, 0)
End SubSub FreeHook()
Dim ret As Long
ret = UnhookWindowsHookEx(hNxtHook)
End SubFunction HookProc(ByVal code As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
HookProc = CallNextHookEx(hNxtHook, code, wParam, lParam)
End Function以下放在form1中的command1中.
Option Explicit
  Dim dtNextTime As Date
  Private Declare Function BlockInput Lib "user32" (ByVal fEnable As Long) As Long
  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 = &H312
  
  Private HotKey_Fg     As Boolean
  
  Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
                    (ByVal lpstrCommand As String, _
                    ByVal lpstrReturnString As String, _
                    ByVal uReturnLength As Long, _
                    ByVal hwndCallback As Long) As Long
  
Private Sub Command1_Click()
Dim ReturnVal As Integer
Dim ReturnStr As String * 1024
Dim message     As msg
Dim returnstring As String
Dim Erg As Long
Dim FileName As String
Dim str5 As String, len5 As Long, i As Longreturnstring = Space(1024)
'Dim MmAvi As New MMedia
    Me.WindowState = 1
    '注册   Ctrl+Y   为热键
    RegisterHotKey Me.hwnd, &HBFFF&, 5, vbKeyP
    Me.Show
    Form1.Show
    
    '等待处理消息
    HotKey_Fg = False    
    Do While Not HotKey_Fg    
          'WaitMessage
        '检查是否热键被按下
        If PeekMessage(message, Me.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
           FileName = App.Path & "\bomb.avi"
            ReturnVal = mciSendString("play c:\bomb.avi", ReturnStr, 1024, 0)
            
            Call EnableHook
            str5 = FileName
            len5 = Len(str5)
            For i = 1 To len5
            Text1.Text = Mid(str5, 1, i)
            Text1.Refresh
            Sleep (200)
            Next i
            Call FreeHook
         End If
    DoEvents
    Loop
End Sub Private Sub Form_Unload(Cancel As Integer)
          HotKey_Fg = True
          '撤销热键的注册
          Call UnregisterHotKey(Me.hwnd, &HBFFF&)
           BlockInput (0)
  End Sub
小弟不知哪能里出错了,还请各位帮帮忙,兄弟我谢谢各位了,分不够可以加.