【问题标题】:Send keys without SendMessage and PostMessage不带 SendMessage 和 PostMessage 的发送密钥
【发布时间】:2012-04-11 13:19:08
【问题描述】:

是否可以在没有SendMessagePostMessage API 的情况下向程序发送密钥?

【问题讨论】:

  • 肯定有一些方法不涉及您使用那些特定的api,但最终,密钥仍将使用消息队列发送。为什么不直接使用它们?
  • 因为发送/发布 WM_CHAR 消息非常容易,所以我从未尝试过其他任何方法。

标签: delphi winapi sendmessage sendkeys postmessage


【解决方案1】:

伪造输入的官方方法不涉及直接发送或发布 Windows 消息。相反,您应该致电SendInput

当您使用SendInput 时,它与实际按下真正的键没有区别。当您调用SendInput 来伪造键盘输入时,系统最终会将消息发送到创建具有键盘焦点的窗口的前台线程的消息队列中。

【讨论】:

  • "indistinguishable" : 许多拥有高级机器人保护的扑克客户往往不同意:)。但一般来说,正常的程序不会有任何区别。
  • @Cray 扑克客户如何注意到差异?
  • 上次我正在研究这个(比如几年前),有很多关于 GetAsyncKeyState 以及 SendInput 如何无法欺骗该函数的讨论。但这显然是最简单的检查方法之一(它甚至是一个记录在案的 ring3 函数,没有什么偷偷摸摸的),而且帽子比这更深入。
  • @Cray 你知道任何其他“难以区分”的方法吗?我很清楚自制的键盘驱动程序应该可以解决这个问题,但是我不熟悉C++..只有C#
  • 这当然取决于您的应用程序,如果真的是在扑克客户之后,还是在其他东西之后。如果你可以做一个简单的 SendInput 测试,看看你的目标程序是否愿意看穿它。但我所知道的其他研究方法是 API 函数拦截(例如拦截 GetAsyncKeyState)或您提到的驱动程序。不过,您将需要 C 方面的知识。不过我不是专家,可能还有其他方法,祝你好运!
猜你喜欢
  • 2011-09-30
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多