【发布时间】:2013-04-16 08:37:52
【问题描述】:
- 真正的鼠标点击(手动)和执行从代码中点击(在 c# 中通过 mouse_event)有区别吗?
- 同理,真正移动鼠标光标和设置Cursor.Position有区别吗?
如果有区别:
- 如何识别该事件的来源?
- 有一种方法可以模拟鼠标点击/光标移动,就好像它来自鼠标或键盘驱动程序?
Edit1:为@Marco Forberg 添加了代码示例。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
Button button;
private void Form1_Load(object sender, EventArgs e)
{
button = new Button();
button.Text = "Click";
button.Location = new Point(50, 50);
button.Size = new System.Drawing.Size(100, 20);
button.Click += button_Click;
Controls.Add(button);
Button simulate = new Button();
simulate.Text = "Simulate";
simulate.Location = new Point(50, 100);
simulate.Size = new System.Drawing.Size(100, 20);
simulate.Click += simulate_Click;
Controls.Add(simulate);
}
void button_Click(object sender, EventArgs e)
{
Console.WriteLine(sender);
}
void simulate_Click(object sender, EventArgs e)
{
Point location = button.PointToScreen(Point.Empty);
Cursor.Position = new Point(location.X + (button.Width / 2), location.Y + (button.Height / 2));
mouse_event(0x02 | 0x04, 0, 0, 0, 0);
}
}
【问题讨论】:
-
真正的点击可能会被拦截,并可能引发多个事件,运行一个事件只会触发一个事件。
-
是的,例如。鼠标左键单击应该由 2 个事件创建:DOWN 0x02 和 UP 0x04。
标签: c# mouseevent keyevent mouseclick-event cursor-position