BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:2260回复:9

各位老大:发送消息模拟鼠标动作遇到难题了!

楼主#
更多 发布于:2002-11-29 18:29
为了便于您的理解,先说我的目标:
我先在桌面上打开一个应用程序窗口,例如“记事本”,然后运行我设计的程序,我是想让这个程序模拟鼠标操作,自动打开菜单,再模拟鼠标点击菜单中的某一项就可以执行该项功能等等。
从原理上说,程序中利用PostMessage()函数,将相关消息放置进消息队列中就可以了,但实际中却发现某些消息并没有达到预期效果。请看:
  HWND  hWnd,hWndEdit;
  hWnd=FindWindow(\"Notepad\",NULL);//取得目的窗口句柄,//其中Notepad是记事本的类名。
  hWndEdit=FindWindowEx(\"Edit\",NULL);取得目的窗口中编辑子窗口的句柄。                                    
  SetForegroundWindow(hWnd);//将目的窗口设置为活动的。
   SetCursorPos(100,100);//强制将光标位置设置在记事本的编辑区域内。
                             //以上这几步都已经成功,问题就在下面:
   PostMessage(hWndEdit,WM_RBUTTONDOWN,100,100);//发送鼠标右健按下消息。这相当于在编辑区域的(100,100)处点击了一次鼠标右健,如果成功,应当调出右健菜单,但实际证明,并没有右健菜单出现。
如果说函数的用法不对?我又发送下面的消息,都能成功。例如:  
PostMessage(hWnd,WM_CLOSE,0,0);//发这一消息,记事本确实可以关闭。
发送
PostMessage(hWndEdit,WM_CHAR,\'k\',0);这是发送一个字符k,记事本编辑窗口立即就会出现一个k字,说明函数的用法并没有错。
用SendWindow()结果也一样。
那么问题出在哪里呢?
    
    

最新喜欢:

IammeIamme
leo_cyl
驱动牛犊
驱动牛犊
  • 注册日期2001-08-20
  • 最后登录2009-11-02
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-30 11:10
用mouse_event 试试,具体看MSDN
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-01 21:32
模拟鼠标事件要用mouse_event,其实可以直接向窗体发送菜单被执行的消息(WM_COMMAND),还简单一点,我以前做过,没问题
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-12-01 23:07
到[url] www.csdn.net[/url]去问。
OneWind
驱动小牛
驱动小牛
  • 注册日期2002-05-15
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分82分
  • 威望11点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-02 09:06
PostMessage(hWndEdit,WM_RBUTTONDOWN,100,100);//
位置对不对?
嘿,大家好!
ysy
ysy
驱动中牛
驱动中牛
  • 注册日期2002-02-18
  • 最后登录2008-08-25
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望29点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-02 09:08
到[url] www.csdn.net[/url]去问。

呵呵,支持一下。
BaoFu
驱动小牛
驱动小牛
  • 注册日期2002-10-07
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-02 20:37
谢谢,听诸位之言都有启发。我用的环境是BC++5.0。因为买了一本WIN2000 API函数的书,这是做书上例子程序发现的问题---这必定是我的程序有问题。客观上,我是在C下纯粹用API函数写的程序,也就是说,既没有用OWL,也没有用MFC(为的是深入了解一下API)。当然这更为困难--因为我对系统的了解还很肤浅。
     有空,我会将全部代码贴出来让大家指教的。
  
 
Gong_XG
驱动太牛
驱动太牛
  • 注册日期2002-10-01
  • 最后登录2010-11-25
  • 粉丝0
  • 关注0
  • 积分313分
  • 威望46点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-02 22:30
ok!
asdfasdf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-14
  • 最后登录2003-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-03 20:14
\"PostMessage(hWndEdit,WM_RBUTTONDOWN,100,100);//发送鼠标右健按下消息。这相当于在编辑区域的(100,100)处点击了一次鼠标右健,如果成功,应当调出右健菜单,但实际证明,并没有右健菜单出现。\"

弹出右键菜单一般是在放开右键时,你在发 PostMessage(hWndEdit,WM_RBUTTONDOWN,100,100) 之后接着再发一个 PostMessage(hWndEdit,WM_RBUTTONUP,100,100) 试试看?
XINGXD
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-04 14:41
发送鼠标event可以用VOID VMD_Post_Absolute_Pointer_Message(
   DWORD AbsX,
   DWORD AbsY,
   BYTE ButtonStatus
);
或VOID VMD_Post_Pointer_Message(
   DWORD DeltaX,
   DWORD DeltaY,
   BYTE ButtonStatus,
   MOUSE_INSTANCE* pMI
);
函数,在vtoolsd的和help中有说明


 :P我也在学习
游客

返回顶部