转载自:http://blog.csdn.net/yysyangyangyangshan/article/details/7171864
注 :这段代码是有点问题,当时调试没注意。
其实主要是展示一下
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
的用法,在这段代码中由于button1一直有焦点MainForm_KeyDown运行不了。然而我用了别的方法触发mouse_event结果没执行button1的点击事件。这个我再研究下。
鼠标自动运行事件在程序中也会用到的。它的原理是调用user32.dll的方法运行。
下面的代码是鼠标自动点击事件的一个例子。
新建一个c#窗体工程,在窗口上拖入一个button,注册button的鼠标点击事件。如下:
- public partial class MainForm : Form
- {
- public MainForm()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- MessageBox.Show("Button1点击事件!");
- }
- }
添加一个类,用来调用user32.dll的mouse_event方法:
- public class MouseFlag
- {
- [DllImport("user32.dll")]
- static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
- [Flags]
- enum MouseEventFlag : uint
- {
- Move = 0x0001,
- LeftDown = 0x0002,
- LeftUp = 0x0004,
- RightDown = 0x0008,
- RightUp = 0x0010,
- MiddleDown = 0x0020,
- MiddleUp = 0x0040,
- XDown = 0x0080,
- XUp = 0x0100,
- Wheel = 0x0800,
- VirtualDesk = 0x4000,
- Absolute = 0x8000
- }
- public static void MouseLefDownEvent(int dx, int dy, uint data)
- {
- mouse_event(MouseEventFlag.LeftDown,dx, dy, data, UIntPtr.Zero);
- }
- }
测试如下:
在窗体中加一个KeyDown事件,并调用自动点击的方法。
- public partial class MainForm : Form
- {
- public MainForm()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- MessageBox.Show("Button1点击事件!");
- }
- private void MainForm_KeyDown(object sender, KeyEventArgs e)
- {
- MouseFlag.MouseLefDownEvent(this.button1.Location.X, this.button1.Location.Y,0);
- }
- }
运行后,窗口有焦点的情况下按键盘的键,会触发button的click事件,如图: