.Net下的鼠标键盘模拟技术实战
下面这个例子是如何在程序中使用以上的API函数的片段:
// 定义鼠标事件通过这两个API函数的调用就可以实现对鼠标和键盘的模拟,当然仅仅知道这两个函数是不够的,因为我们想将鼠标和键盘的消息发送给其他程序,还需要先捕获该程序的内存句柄。这个时候就需要用到System.Diagnostics.Process类来处理,这个类可以根据应用程序的名称来捕获程序.
private enum MouseEvent : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}
// 处理Click事件
public void Click(ButtonType type)
{
switch (type)
{
case ButtonType.Left:
mouse_event(MouseEvent.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEvent.LeftUp, 0, 0, 0, UIntPtr.Zero);
break;
case ButtonType.Middle:
mouse_event(MouseEvent.MiddleDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEvent.MiddleUp, 0, 0, 0, UIntPtr.Zero);
break;
case ButtonType.Right:
mouse_event(MouseEvent.RightDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEvent.RightUp, 0, 0, 0, UIntPtr.Zero);
break;
}
}
using System.Diagnostics;当然,我们还可以设置全局的鼠标和键盘钩子来截获鼠标和键盘数据处理再转发,这种方法是按键木马程序常用的。
Process[] pros = Process.GetProcessesByName(appName);
第二,为什么我们要单独提出来针对游戏的鼠标键盘模拟呢?主要的原因就是大多数的游戏是使用DirectX开发的,而DirectX的HAL层事件是不通过系统消息队列的来完成鼠标和键盘操作的,而是直接与驱动程序交互。那么上面我们讲的那种方法就没有办法应用到游戏中来。这里就需要用到WinIo.dll这个库文件来帮助我们完成这样一个任务。WinIo.dll是网上的一个免费的库文件,它在实现机制上绕过了windows的很多底层限制。因此,我们可以利用这个dll文件来轻松的完成鼠标键盘模拟,在这里要强调一下这个dll文件只针对ps端子接口的鼠标键盘有效,对USB接口的鼠标键盘是无效的。如果想实现USB接口的鼠标键盘模拟就需要进入到第三节基于驱动方式的鼠标键盘模拟。以下是在开发中需要用到主要几个WinIo.dll的API接口:
[DllImport("winio.dll", EntryPoint = "InitializeWinIo")]
private static extern bool InitializeWinIo();
[DllImport("winio.dll", EntryPoint = "GetPortVal")]
private static extern bool GetPortVal(int wPortAddr, out Int32 pdwPortVal, byte bSize);
[DllImport("winio.dll", EntryPoint = "SetPortVal")]
private static extern bool SetPortVal(int wPortAddr, Int32 dwPortVal, byte bSize);
[DllImport("winio.dll", EntryPoint = "ShutdownWinIo")]
private static extern bool ShutdownWinIo();
注:
WinIo.dll可以通过www.google.com搜索引擎查找下载。
0
相关文章