如果存在差异:
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);
}
}
答案 0 :(得分:3)
如果您创建正确的Event参数,则没有区别。找出该事件的唯一方法是从“机器”来分析时刻。
答案 1 :(得分:3)
@Garath,
当事件来自对LLMHF_INJECTED
函数的调用时,MSLLHOOKSTRUCT包含mouse_event
标志。
您可以按我解释here使用SetWindowsHookEx
来检索此信息。
答案 2 :(得分:0)
控件的实际点击和鼠标事件处理程序的程序调用之间的区别应该是sender
参数。
对于真正的鼠标点击,您会收到被点击为发件人的控件。当您以编程方式调用事件处理程序时,您应该提供明智的发件人
答案 3 :(得分:0)
我也尝试在C#中执行此操作,但是在注入的c#dll中,托管的clr。 我的一位朋友建议阅读这篇文章http://pastebin.com/rj4YcW4C
我尝试过mouse_event,PostMessage,SendMessage,SendInput和Cursor.Position。 所有人都被忽略了,但我认为那篇文章有我们都寻求的答案。