刚学VB和WINDOWS编程不到一个月,帮忙说说程序不合理的地方,谢谢了!!!!
模块:Option ExplicitPublic Type POINTAPI
X As Long
Y As Long
End Type
Public Type ClickType
Time As Long
Click As Integer
End TypePublic Cur(36000000) As POINTAPI 'Record Mouse Coordinate
Public CL(10000) As ClickType 'Record Mouse Button
Public i, iCL, Time As Long 'i: pointer of Cur(),iCl pointer of CL()
Public Record, Play As BooleanPublic Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10Public Const WH_MOUSE = 7
Public Const WH_MOUSE_LL = 14Public Const WM_LBUTTONDOWN = 513
Public Const WM_LBUTTONUP = 514Public Const WM_RBUTTONDOWN = 516
Public Const WM_RBUTTONUP = 517Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
'idHook参数代表拦截的类型,主要有键盘、鼠标等(当拦截键盘输入时值为2)
'lpfn参数代表Hook函数的位址
'hmod代表.dll的hInstance
'dwThreadId代表执行拦截的ThreadId
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As LongPublic hHook As Long
Public Sub EnableHook() '定义EnableHook '设置拦截
hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub
Public Sub DisableHook() '定义DisableHook
Dim ret As Long
ret = UnhookWindowsHookEx(hHook) '取消拦截
End Sub
Public Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
If Record = True Then
If wParam = WM_LBUTTONDOWN Or wParam = WM_LBUTTONUP Or wParam = WM_RBUTTONDOWN Or wParam = WM_RBUTTONUP Then
CL(iCL).Click = wParam
CL(iCL).Time = i
iCL = iCL + 1
End If
End If
Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function下面是窗体代码:2 buttons: command1,command2; 1 label: label3Private Sub Command1_Click()
If Record = True Then
Record = False
Time = i
Timer1.Interval = 0
Command2.Enabled = True
Label3.Caption = "Idle"
Else
Record = True
Play = False
Timer1.Interval = 1
Label3.Caption = "Record"
Command2.Enabled = False
Form1.WindowState = 1
i = 0
iCL = 0
End If
End SubPrivate Sub Command2_Click()
If Play = True Then
Play = False
Command1.Enabled = True
Label3.Caption = "Idle"
Timer2.Interval = 0
Else
Play = True
Record = False
Timer2.Interval = 1
Label3.Caption = "Play"
Command1.Enabled = False
Form1.WindowState = 1
i = 0
iCL = 0
End If
If Record = True Then Record = False
End SubPrivate Sub Form_Load()
Record = False
Play = False
i = 0
iCL = 0
Timer1.Interval = 0
Timer2.Interval = 0
Call EnableHook
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call DisableHook
End SubPrivate Sub Timer1_Timer()
If Record = True Then
GetCursorPos Cur(i)
i = i + 1
End If
End SubPrivate Sub Timer2_Timer()
If i = Time Then Timer2.Interval = 0
If Play = True Then
SetCursorPos Cur(i).X, Cur(i).Y
i = i + 1
If CL(iCL).Time = i Then
Select Case CL(iCL).Click
Case WM_RBUTTONDOWN
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
Case WM_RBUTTONUP
Call mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
Case WM_LBUTTONDOWN
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Case WM_LBUTTONUP
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End Select
iCL = iCL + 1
End If
End If
End Sub
模块:Option ExplicitPublic Type POINTAPI
X As Long
Y As Long
End Type
Public Type ClickType
Time As Long
Click As Integer
End TypePublic Cur(36000000) As POINTAPI 'Record Mouse Coordinate
Public CL(10000) As ClickType 'Record Mouse Button
Public i, iCL, Time As Long 'i: pointer of Cur(),iCl pointer of CL()
Public Record, Play As BooleanPublic Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10Public Const WH_MOUSE = 7
Public Const WH_MOUSE_LL = 14Public Const WM_LBUTTONDOWN = 513
Public Const WM_LBUTTONUP = 514Public Const WM_RBUTTONDOWN = 516
Public Const WM_RBUTTONUP = 517Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
'idHook参数代表拦截的类型,主要有键盘、鼠标等(当拦截键盘输入时值为2)
'lpfn参数代表Hook函数的位址
'hmod代表.dll的hInstance
'dwThreadId代表执行拦截的ThreadId
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As LongPublic hHook As Long
Public Sub EnableHook() '定义EnableHook '设置拦截
hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf Myfunc, App.hInstance, 0)
End Sub
Public Sub DisableHook() '定义DisableHook
Dim ret As Long
ret = UnhookWindowsHookEx(hHook) '取消拦截
End Sub
Public Function Myfunc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 'wParam代表按键
If Record = True Then
If wParam = WM_LBUTTONDOWN Or wParam = WM_LBUTTONUP Or wParam = WM_RBUTTONDOWN Or wParam = WM_RBUTTONUP Then
CL(iCL).Click = wParam
CL(iCL).Time = i
iCL = iCL + 1
End If
End If
Myfunc = CallNextHookEx(hHook, ncode, wParam, lParam) '传到下一个拦截
End Function下面是窗体代码:2 buttons: command1,command2; 1 label: label3Private Sub Command1_Click()
If Record = True Then
Record = False
Time = i
Timer1.Interval = 0
Command2.Enabled = True
Label3.Caption = "Idle"
Else
Record = True
Play = False
Timer1.Interval = 1
Label3.Caption = "Record"
Command2.Enabled = False
Form1.WindowState = 1
i = 0
iCL = 0
End If
End SubPrivate Sub Command2_Click()
If Play = True Then
Play = False
Command1.Enabled = True
Label3.Caption = "Idle"
Timer2.Interval = 0
Else
Play = True
Record = False
Timer2.Interval = 1
Label3.Caption = "Play"
Command1.Enabled = False
Form1.WindowState = 1
i = 0
iCL = 0
End If
If Record = True Then Record = False
End SubPrivate Sub Form_Load()
Record = False
Play = False
i = 0
iCL = 0
Timer1.Interval = 0
Timer2.Interval = 0
Call EnableHook
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call DisableHook
End SubPrivate Sub Timer1_Timer()
If Record = True Then
GetCursorPos Cur(i)
i = i + 1
End If
End SubPrivate Sub Timer2_Timer()
If i = Time Then Timer2.Interval = 0
If Play = True Then
SetCursorPos Cur(i).X, Cur(i).Y
i = i + 1
If CL(iCL).Time = i Then
Select Case CL(iCL).Click
Case WM_RBUTTONDOWN
Call mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
Case WM_RBUTTONUP
Call mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
Case WM_LBUTTONDOWN
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Case WM_LBUTTONUP
Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End Select
iCL = iCL + 1
End If
End If
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货