Public Const WM_MOUSEMOVE = &H200
PostMessage Hwndrect, WM_MOUSEMOVE, &00, 0
PostMessage Hwndrect, &H201, &H1, 0
PostMessage Hwndrect, &H202, &00, 0
不知道为什么这段代码不能实现后台鼠标点击,如果“PostMessage Hwndrect, WM_MOUSEMOVE, &00, 0”这句不要,将鼠标移到目标窗口上就可以点击,但是如果要这句,无论鼠标有无移到目标窗口都不行,请教一下怎样才能实现鼠标的后台点击呢?

解决方案 »

  1.   

    Public Const WM_MOUSEMOVE = &H200 
    PostMessage Hwndrect, WM_MOUSEMOVE, &00, p
    PostMessage Hwndrect, &H201, &H1, p
    PostMessage Hwndrect, &H202, &00, p加上鼠标位置后C\参数P后也不行
      

  2.   

    '上面的是声明部分.只有声明了,才可以使用..
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_LBUTTONDOWN = &H201Private Const WM_LBUTTONUP = &H202
    Private Sub Command1_Click()
        PostMessage Command1.hwnd, &H201, 0&, 0&
        PostMessage Command1.hwnd, &H202, 0&, 0&End SubPrivate Sub Command2_Click()    MsgBox "ok"End Sub
      

  3.   

    修改一下'上面的是声明部分.只有声明了,才可以使用..
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_LBUTTONDOWN = &H201Private Const WM_LBUTTONUP = &H202
    Private Sub Command1_Click()
        PostMessage Command2.hwnd, &H201, 0&, 0&
        PostMessage Command2.hwnd, &H202, 0&, 0&End SubPrivate Sub Command2_Click()    MsgBox "ok"End Sub
      

  4.   

    你发送的鼠标消息和实际鼠标位置不符,目标程序可能认为鼠标消息已经过时,直接滤掉了。
    用 ClientToScreen 换算成屏幕坐标,然后用 SetCursorPos 真正更改鼠标位置,最后才发送你的模拟消息。
      

  5.   

    我这样做也没有问题
    lz是否获取的句柄有问题?Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_MOUSEMOVE = &H200Private Const WM_LBUTTONDOWN = &H201Private Const WM_LBUTTONUP = &H202Private Sub Command1_Click()
        PostMessage Command2.hwnd, &H200, 0&, 0&
        PostMessage Command2.hwnd, &H201, 0&, 0&
        PostMessage Command2.hwnd, &H202, 0&, 0&
    End SubPrivate Sub Command2_Click()
        MsgBox "ok"
    End Sub
      

  6.   

    呵呵,6楼的没有用定义的常量,修改一下
    '上面的是声明部分.只有声明了,才可以使用..
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_MOUSEMOVE = &H200Private Const WM_LBUTTONDOWN = &H201Private Const WM_LBUTTONUP = &H202Private Sub Command1_Click()
        PostMessage Command2.hwnd, WM_MOUSEMOVE, 0&, 0&
        PostMessage Command2.hwnd, WM_LBUTTONDOWN, 0&, 0&
        PostMessage Command2.hwnd, WM_LBUTTONUP, 0&, 0&
    End SubPrivate Sub Command2_Click()
        MsgBox "ok"
    End Sub
      

  7.   

    谢谢jhone99,原来是我的声明有问题,
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    我之前的声明没有红色字体那个字母,但是VB不报错,声明原因呢?