.net中模拟键盘和鼠标操作
2024-08-31 23:09:20
周银辉
其实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);
最新文章
- NGUI 按钮点击音效统一管理开启与关闭
- hdu 1005 1021 递归超限 找规律 // 只要看题中n较大都是有规律的
- tp auth 转载保存
- mac skim 修改背景色
- Pubwin服务端重装(安装)教程
- HDU 1361 Parencodings(栈)
- Darwin Streaming Server 安装流程
- WOW
- Swift搭建本地http服务器,实现外部视频即时播放
- NFS配置与安装
- java程序中中常用到的linux操作
- Jmeter 录制脚本(二)
- Oracle性能优化1-总体思路和误区
- Hadoop系列-zookeeper基础
- SQL中rownum和order by的执行顺序的问题
- 内置函数——format
- gdb常用命令小结
- (转)Inno Setup入门(五)——添加readme文件
- Mobile IP
- python函数调用时传参方式
热门文章
- 【2013】将x插入有序数列
- c# 读/写文件(各种格式)
- Android shape画圆点
- java中关于File类的mkdirs()和FIle()构造方法在windows环境内网测试总结
- css3-1 css3游戏介绍、css3样式和优先级
- js进阶正则表达式13RegExp对象方法(RegExp对象的方法:compile,test,exec)(子表达式 var reg1=/([a-z]+)\d/)
- MethodInterceptor拦截器
- C++ 与 Java 语言对比
- AppStoreID--安装URL--应用更新URL--应用评分URL
- ANR问题分析实例