知道一个程序的控件的句柄,如何实现用sendmessage实现鼠标点击,谢谢!!

解决方案 »

  1.   

     Public   Const   WM_MOUSEMOVE   =   &H200   
      Public   Const   WM_MOUSEACTIVATE   =   &H21   
      Public   Const   WM_MOUSEFIRST   =   &H200   
      Public   Const   WM_MOUSELAST   =   &H209   
      Public   Const   WM_LBUTTONUP   =   &H202   
      Public   Const   WM_LBUTTONDOWN   =   &H201   
      Public   Const   WM_LBUTTONDBLCLK   =   &H203   
      Public   Const   WM_RBUTTONUP   =   &H205   
      Public   Const   WM_RBUTTONDOWN   =   &H204   
      Public   Const   WM_RBUTTONDBLCLK   =   &H206   
    SendMessage   or   PostMessage   
        
      SendMessage   hWnd,WM_MOUSEMOVE,0,y*2^16+x   '注意最后那个y*2^16+x(即y<<16+x)   
        
      同理,鼠标点击:   
        
      SendMessage   hWnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x   '记得定义MK_LBUTTON,MK_RBUTTON   
        
      有了这些,可以写一个简单的点击过程:   
        
      Private   Sub   LeftClick(hwnd   as   Long,x   as   Integer,y   as   Integer)   
                  SendMessage   hwnd,WM_MOUSEMOVE,0,y*2^16+x   
                  SendMessage   hwnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x   
                  SendMessage   hwnd,WM_LBUTTONUP,MK_BUTTON,y*2^16+x   
      End   Sub   
        
      RightClick同理.这样就是鼠标点了... 先发送消息设置鼠标位置在DELPHI里是 
    SendMessage(hButton, WM_LBUTTONDOWN, MK_LBUTTON, LOWORD(X)+HIWORD(Y));SendMessage(hButton, WM_MouseMove, 0, LOWORD(X)+HIWORD(Y));C++BUILDER 或VC里
    如:
    SendMessage(hwnd,WM_MOUSEMOVE,1,MAKELPARAM(point.x,point.y)); 
      

  2.   

      同理,鼠标点击:  
        
      SendMessage  hWnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x  '记得定义MK_LBUTTON,MK_RBUTTON  
        
      有了这些,可以写一个简单的点击过程:  
        
      Private  Sub  LeftClick(hwnd  as  Long,x  as  Integer,y  as  Integer)  
                  SendMessage  hwnd,WM_MOUSEMOVE,0,y*2^16+x  
                  SendMessage  hwnd,WM_LBUTTONDOWN,MK_LBUTTON,y*2^16+x  
                  SendMessage  hwnd,WM_LBUTTONUP,MK_BUTTON,y*2^16+x  
      End  Sub  
        
      RightClick同理. 
      

  3.   

    Option Explicit
    Public Const WM_MOUSEMOVE = &H200
    Public Const WM_LBUTTONUP = &H202
    Public Const WM_LBUTTONDOWN = &H201
    Public Const MK_LBUTTON = &H1Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Sub LeftClick(hwnd As Long, x As Integer, y As Integer)
      PostMessage hwnd, WM_LBUTTONDOWN, MK_LBUTTON, y * 2 ^ 16 + x '这是后台模拟点击的,这方面的资料偶找了好久啊..
      PostMessage hwnd, WM_LBUTTONUP, MK_LBUTTON, y * 2 ^ 16 + x
    End Sub
    这个可以了... 偶也找了半天... 实验过了..确实可以行
      

  4.   

    奶奶的...SENDMESSAGE 不靠谱... POSTMESSAGE 才行
      

  5.   

    X,Y坐标要换算成一个
    数值
    DELPHI里C++里 是酱紫MakeLong(x,y); 
    MAKELONG宏可以将两个16位的无符号数组合成一个32位的无符号数:   
    The   MAKELONG   macro   creates   an   unsigned   32-bit   value   by   concatenating   two   given   16-bit   values.     
        
      DWORD   MAKELONG(   
          WORD   wLow,     //   low-order   word   of   long   value   
          WORD   wHigh     //   high-order   word   of   long   value   
      );   
          
      Parameters   
      wLow     
      Specifies   the   low-order   word   of   the   new   long   value.     
      wHigh     
      Specifies   the   high-order   word   of   the   new   long   value.     
      Return   Values   
      The   return   value   is   an   unsigned   32-bit   value.     
        
      Res   
      The   MAKELONG   macro   is   defined   as   follows:     
        
     #define MAKELONG(a, b)      ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | ((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16))
    VB里貌似没这个东西可用