我在做一个鼠标模拟的程序,要求是:在程序A中捕获所有的鼠标操作,在程序B及程序C中原样实现。
问题一:程序A中有按钮和其它多种控件,怎么样才能捕获所有的操作(其实就一个点击操作)。
问题二:采用mouse_event 来模拟鼠标操作,但要求程序B和程序C必须是顶层的,怎么办?
那位老大做过,指点一二!

解决方案 »

  1.   

    在程序A中鼠标移动和点击事件中处理,发送消息给B和C就好了。
      

  2.   

    针对第一个问题:捕获所有的操作,重载WndProc函数拦截自己的消息,具体的消息查sdk去        protected override void WndProc(ref Message m)
            {
                base.WndProc(ref m);
            }
      

  3.   

    在程序A中鼠标移动和点击事件中处理,发送消息给B和C就好了。程序A中有一个webbrower,在控件内点击的时候,不知道发送什么消息给B和C
      

  4.   

    使用sendmessage發送windows的點擊消息,也可以使用自定義的消息
      

  5.   

    重载WndProc函数拦截自己的消息,只能拦截到父窗口的鼠标消息,点击控件的消息不能拦截,只是收到 WM_MOUSEACTIVATE 消息,里面有点击信息。
      

  6.   

    1. 在A里捕捉MOUSE消息,获得数据,然后按一定格式格式化好数据,交给B和C程序(比如共享某个文件)2. 在B和C里将获取A的数据并解析出来,构造相应的windows系统的MOUSE消息,通过P/Invoke调用SendMessage来发送消息"但要求程序B和程序C必须是顶层的" 这个是什么意思,不太理解,TopMost = true ???
      

  7.   

    一个程序有三个实例,A,B,C。比如说,我开三个画图窗口,我在第一个窗口做图,要求B,C窗口做一样的图。所以就想截获A的操作,然后把操作发送到B,C去。现在的问题主要有:
    1.截获问题,程序界面上有一个webbrower控件,以及一些按钮,使用重载WndProc函数,只能拦截到父窗口的鼠标消息,点击控件的消息不能拦截,只是收到 WM_MOUSEACTIVATE 消息,里面有点击信息。
    2.用SendMessage发送消息不会出现顶层的问题,但使用mouse_event 则会有顶层问题。现在主要问题是截获不到所有的鼠标消息。主要是点在webbrower控件里的消息不能截获
      

  8.   

    恩...重现画图操作和重现控件点击操作是完全不同的.画图操作是精确记录鼠标移动情况. 而控件点击操作,并不需要记录鼠标移动情况, 而是关注于鼠标点击消息那点坐标的控件.在自动化测试工具中, 这两个是完全不同的模式.
    对于网页里面的控件, 它是属于Trident引擎(IE的核心引擎)绘制的控件, 所以你对付普通Win32控件的方法是无效的.你可以获取WebBrowser它的页面的IHTMLDocument接口, 挂钩里面的事件进行拦截.另外你也可以Hook鼠标消息, 获取点击位置, 通过IHTMLDocument的getElementByPoint这个函数来获取点击位置的Web控件.
      

  9.   

    打错了, 是GetElementFromPoint这个函数.MSDN "HTMLDocument"
      

  10.   

    谢谢 shrinerain ,我现在正在测试,Hook鼠标消息,然后sendMessage到WEBbrower控件里去,研究发现WEBbrower由三个窗口组成,应该可以发进去,先试试吧