C# WPF 中用代码模拟鼠标和键盘的操作

本文介绍了在WPF中如何通过代码模拟鼠标和键盘操作,由于WPF不支持Winform的SendKeys类,作者提供了一个解决方案。通过Simulation类,可以实现键盘按键(如Enter、Alt+F4)及组合键的模拟,以及鼠标移动和点击(如右键点击)等功能。

  原文地址
  C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的。但是可惜的是,在WPF中不能使用这个方法了。
  我们知道,在WPF中非UI线程刷新UI线程,需要使用Dispatcher.Invoke((Action)delegate { /* Your
code is put here */ });
方法。这里调用System.Windows.Forms.SendKeys.Send()方法会报错。

  下面这个代码文件做了一个很好的包装,可以下载后参考:
  Simulation.zip
  
  如何使用呢?
  很简单, 要敲一个键, 比如回车:
  Keyboard.Press(Key.Enter);
  Keyboard.Release(Key.Enter);
  
  要敲一个组合键:比如Alt+F4:
  Keyboard.Press(Key.LeftAlt);
  Keyboard.Press(Key.F4);
  Keyboard.Release(Key.LeftAlt);
  Keyboard.Release(Key.F4);
  
  要敲一段文字:
  Keyboard.Type(“notepad”);

  鼠标与之类似,比如:
  Mouse.MoveTo(new System.Drawing.Point(x, y));
  Mouse.Click(MouseButton.Right);
  
  
  Simulation类的定义如下:

//定义是这样的:

[DllImport("user32.dll", SetLastError = true)]
internal static extern int SendInput(int nInputs, ref INPUT mi, int cbSize);

//其中的INPUT结构表示一个键盘或鼠标操作:

[StructLayout(LayoutKind.Sequential)]
internal struct INPUT
{
internal int type;
internal INPUTUNION union;
};
[StructLayout(LayoutKind.Explicit)]
internal struct INPUTUNION
{
[FieldOffset(0)]
internal MOUSEINPUT mouseInput;
[FieldOffset(0)]
internal KEYBDINPUT keyboardInput;
};
[StructLayout(LayoutKind.Sequential)]
internal struct MOUSEINPUT
{
internal int dx;
internal int dy;
internal int mouseData;
internal int dwFlags;
internal int time;
internal IntPtr dwExtraInfo;
};
[StructLayout(LayoutKind.Sequential)]
internal struct KEYBDINPUT
{
internal short wVk;
internal short wScan;
internal int dwFlags;
internal int time;
internal IntPtr dwExtraInfo;
};
[Flags]
internal enum SendMouseInputFlags
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
Absolute = 0x8000,
};
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值