转载自: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的鼠标点击事件。如下:

C#中实现模拟鼠标事件_click事件

[csharp]  view plain  copy
 print ?
  1. public partial class MainForm : Form  
  2. {  
  3.     public MainForm()  
  4.     {  
  5.         InitializeComponent();  
  6.     }  
  7.     private void button1_Click(object sender, EventArgs e)  
  8.     {  
  9.         MessageBox.Show("Button1点击事件!");  
  10.     }  
  11.   
  12. }  

添加一个类,用来调用user32.dll的mouse_event方法:

[csharp]  view plain  copy
 print ?
  1. public class MouseFlag  
  2.  {  
  3.      [DllImport("user32.dll")]  
  4.   
  5.      static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);  
  6.   
  7.      [Flags]  
  8.      enum MouseEventFlag : uint  
  9.      {  
  10.          Move = 0x0001,  
  11.          LeftDown = 0x0002,  
  12.          LeftUp = 0x0004,  
  13.          RightDown = 0x0008,  
  14.          RightUp = 0x0010,  
  15.          MiddleDown = 0x0020,  
  16.          MiddleUp = 0x0040,  
  17.          XDown = 0x0080,  
  18.          XUp = 0x0100,  
  19.          Wheel = 0x0800,  
  20.          VirtualDesk = 0x4000,  
  21.          Absolute = 0x8000  
  22.      }  
  23.      public static  void MouseLefDownEvent(int dx, int dy, uint data)  
  24.      {  
  25.          mouse_event(MouseEventFlag.LeftDown,dx, dy, data, UIntPtr.Zero);  
  26.      }  
  27.  }  

 测试如下:
 在窗体中加一个KeyDown事件,并调用自动点击的方法。

[csharp]  view plain  copy
 print ?
  1.  public partial class MainForm : Form  
  2. {  
  3.     public MainForm()  
  4.     {  
  5.         InitializeComponent();  
  6.     }  
  7.   
  8.     private void button1_Click(object sender, EventArgs e)  
  9.     {  
  10.         MessageBox.Show("Button1点击事件!");  
  11.     }  
  12.   
  13.     private void MainForm_KeyDown(object sender, KeyEventArgs e)  
  14.     {  
  15.         MouseFlag.MouseLefDownEvent(this.button1.Location.X, this.button1.Location.Y,0);  
  16.     }  
  17.   
  18. }  

运行后,窗口有焦点的情况下按键盘的键,会触发button的click事件,如图:
 C#中实现模拟鼠标事件_C#_02