【问题标题】:Background Mouse simulation背景鼠标模拟
【发布时间】:2009-07-16 20:47:37
【问题描述】:

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

【问题讨论】:

  • 只是无法在《魔兽世界》中更上一层楼吧?

标签: c# mouse driver


【解决方案1】:

是否可以使用单独的程序(例如 autohotkey)来驱动鼠标移动?因为那是我会做的。

【讨论】:

  • 好吧,我可以在 C# 中移动鼠标就好了。我只需要能够对背景窗口执行此操作,而我可以使用其他鼠标执行其他操作。
【解决方案2】:

我不确定你的目标是什么程序,但我已经看到了一些很酷的解决方法,用于阻止 PostMessage 的游戏(游戏将不被命名;p)。

我不知道挂钩虚拟鼠标驱动程序是否可行。我以前听说过这种方法,但我的感觉是,如果 PostMessage 被阻止,那将是徒劳的。鼠标驱动程序不只是使用标准窗口消息向游戏窗口发送消息吗?

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

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

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

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

【讨论】:

  • 非常有用的帖子。我认为这不是针对这里的人,但是有人建议我在这里发帖,因为你们比大多数人都了解更多。我觉得这是一项非常复杂的任务,我需要另一种解决方案。
  • 我很确定我已经搞砸了直接从驱动程序读取鼠标和键盘输入而不是挂钩 Windows API 事件的“保护”。实现虚拟鼠标/键盘驱动程序应该可以工作。好吧,我试过了,但是当达到极低的水平时,我对混乱和缺乏支持感到厌恶。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多