C#winform自动触发鼠标、键盘事件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#winform⾃动触发⿏标、键盘事件

要在C#程序中触发⿏标、键盘事件必须要调⽤windows函数。

⼀、⿏标事件的触发

1.引⽤windows函数mouse_event

///<summary>

///⿏标事件

///</summary>

///<param name="flags">事件类型</param>

///<param name="dx">x坐标值(0~65535)</param>

///<param name="dy">y坐标值(0~65535)</param>

///<param name="data">滚动值(120⼀个单位)</param>

///<param name="extraInfo">不⽀持</param>

[DllImport("user32.dll")]

static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

MouseEventFlag表⽰⿏标事件的类型,可取多个枚举值组合。注意dx,dy参数,必须是绝对坐标(0,0)~(65535,65535)中的⼀点。///<summary>

///⿏标操作标志位集合

///</summary>

[Flags]

enum MouseEventFlag : uint

{

///<summary>

///⿏标移动事件

///</summary>

Move = 0x0001,

///<summary>

///⿏标左键按下事件

///</summary>

LeftDown = 0x0002,

LeftUp = 0x0004,

RightDown = 0x0008,

RightUp = 0x0010,

MiddleDown = 0x0020,

MiddleUp = 0x0040,

XDown = 0x0080,

XUp = 0x0100,

Wheel = 0x0800,

VirtualDesk = 0x4000,

///<summary>

///设置⿏标坐标为绝对位置(dx,dy),否则为距离最后⼀次事件触发的相对位置

///</summary>

Absolute = 0x8000

}

2.调⽤mouse_event函数,触发⿏标事件

///<summary>

///触发⿏标事件

///</summary>

///<param name="x"></param>

///<param name="y"></param>

private static void DoMouseClick(int x, int y)

{

int dx = (int)((double)x / Screen.PrimaryScreen.Bounds.Width * 65535); //屏幕分辨率映射到0~65535(0xffff,即16位)之间

int dy = (int)((double)y / Screen.PrimaryScreen.Bounds.Height * 0xffff); //转换为double类型运算,否则值为0、1

mouse_event(MouseEventFlag.Move | MouseEventFlag.LeftDown | MouseEventFlag.LeftUp | MouseEventFlag.Absolute, dx, dy, 0, new UIntPtr(0)); //点击 }

⼆、键盘事件的触发

1.引⽤windows函数keybd_event

///<summary>

///键盘事件

///</summary>

///<param name="bVk"> virtual-key code</param>

///<param name="bScan">hardware scan code</param>

///<param name="dwFlags"> flags specifying various function options</param>

///<param name="dwExtraInfo"> additional data associated with keystroke</param>

[DllImport("user32.dll")]

public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

bvk为键值,例如回车13,bScan设置为0,dwFlags设置0表⽰按下,2表⽰抬起;dwExtraInfo也设置为0即可。

2.调⽤keybd_event函数,触发键盘事件

下⾯的代码演⽰触发Ctrl+C组合键,执⾏复制操作。

keybd_event((byte)Keys.ControlKey, 0, 0, 0);

keybd_event((byte)Keys.C, 0, 0, 0);

keybd_event((byte)Keys.ControlKey, 0, 2, 0);

keybd_event((byte)Keys.C, 0, 2, 0);

相关文档
最新文档