大家好,一些模拟鼠标的问题弄得我很乱,希望大家帮忙看看,谢谢!问题一:请问为什么发送鼠标点击消息给记事本窗口没有反应,只有发到记事本的编辑框窗口才有反应?我试过很多种写法:
SendMessage(记事本句柄,WM_RBUTTONDOWN,NULL,NULL);
SendMessage(记事本句柄,WM_RBUTTONUP,NULL,NULL);//最基本的写法,没反应SendMessage(记事本句柄,WM_NCRBUTTONDOWN,HTCAPTION,0x000A000A);
SendMessage(记事本句柄,WM_NCRBUTTONUP,HTCAPTION,0x000A000A);//模拟点击标题栏,没反应SendMessage((HWND)0x0003088E,WM_NCRBUTTONDOWN,(WPARAM)0x0003088E,(LPARAM)0x02040002);
SendMessage((HWND)0x0003088E,WM_NCRBUTTONUP,(WPARAM)0x0003088E,(LPARAM)0x02040002);//这是我完全依照SPY++提供的数据把数据直接写到函数里,一样没反应但如果把“记事本句柄”改成“记事本里的编辑框句柄”就能成功模拟。有人说“因为记本事的框架窗口被视图窗口挡住了.所以接收不到。”如果是这个原因,请问应该怎样解决?如何模拟鼠标点击窗口的标题栏?问题二:其实我想实现的一个功能是,鼠标点击一个小窗口,但这个小窗口不处理这个消息而把这个鼠标点击的消息传递到这个小窗口后面的窗口。例如,这个小窗口后面就是桌面了,我在这个小窗口上面点击右键,则会出现右键点桌面的弹出菜单。再例如,这个小窗口后面有个窗口的关闭按钮,我在这个小窗口上点击左键,那么后面的窗口就会关闭了。请问这应该如何实现?谢谢大家!!

解决方案 »

  1.   

    谢谢laiyiling。不过mouse_event和SendInput是没有指定窗口句柄的,所以如果用这两个函数来模拟点击的话会被小窗口挡住了消息了。
      

  2.   

    发送鼠标消息要给出鼠标键状态和光标位置。
    标题栏是系统处理的,给窗口发鼠标消息达不到你想要的效果。你想实现什么就直接发相应的WM_SYSCOMMAND消息。
      

  3.   

    to cnzdgs:
    哦……谢谢。那这样的话我的第二个问题就很难很难实现了,因为如果小窗口后面是某个窗口的标题栏的话,那就很难根据鼠标的位置正确模拟点击后面窗口的标题栏了。to CathySun118:
    谢谢。其实PostMessage我也试过了,也是不行的。
      

  4.   

    你可以把那个小窗口设置为TOPMOST,用SendInput模拟鼠标输入,输入的时候把小窗口隐藏,输入完后再显示。
      

  5.   

    感谢cnzdgs,哈哈。这的确是个不错的方法,不过这样的话窗口会有点闪烁。我已经暂时放弃喽,先把小窗口做成“逃跑”凑合着用吧,等以后有了足够的技术再来尝试解决这个难题。