阅读:2261回复:9
各位老大:发送消息模拟鼠标动作遇到难题了!
为了便于您的理解,先说我的目标:
我先在桌面上打开一个应用程序窗口,例如“记事本”,然后运行我设计的程序,我是想让这个程序模拟鼠标操作,自动打开菜单,再模拟鼠标点击菜单中的某一项就可以执行该项功能等等。 从原理上说,程序中利用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()结果也一样。 那么问题出在哪里呢? |
|
最新喜欢:![]() |
沙发#
发布于: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我也在学习 |
|
板凳#
发布于: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) 试试看? |
|
地板#
发布于:2002-12-02 22:30
ok!
|
|
地下室#
发布于:2002-12-02 20:37
谢谢,听诸位之言都有启发。我用的环境是BC++5.0。因为买了一本WIN2000 API函数的书,这是做书上例子程序发现的问题---这必定是我的程序有问题。客观上,我是在C下纯粹用API函数写的程序,也就是说,既没有用OWL,也没有用MFC(为的是深入了解一下API)。当然这更为困难--因为我对系统的了解还很肤浅。
有空,我会将全部代码贴出来让大家指教的。 |
|
5楼#
发布于:2002-12-02 09:08
到[url] www.csdn.net[/url]去问。 呵呵,支持一下。 |
|
6楼#
发布于:2002-12-02 09:06
PostMessage(hWndEdit,WM_RBUTTONDOWN,100,100);//
位置对不对? |
|
|
7楼#
发布于:2002-12-01 23:07
到[url] www.csdn.net[/url]去问。
|
|
8楼#
发布于:2002-12-01 21:32
模拟鼠标事件要用mouse_event,其实可以直接向窗体发送菜单被执行的消息(WM_COMMAND),还简单一点,我以前做过,没问题
|
|
|
9楼#
发布于:2002-11-30 11:10
用mouse_event 试试,具体看MSDN
|
|