C# SendInput 模拟鼠标操作的实现方法模拟鼠标操作的实现方法
C# SendInput 模拟鼠标操作的实现方法,需要的朋友可以参考一下
刚刚开始学习C#,想自己做一个网页游戏的挂。游戏里面有收钱的动作,一个建筑物一个建筑物的点,很累啊。于是想用C#模
拟鼠标操作替我收钱,想着学习这个对以后的测试工作也有帮助,于是有了动力。学习过程也是曲折的,因为网上搜了半天资
料很少。该游戏是Flash的,用sendmessage不行,因为取不到里面的对象。查到有些介绍Mouse_Event的文章,但是msdn
上说已经过时。于是查到了SendInput函数。
废话少说,上代码:
首先看下 Win API 中SendInput函数描述:
复制代码 代码如下:
UINT WINAPI SendInput(
__in UINT nInputs,
__in LPINPUT pInputs,
__in int cbSize
);
对应的C#代码:
复制代码 代码如下:
[DllImport("user32.dll")]
public static extern UInt32 SendInput(UInt32 nInputs,Input[] pInputs, int cbSize);
其中参数pInputs是的数组类型,数组元素INPUT结构,所以我们下面还要在C#中定义对应的INPUT结构或者对象。INPUT结
构中主要是定义你需要的鼠标或者键盘等操作。nInputs指明pInputs数组长度。cbSize指明INPUT结构的大小。
定义INPUT结构,下面是Win API 中INPUT结构描述:
复制代码 代码如下:
typedef struct tagINPUT {
DWORD type;
union {
MOUSEINPUT mi;
KEYBDINPUT ki;
HARDWAREINPUT hi;
} ;
} INPUT, *PINPUT;
对应的C#代码
复制代码 代码如下:
[StructLayout(LayoutKind.Explicit)]
public struct Input
{
[FieldOffset(0)]public Int32 type;
[FieldOffset(4)]public MouseInput mi;
[FieldOffset(4)]public tagKEYBDINPUT ki;
[FieldOffset(4)]public tagHARDWAREINPUT hi;
}
上面看到,还有MOUSEINPUT,KEYBDINPUT,HARDWAREINPUT结构需要定义。下面直接贴出代码啦。
Win API中描述:
复制代码 代码如下:
typedef struct tagMOUSEINPUT { LONG dx; LONG dy; DWORD mouseData; DWORD dwFlags; DWORD time;
ULONG_PTR dwExtraInfo; } MOUSEINPUT, *PMOUSEINPUT;
typedef struct tagKEYBDINPUT { WORD wVk; WORD wScan; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT;
typedef struct tagHARDWAREINPUT { DWORD uMsg; WORD wParamL; WORD wParamH; } HARDWAREINPUT,
*PHARDWAREINPUT;
评论1