如何用函数SendMessage模拟鼠标移动?
如何用函数SendMessage模拟键盘按下Alt+A等?Dim i
i = FindWindow(vbNullString, "记事本 - 无标题")
SendMessage i, WM_MOUSEFIRST, ByVal 560&, 0
不知道为什么,我怎么弄都不行

解决方案 »

  1.   

    mouse_event VB声明 
    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) 
    说明 
    模拟一次鼠标事件 
    参数表 
    参数 类型及说明 
    dwFlags Long,下述标志的一个组合 
    MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 
    MOUSEEVENTF_MOVE 移动鼠标 
    MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 
    MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 
    MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 
    MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 
    MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 
    MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 
    dx Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 
    dy Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 
    cButtons Long,未使用 
    dwExtraInfo Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序 
    注解 
    进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度
     
      

  2.   

    不是用mouse_event函数,是用SendMessage函数
      

  3.   

    Private Type POINTAPI
    x As Long
    y As Long
    End Type
    Dim Buttonpos As POINTAPI
    Const WM_LBUTTONDOWN = &H201
    Const WM_LBUTTONUP = &H202
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Private 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 ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    Private Sub Form_Load()
    Text1.Text = "按Alt-A组合键开始演示"
    Dim tmp As Long
    With Command1
    Buttonpos.x = (.Left + .Width / 2) / Screen.TwipsPerPixelX
    Buttonpos.y = (.Top + .Height / 2) / Screen.TwipsPerPixelY
    End With
    tmp = ClientToScreen(Me.hwnd, Buttonpos)
    End SubPrivate Sub command2_Click()
    Dim Cursorpos As POINTAPI
    Dim DistX As Double, DistY As Double
    Dim tmp As Long
    Dim i As Long
    Dim PosX As Integer, PosY As Integer
    Dim TickCount As Long
    tmp = GetCursorPos(Cursorpos)
    DistX = Buttonpos.x - Cursorpos.x
    DistY = Buttonpos.y - Cursorpos.y
    For i = 1 To 40000 '解释:数值越大,鼠标运动越慢,相应的执行时间也就越长。
    PosX = Cursorpos.x + DistX * i / 40000
    PosY = Cursorpos.y + DistY * i / 40000
    tmp = SetCursorPos(PosX, PosY)
    Next i
    tmp = SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0, 0)
    TickCount = GetTickCount()
    While GetTickCount() - TickCount < 200
    tmp = DoEvents()
    Wend
    tmp = SendMessage(Command1.hwnd, WM_LBUTTONUP, 0, 0)
    End Sub
    Private Sub command1_Click()
    Beep
    MsgBox "fsafas"
    End Sub
    Private Sub Timer1_Timer()
    SetCursorPos Command1.Left + 10, Command1.Top + 10
    tmp = SendMessage(132378, WM_LBUTTONDOWN, 0, 0)
    TickCount = GetTickCount()
    While GetTickCount() - TickCount < 100
    tmp = DoEvents()
    Wend
    tmp = SendMessage(132378, WM_LBUTTONUP, 0, 0)
    Timer1.Enabled = False
    End Sub
      

  4.   

    我来帮你吧..
    给你上传了一个源码,你下载看一下吧
    http://www.kylixinfo.com/temp/MOUSE.rar
      

  5.   

    怎么全是用mouse_event这个函数的?
    水来回答一下呢?谢谢!