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
小弟不知哪能里出错了,还请各位帮帮忙,兄弟我谢谢各位了,分不够可以加.
以下是放在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
小弟不知哪能里出错了,还请各位帮帮忙,兄弟我谢谢各位了,分不够可以加.
解决方案 »
- 在用2010vs的时候发现的异常,怎么办?
- 求助,由于将在索引,主关键字,或关系中创建重复的信息,对表的修改没有成功。
- 关于sql server 2005
- 去掉窗体的标题栏后怎么实现窗体拖放?
- 送分100分:VB6程序调试结束后,VB6的【中断】【结束】按钮还处于有效状态,是怎么回事。
- 请教一个VB中datagrid表数据录入的问题
- VSflexGrid中如何设置某一行或某一列不可编辑!
- 如何取消textbox的右键菜单????谢谢
- 按钮控件
- 我用ShellExecute调用一个dos程序,如何知道它已执行完毕?
- 得到函数或者过程的名字
- “CVBAPIHooker —— 可以让你事件化处理API拦截的类”在哪里下载?
那HOOK应该怎么用,请指教,谢谢!
vKey As Long '虚拟码 (and &HFF) sKey As Long '扫描码
flag As Long '键按下:128 抬起:0
time As Long 'Window运行时间
End Type