Private 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 _
    )
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2Private Sub Command1_Click()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

解决方案 »

  1.   

    sunxl(じ小呆☆`~o)   谢谢你的回答  不过我不想用mouse_event 希望使用sengMessage给指定的应用程序发送
      

  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 Long
            
    Private Const WM_LBUTTONDOWN = &H201
    Private Const MK_LBUTTON = &H1
    Private Sub Command1_Click()
        Dim lngFindWnd As Long
        Dim x As Long    'x以相素为单位
        Dim y As Long    'y以相素为单位
        Dim xy As Long   'lParam,前4个字节为y座标,后4个字节为x座标
        
        x = 5000/Screen.TwipsPerPixelX
        y = 5000/Screen.TwipsPerPixelY
            
        'lngFindWnd = FindWindow(...)
        
        xy = y * 4 ^ 8 + x
        
        PostMessage lngFindWnd, WM_LBUTTONDOWN, MK_LBUTTON, xy
    End Sub
      

  3.   

    感谢junwhj()  使用了你的方法  我已经得到结果了不过 还有一点疑问 清说明(100分是你的了)
    1。xy = y * 4 ^ 8 + x   这个公式  是怎么个换算   没想出来
    2。.TwipsPerPixelX 是不是就是  分辨率  800*600?
    3。 我换位sengMessage  同样可以  但是 返回0   难道0代表成功么?我不知道  现在发分后(结贴) 你还能不能回答 所以等你回了在发分(不是小气)
      

  4.   

    'lParam,前4个字节为y座标,后4个字节为x座标  
    应该是 8位 16进指数吧
    那么  800*600  就应该是h03200258   对么?
      

  5.   

    1. 4^8: 四个字节,每个字节8位
    2. TwipsPerPixelX: 不同的操作系统可能不同
    3. 我用的是Win2000,用sengMessage不行
      

  6.   

    16进制数只是显示方便而已,传给lParam参数是最终还是一个十进制的值
      

  7.   

    十六进制值只是显示直观而已,实际上传给lParam参数的是一个十进制的数值。
      

  8.   

    只是忘了加ByvalCall PostMessage(hwnds,WM_LBUTTONDOWN,MK_LBUTTON,Byval 500*&H10000+400)
      

  9.   

    写了一个专门发鼠标消息的函数:Public Function SendMouseMsg(ByVal hWnd As Long, ByVal uMsg As Long, ByVal Button As Long, ByVal X As Integer, ByVal Y As Integer) As Long
        Dim TempLng As Long
        
        TempLng = (TempLng Or X) And &HFFFF
        TempLng = TempLng Or (Y And &H7FFF) * &H10000
        If Y And &H8000 Then TempLng = TempLng Or &H80000000
        
        SendMouseMsg = SendMessage(hWnd, uMsg, Button, ByVal TempLng)
        
    End Function
    调用:
        Debug.Print
        Debug.Print SendMouseMsg(Command1.hWnd, WM_LBUTTONDOWN, MK_LBUTTON, 10, 10)
        Debug.Print SendMouseMsg(Command1.hWnd, WM_LBUTTONUP, MK_LBUTTON, 10, 10)