mouse_event只能向当前鼠标所在的地方发送事件,可不可以向一个指定的座标发送而又不影响当前鼠标的运行呢?就像向一个句柄发送消息一样

解决方案 »

  1.   

    这样不是很好,当内存消耗地差不多时(尤其是配置差的机器)会出现明显漏洞
    我看mouse_event好像支持绝对位置,但我不清楚它的参数,dx和dw指的是(800,600)还是(60000,60000)
      

  2.   

    ' 注释一下重新发,里面的消息可以任意的组合。
    Option ExplicitPrivate Const WM_LBUTTONDBLCLK = &H203
    Private Const WM_LBUTTONDOWN = &H201
    Private Const WM_LBUTTONUP = &H202
    Private Const WM_MBUTTONDBLCLK = &H209
    Private Const WM_MBUTTONDOWN = &H207
    Private Const WM_MBUTTONUP = &H208
    Private Const WM_RBUTTONDBLCLK = &H206
    Private Const WM_RBUTTONDOWN = &H204
    Private Const WM_RBUTTONUP = &H205
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _
        ByVal lpPrevWndFunc As Long, _
        ByVal hwnd As Long, _
        ByVal Msg As Long, _
        ByVal wParam As Long, _
        lParam As Any) As LongPrivate Const GWL_WNDPROC = (-4)
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
        ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
    Private Type POINTAPI
        x As Long
        y As Long
    End Type
    Private Declare Function WindowFromPoint Lib "user32" ( _
        ByVal xPoint As Long, _
        ByVal yPoint As Long) As LongPrivate Sub cmdSend_Click()
        Dim lpPoint As POINTAPI
        Dim lpProc As Long
        Dim hMyWnd As Long
        
        lpPoint.x = 100     ' X 座标
        lpPoint.y = 100     ' Y 座标
        
        ' 获取指定位置所持句柄
        hMyWnd = WindowFromPoint(lpPoint.x, lpPoint.y)
        
        ' 获取窗体默认消息处理函数地址
        lpProc = GetWindowLong(hMyWnd, GWL_WNDPROC)
        
        ' 下面的按键事件可以任意组合
        
        ' 发送左键按下事件
        CallWindowProc lpProc, hMyWnd, WM_LBUTTONDOWN, 0, lpPoint
        
        ' 发送左键松开事件
        CallWindowProc lpProc, hMyWnd, WM_LBUTTONUP, 0, lpPoint
        
        ' 发送左键双击事件
        CallWindowProc lpProc, hMyWnd, WM_LBUTTONDBLCLK, 0, lpPoint
        
        ' 发送中键按下事件
        CallWindowProc lpProc, hMyWnd, WM_MBUTTONDOWN, 0, lpPoint
        
        ' 发送中键松开事件
        CallWindowProc lpProc, hMyWnd, WM_MBUTTONUP, 0, lpPoint
        
        ' 发送中键双击事件
        CallWindowProc lpProc, hMyWnd, WM_MBUTTONDBLCLK, 0, lpPoint
        
        ' 发送右键按下事件
        CallWindowProc lpProc, hMyWnd, WM_RBUTTONDOWN, 0, lpPoint
        
        ' 发送右键松开事件
        CallWindowProc lpProc, hMyWnd, WM_RBUTTONUP, 0, lpPoint
        
        ' 发送右键双击事件
        CallWindowProc lpProc, hMyWnd, WM_RBUTTONDBLCLK, 0, lpPoint
    End Sub