您的位置:首页 > 编程语言 > C#

C#中实现模拟鼠标事件

2012-01-02 20:35 459 查看
注 :这段代码是有点问题,当时调试没注意。

其实主要是展示一下

[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事件,如图:



你还可能感兴趣:c#界面鼠标拖动 控件在父窗体或屏幕中的绝对坐标
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: