后台鼠标点击求助。

billcools 2012-10-06 08:14:16
[DllImport("user32.dll", EntryPoint = "PostMessage", CharSet = CharSet.Ansi)]
public static extern int PostMessage(IntPtr hWnd, int msg, int wParm, int lParm);

private const int MOUSEEVENTF_LEFTDOWN = 0x0002; /* left button down */
private const int MOUSEEVENTF_LEFTUP = 0x0004; /* left button up */

private void mClick(IntPtr hWnd, int mposx, int mposy)
{
PostMessage(hWnd, MOUSEEVENTF_LEFTDOWN, 0, mposx + (mposy << 16));
System.Threading.Thread.Sleep(500);
PostMessage(hWnd, MOUSEEVENTF_LEFTUP, 0, mposx + (mposy << 16));

}
请问,已经获取句柄,但是PostMessage传递的鼠标事件没反应是怎么回事?
Ps:键盘按键可以正确发送
...全文
517 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
billcools 2012-10-06
  • 打赏
  • 举报
回复
问题是我用循环的方式测试鼠标是否移动点击,但是貌似仍然没有移动事件,只有点击事件。
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

引用 13 楼 的回复:
程序1

C# code

public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
[DllImport("user32.dll")]
public static extern int……


请问,是不是我的坐标点计算方式有问题?
Pos……
[/Quote]
哦没有问题 不过个人跟癖好 [(y << 16) | x]
计算是没有问题 问题的关键就在于 你的 x 和 y本身的值了 还有 你要点击的目标是否找准了
billcools 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
程序1

C# code

public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
[DllImport("user32.dll")]
public static extern int……
[/Quote]

请问,是不是我的坐标点计算方式有问题?
PostMessage(hWnd, WM_LBUTTONDOWN, 0, mposx + (mposy << 16));
billcools 2012-10-06
  • 打赏
  • 举报
回复
刚才查了MSDN改了
private const int WM_LBUTTONDOWN = 0x0201; /* left button down */
private const int WM_LBUTTONUP = 0x0202; /* left button up */
但还是不行。
请问是不是应该用private const int WM_MOUSEMOVE = 0x0200;
坐标点该怎么传递呢?
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
还有 楼主 你确定你用的是
private const int MOUSEEVENTF_LEFTDOWN = 0x0002; /* left button down */
private const int MOUSEEVENTF_LEFTUP = 0x0004; /* left button up */
?????
这个冒失 是 mouse_event() 函数用的参数吧
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
程序1

public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, IntPtr wParam, IntPtr lParam);
public const int WM_LBUTTONDOWN = 0x201;
public const int WM_LBUTTONUP = 0x202;

private void button1_Click(object sender, EventArgs e) {
SendMessage((IntPtr)(0x0005072A), WM_LBUTTONDOWN, IntPtr.Zero, (IntPtr)(0x000F000F));
Thread.Sleep(500);
SendMessage((IntPtr)(0x0005072A), WM_LBUTTONUP, IntPtr.Zero, (IntPtr)(0x000F000F));
}
}

其中 0x0005072A 是程序2中窗体上面的一个按钮
0x000F000F 是按钮左上角 15,15的位置
程序2

public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}

private void Form1_MouseDown(object sender, MouseEventArgs e) {
this.Text = "MouseDown" + e.Location.ToString();
}

private void Form1_MouseUp(object sender, MouseEventArgs e) {
this.Text = "MouseUp" + e.Location.ToString();
}

private void button1_Click(object sender, EventArgs e) {
MessageBox.Show("MouseClick");
}
}

对于PostMessage 和 SendMessage 大多数情况下 个人癖好 Send
Send是直接调用目标的消息处理函数知道返回
Post只管把消息投递到目标消息队列由目标的GetMessage函数取出然后传递给消息处理函数
billcools 2012-10-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
C# code

private const Int32 WM_LBUTTONDOWN = 0x201;
private const Int32 WM_LBUTTONUP = 0x202;

PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
PostMessage(hWnd, WM_LBUTTONUP, 0, 0);



我的意思是这样啊
既……
[/Quote]

请问,你的意思是后台的鼠标移动用另外的方式传递吗?
billcools 2012-10-06
  • 打赏
  • 举报
回复
不传递坐标,怎么能知道具体点击哪里呢?
SocketUpEx 2012-10-06
  • 打赏
  • 举报
回复

private const Int32 WM_LBUTTONDOWN = 0x201;
private const Int32 WM_LBUTTONUP = 0x202;

PostMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
PostMessage(hWnd, WM_LBUTTONUP, 0, 0);


我的意思是这样啊
既然已经知道要点击的句柄了,难道Windows不会自己去找坐标吗?
还需要传入坐标吗?
如果我传入一个正确的句柄
又传入一个错误的坐标
会怎么样呢?

billcools 2012-10-06
  • 打赏
  • 举报
回复
因为这样不影响前台操作,鼠标在后台到指定坐标点击
SocketUpEx 2012-10-06
  • 打赏
  • 举报
回复
我很少使用PostMessage和SendMessage发送鼠标消息
我有一个小疑问啊
既然已经知道要点击的句柄了,为什么还要坐标啊?直接写0,0或者10,10行不行呢?

billcools 2012-10-06
  • 打赏
  • 举报
回复
请问能给个具体代码吗?谢谢
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
至于坐标 坐标应该是目标句柄的一个客服区坐标
crystal_lz 2012-10-06
  • 打赏
  • 举报
回复
如果说 我有一个窗体Frm1 窗体上面有一个按钮Button1
如果 我想通过PostMessage来像Button1发送一个鼠标模拟
PostMessage(Button1.Handle,WM_.......)
而不是
PostMessage(Frm1.Handle,WM_.....)
billcools 2012-10-06
  • 打赏
  • 举报
回复
刚才又试了试发现鼠标点击传递过去了,但是坐标好像不对,请问怎么后台发送指定坐标点击呢
billcools 2012-10-06
  • 打赏
  • 举报
回复
坐标对的,请问引用什么API。。不是引用PostMessage就可以了么。。。
能否给个代码。。谢谢
threenewbee 2012-10-06
  • 打赏
  • 举报
回复
坐标计算是否正确。
一品梅 2012-10-06
  • 打赏
  • 举报
回复
mclick,你没引用相应的API DLLIMPORT

109,884

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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