如题 我要写一个模拟键盘 要做成一个 WPF user control library在wpf里边好像 sendKey.send(); 好像不好用那位知道怎么模拟键盘输入呢?
解决方案 »
- asp.net请求java接口时,报“An error was discovered processing the <wsse:Security> header
- 求一个正则表达式
- winform程序打包使用innosetup打包工具问题:怎样让打包的程序在安装前检查系统是否启动某服务,如果服务启动关闭该服务!
- 关于datagridview数据上下移的问题?
- c#中如何调用API函数GdipSaveImageToStream ?
- C# 中如何调用C++的方法!
- 排列算法问题
- 在web form中如何弹出一个windows的登陆对话框并验证用户
- winform:很奇怪的问题,高手来看这是什么原因
- 第一次发帖。。。。请大家帮忙了!555年 都没过好!
- C#中有没有这样的控件,像 TabControl,但标签在左边(一行一个)
- winform套打问题,求高人支招
其实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+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);
http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html