刚学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