当前位置:编程学习 > VB >>

如何用PostMessage 后台发送鼠标点击 窗体任意设置的位置

看了这几年关于PostMessage 后台发送鼠标点击 窗体任意设置的位置,居然没有发现一个代码是可以实现的,郁闷啊,不知道这些代码错误在什么地方


Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202

Private Sub Command1_Click()
    SendClick Me.hwnd, 10, 10
End Sub

Private Sub Form_Click()
    MsgBox "dasd"
End Sub

Private Function SendClick(hwnd As Long, mX As Long, mY As Long)
    '发送点击消息
    Dim I As Long
    I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
    I = PostMessage(hwnd, WM_LBUTTONUP, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
End Function




你要是说 hwnd不对,所以没有发送到,好像又不是这么回事情,不知道为什么。现在难道高手都不在了吗? PostMessage设置窗体位置?楼主为什么舍本求末? 我有这个代码。窗体中坐标可以是点击的。没问题的。
如果是普通creat的窗体。那么连里边的按钮也是可以点的。但是你如果是gui窗体 gdi生成的只能是 背景。按钮都是不可以点的。
还有就是。如果就是messagebox对话框是不可以点击的。而且如果出现对话框。窗体内句柄也是不可以点击的。messagebox只能是桌面级句柄才可以点击。这个测试过很奇怪。 如果是普通creat的窗体。那么连里边的按钮也是可以点

其中creat的窗体是什么意思,不是指一般程序生成的窗体吗? 有没有会的? 顶一下,我也想知道为什么就不管用?

在很多论坛都看到过楼主发的这些代码,有个叫“嗷嗷叫的老马”发过多次。可是为什么我的机子上就测试不成功呢~?


同样的代码肯定有很多人成功了,为什么有的人就不能成功?到底是哪的原因呢~!?
引用 5 楼 guaimu 的回复:
顶一下,我也想知道为什么就不管用?

在很多论坛都看到过楼主发的这些代码,有个叫“嗷嗷叫的老马”发过多次。可是为什么我的机子上就测试不成功呢~?


同样的代码肯定有很多人成功了,为什么有的人就不能成功?到底是哪的原因呢~!?


我就是那个嗷嗷叫的老马- -!

楼主的测试代码应该是不成功的,因为VB的窗体好象对产生单击事件的消息响应条件不仅仅是这两条消息.

以前我试过,仅这两条消息发送的话,就算与手工点击时产生的消息一模一样,也仍然不会产生单击事件.

因此就更不用说想要以相对坐标点击窗体内部的控件了.

这个现象的具体原因我没有深入去了解,不过其它控件,例如按钮却是可以响应的.

将楼主代码改一下,再添加一个按钮,然后再加个消息框,像这样:

private sub Command2_Click()
    msgbox "Click!"
end sub


接着将按钮1内的句柄换成按钮2的句柄:

SendClick Command2.hwnd, 10, 10


这样就OK了.

另外,这个代码只要坐标正确,可以点击网页,已经用它做了好多XXXXXX软件了,咳咳. 老马,有空看看postmessage任意位置点击,我搞了几个月了,还是不行啊,救命啊 https://code.csdn.net/snippets/112740
帮忙看看,感谢! http://www.autohotkey.com
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,