怎样向窗口发送鼠标消息?????

453 2002-04-24 02:50:03
我想向窗口发送鼠标消息,以代替用鼠标对窗口的点击,我用spy++跟踪了鼠标点击的过程,它分别发送了一个wm_parentnotify和一个wm_mouseactive消息,并且还有一个是wm_user+401,并注明posted,我不明白它是什么意思,
...全文
542 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
453 2002-05-03
  • 打赏
  • 举报
回复
除了发送消息时鼠标的位置不太好确定外,问题算是解决了,不过中间隔的时间长了点。
tg123 2002-04-25
  • 打赏
  • 举报
回复
sendmessage hwnd,wm_*,0,0
sonicdater 2002-04-24
  • 打赏
  • 举报
回复
我给你这个 代码。

下面这段代码的目的是 模拟鼠标点击事件。
请你自己 根据目的,传入 你想操作的窗体的句柄 hWnd 到 参数lnghWND 中。
------------------------------------------------------------------
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202

Public 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 SendClick(lnghWND As Long, x As Long, y As Long)
Dim lngResult As Long
Dim lnglParam As Long

lnglParam = (y * &H10000) + x

lngResult = SendMessage(lnghWND, WM_LBUTTONDOWN, 0&, ByVal lnglParam)
lngResult = SendMessage(lnghWND, WM_LBUTTONUP, 0&, ByVal lnglParam)
End Sub
==================================================================
另外,不要忘了,把windows corrdinate system 设置为 pixels
453 2002-04-24
  • 打赏
  • 举报
回复
有个例子吗,我好像很难试出一个正确的使用方法,还有,程序运行产生错误
compile error:
Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions.
很难理解呀!
288794 2002-04-24
  • 打赏
  • 举报
回复
找到IE浏览器窗口的句柄,使用 Postmessage 发送 WM_LBUTTONDOWN,WM_LBUTTONUP ... 等消息.
453 2002-04-24
  • 打赏
  • 举报
回复
说具体点就是我要向一个IE浏览器窗口发送点击消息,以代替真实的点击。
combread 2002-04-24
  • 打赏
  • 举报
回复
呵呵,不好意思。
关注!
gump2000 2002-04-24
  • 打赏
  • 举报
回复
针对不同的控件发不同的消息吧
453 2002-04-24
  • 打赏
  • 举报
回复
朋友,我要用的是发送鼠标消息,这样我就可以一边完成点击的工作一边去做其它的事情,而不是模拟鼠标事件,我现在的程序中就是用的mouse_event来实现的,但我觉得它太不方便所以才要改变一下,依然感谢。
combread 2002-04-24
  • 打赏
  • 举报
回复
示例代码:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10

Private Sub Command1_Click()
Dim a As Integer

Do
a = a + 1
If a = 3 Then GoTo proc_exit
'Simulate a mouseclick on the cursor's position
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0, 0
DoEvents
Loop

proc_exit:
End Sub
combread 2002-04-24
  • 打赏
  • 举报
回复
【VB声明】
Private Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

【说明】
模拟一次鼠标事件

【备注】
进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度

【参数表】
dwFlags -------- Long,下述标志的一个组合
MOUSEEVENTF_ABSOLUTE

dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 - MOUSEEVENTF_MOVE
移动鼠标
MOUSEEVENTF_LEFTDOWN
模拟鼠标左键按下
MOUSEEVENTF_LEFTUP
模拟鼠标左键抬起
MOUSEEVENTF_RIGHTDOWN
模拟鼠标右键按下
MOUSEEVENTF_RIGHTUP
模拟鼠标右键按下
MOUSEEVENTF_MIDDLEDOWN
模拟鼠标中键按下
MOUSEEVENTF_MIDDLEUP
模拟鼠标中键按下
dx
Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动

dy ------------- Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动

cButtons ------- Long,未使用

dwExtraInfo ---- Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序

7,788

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧