后台鼠标点击求助。

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:键盘按键可以正确发送
...全文
539 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
一个经过完善设计的经典网上购物系统,适用于各种服务器环境的高效网上购物系统解决方案,shopxp购物系统8.0是我们首次推出的免费购物系统源码,完整可用。我们的系统是免费的不需要购买,该系统经过全面测试完整可用,如果碰到问题,先检查一下本地的配置或到官方网站提交问题求助: 四种风格红 蓝 绿 粉,枯燥单调的界面风格,是商家们的最大的难题。后台鼠标轻轻一点,网站风格不停的变!会给您和您的客户带来很多惊喜! 网站管理地址:http://你的网址/admin/login.asp 用户名:admin 密 码:admin 三大强项 1.商品支持3级分类:纵观国内网店的发展趋势,仅二级分类的商城系统已经远远被淘汰了。已经具备发展规模的网店都已经是3级分类。 2.商品多元化展示:您的商品肯定会有不同颜色、不同尺寸、不同包装、不同样式....等等的同一产品,如果您的商城系统达不到这一功能,就 会给您的客户缩小他选购的空间,因为他不知道自己该如何下订单,如何购买他想要的颜色,他想要的尺寸 型号规格 3.新闻、专题均可分类:远古时代的商城系统新闻是没有分类的,严重影响客户对贵商城的了解与信任。闻可以自由划分为本站(本公司)的分 类,比如卓越网的卓越动态,专题也是如此,比如“淘宝网”的购物指南。 八大优势 1.商城广告位后台支持插入flash动画 即.swf文件:shopxp支持flash动画的后台插入,并且flash与图片可自由切换 2.管理员权限自定义:shopxp后台的管理员权限是自由划分的,具体可划分到某一个操作。 3.左侧商品分类两种展示样式 :系统内部集成两种分类风格,一种是合并的,当鼠标指向大类显示小类,另一种是大类小类全部展开的。后台 自由切换 4.商品大图小图高、宽后台调整 :全站的图片都可调整大小即高、宽,方便不同类型的产品更好的展示给客户 5.商品组合图展示:商品介绍页面的组合图展示是目前互联网最优秀、最完美的商品图片显示方法,让客户从更多角度来了解商品的设计与个性 6.整合了动网最新版论坛:论坛用户与商城用户实现同一账号登陆,只需要注册一次。不影响跟随动网升级。 7.MATA值自定义:可以针对某一件商品设置它的关键词 标题 <开源版本>

111,112

社区成员

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

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

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