背景鼠标模拟

时间:2009-07-16 20:47:37

标签: c# mouse driver

我正在用C#编写一个附加到另一个进程并从另一个进程读取内存等的程序。我正在寻找一种方法来模拟其他过程中的鼠标移动,但另一个过程专门阻止PostMessage,SendMessage等方法。我试图远离注入或内存写入,所以这些不是一个选项为了这。我被告知最好的方法是创建一个虚拟鼠标驱动程序并将其挂钩到另一个进程。任何人都有其他方法可以做到这一点,或者我将如何挂钩虚拟鼠标驱动程序?

3 个答案:

答案 0 :(得分:0)

使用单独的程序(如autohotkey)来驱动鼠标移动是否可行?因为那就是我要做的事。

答案 1 :(得分:0)

我不确定你的目标是什么,但是我看到了阻止PostMessage的游戏的很酷的解决方法(游戏将不知名; p)。

我不知道挂钩虚拟鼠标驱动程序是否有效。我之前听说过这种方法,但我的感觉是,如果PostMessage被阻止,那么它将毫无结果。鼠标驱动程序是不是只使用标准的Windows消息向游戏窗口发送消息?

我见过开发人员阻止PostMessage / SendMessage的最常见的方法是从系统文件夹中复制Windows DLL并将其与游戏一起分发(我想知道这是否合法?)。由于DLL加载了游戏地址空间的本地函数,游戏可以通过确保调用者也是游戏地址空间的本地来阻止其他进程访问这些函数。

绕过这种方法的一种简单方法是将DLL注入游戏进程并挂钩其功能。但是,开发人员对这种方法很不满意,并且仍然可以通过在函数的入口点执行某些检查来阻止您的调用(我不确定这些检查是什么)。根据我的理解,解决此检查的一种简单方法是自己定义PostMessage函数的前几个字节,然后跳转到PostMessage中的检查后的一个点。

我不想再详细说明了,因为我所讨论的内容非常具体,主题非常深刻,不断变化,并且并没有真正针对Stack Overflow上的人。

我提到的所有这些都是我从冲浪各种游戏黑客论坛中获取的基本想法 - 这些是寻找这类问题的地方。游戏黑客社区的信息非常紧张,但经过足够的时间后,每个人都愿意分享他们的方法:)

答案 2 :(得分:0)

在开发SCAR(一个RuneScape宏程序)时,开发人员最终必须围绕java文件(称为SMART)构建一个包装器,并且可以使用基本函数调用来控制此包装器中的“假鼠标”。我不知道如何在C#中执行此操作,但它可以在Java中实现。在SMART之前,您必须允许使用鼠标(因此直接移动鼠标)或使用称为“无声鼠标”的东西。正如Kai所描述的那样,无声鼠标连接到java.exe及其JVM中的函数和受控鼠标输入。然而,正如Kai所描述的那样,这很容易被发现,因此没有人使用它。