首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

wpf中怎么模拟键盘输入

2012-09-28 
wpf中如何模拟键盘输入?如题 我要写一个模拟键盘 要做成一个 WPF user control library在wpf里边好像 send

wpf中如何模拟键盘输入?
如题 我要写一个模拟键盘 要做成一个 WPF user control library

在wpf里边好像 sendKey.send(); 好像不好用

那位知道怎么模拟键盘输入呢?

[解决办法]

C# code
其实SendKeys类提供的方法蛮好用的,可惜的是WPF中不能用了,说是WPF的消息循环方式改成了Dispatcher,所以直接调用System.Windows.Forms.SendKeys.Send()方法会报错. 不过没关系, 至少有use32的SendInput可用,通过P/Invoke方式,我们可以模拟键盘或鼠标操作.定义是这样的:[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,};关于这些方法或结构的定义在http://www.pinvoke.net/index.aspx 这个网站上可以查找得到(但不保证百分百靠谱) 下面这个代码文件做了一个很好的包装,可以下载后参考: Simulation.zip 如何使用呢? 很简单, 要敲一个键, 比如回车:Keyboard.Press(Key.Enter);Keyboard.Release(Key.Enter);要敲一个组合键:比如Alt+F4Keyboard.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); 

热点排行