前些天,我在windows上写了一个用Kinect来玩水果忍者的C#程序。
关键技术主要是
- Kinect动作读取,这个我分别有Microsoft Kinect for Windows SDK版本以及OpenNI版本——切水果的程序是用OpenNI来做的,因为有现成的手势跟踪中间件。
- 鼠标事件模拟。水果忍者在windows上就是用鼠标来玩的嘛。所以,只要把用代码来模拟鼠标事件就行了。
我先是在网上搜索并到了一个Windows Input Simulator的项目
http://inputsimulator.codeplex.com/
但是,作者的代码支持的是键盘事件,没有鼠标事件。我除了用Kinect来玩水果忍者,还拿来操作NES红白机在windows上模拟器,也需要键盘事件。于是我就自己在他的核心InputSimulator类中加入了鼠标支持。
主要是调用了如下windows API
static extern UInt32 SendInput(UInt32 numberOfInputs, INPUT[] inputs, Int32 sizeOfInputStructure);/*这是InputSimulator的核心*/
static extern bool SetCursorPos(int X, int Y);/*我用来移动鼠标的*/
static extern bool GetCursorPos(out Point lpPoint);/*我用来获取鼠标当前位置的*/
使用前注意要使用ScreenPositionToInputPosition或ScreenPositionToInputPosition方法将屏幕坐标转换为世界坐标(?或者应该叫什么名字?物理坐标?点阵坐标?)
例子:
//鼠标单击
InputSimulator.SimualteMouseClick(VirtualKeyCode.LBUTTON, RealworldPointToInputPonit(e.EndPosition));
//鼠标移动
InputSimulator.SimulateMouseMove(RealworldPointToInputPonit(e.Position));
注意,此源码包按原Windows Input Simulator项目的license要求,继承Microsoft Public License。
好久没更新优快云博客了,这一篇写得比较仓促。
对这个包有问题的童鞋,请在下面留言
下载地址:http://download.youkuaiyun.com/detail/fandongwei/4589648
Java也可以模拟键盘、鼠标事件,并且更简单。使用Robot类即可,需要注意的是,Robot对于鼠标的坐标用的直接就是屏幕坐标,这一点和windows api不一样