【问题标题】:Getting input into a process获取流程输入
【发布时间】:2011-05-19 17:46:08
【问题描述】:

在通过 yahoo messenger 与朋友交谈时,我告诉他,当有人开始对话时,让机器人回答通用消息会非常酷。想想我告诉他的话,我意识到做这样的事情会很有趣。问题是我对win32了解不多。

所以我的问题是:如何将一个进程“链接”到另一个进程和 windows 环境?目标是让应用程序在后台运行,该应用程序会进行某种查询以查看打开了哪些窗口,当出现新的 yahoo messenger 对话窗口时,它应该向该窗口发送击键事件列表。

我可以将 C# 或 VC++ 用于编程部分,并且我可以使用任何帮助:可以帮助我的具体答案或提示 - 例如:谷歌搜索什么。到目前为止,我的谷歌研究只提出了一些为您执行此操作的应用程序/dlls/代码和一些脚本内容,而我并没有完全在寻找。我想自己完成所有工作,以便从中学习。

【问题讨论】:

    标签: c# c++ windows winapi input


    【解决方案1】:

    看来您基本上是想控制其他应用程序。

    在 Windows 上大约有两种方法可以做到这一点

    1 - 使用低级 Windows API 在您的目标应用程序上盲目地触发键盘和鼠标事件。 这个工作的基本方式是使用Win32 SendInput method,但是你还需要做很多其他的工作才能找到窗口句柄等

    2 - 使用更高级别的 UI 自动化 API 以更结构化的方式与应用程序交互。 最好的(好吧,无论如何都是最新的)方法是使用 Windows vista 和 7 中附带的 Microsoft UI 自动化 API(它也可以在 XP 上使用)。 Here's the MSDN starter page for it.

    在我的工作中,我们使用 microsoft UI 自动化 API 对我们的应用程序进行自动化 UI 测试,而且还不错。但请注意,无论您选择如何解决此问题,都充满危险,并且它是否有效取决于目标应用程序。

    祝你好运

    【讨论】:

    • 我将使用第一个作为学习部分。如果将来我会偶然发现这类任务,显然我会尽量不重新发明轮子并去做第二个。谢谢!
    • 我注意到您的声誉很少,表明您是 StackOverflow 的新用户。欢迎 :-) 如果您发现此处的任何答案对您有所帮助,那么最好勾选答案旁边的向上箭头,以便将来向其他人表明您发现它有帮助。如果其中一个答案包含您实际决定实施的解决方案,那么这就是绿色“已接受”勾号的用途。干杯! :-)
    • @Orieon Edwards: 看来我还是经常碰到你这种 cmets;这也是一件好事,因为我总是忘记投票系统。
    【解决方案2】:

    与您正在寻找的域名并不完全相同,但是这一系列博客文章会告诉您您需要了解的内容(以及其他一些很酷的东西)。

    http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot

    【讨论】:

    • 非常有趣;但如果你遇到任何 FBI 特工,请不要告诉他们我说过。谢谢!
    【解决方案3】:

    如果你真的想从头开始学习,那么你应该使用 C++ 和原生 WIN32 API functions

    如果你想玩一点 C#,那么你应该看看 pinvoke.net 站点和 Managed Windows API 项目。

    您肯定需要Spy++ tool

    【讨论】:

      【解决方案4】:

      http://pinvoke.net/ 似乎是您要查找的网站。该站点解释了如何在高级语言中使用 Windows API 函数。在 pinvoke 上搜索我在下面列出的任何功能,它会为您提供能够在您的应用程序中使用这些功能所需的代码。

      您可能希望使用FindWindow 函数来查找您感兴趣的窗口。
      您需要进程 ID,因此请使用 GetWindowThreadProcessId 获取它。
      接下来,您需要使用OpenProcess 允许读取进程的内存。
      之后,您将需要使用 ReadProcessMemory 读取进程的内存以查看它发生了什么。
      最后,您需要使用PostMessage 函数将按键发送到窗口句柄。

      欢迎来到 Windows API 编程的精彩世界。

      【讨论】:

      • 听起来不错。谢谢你的提示和热烈的欢迎。所有的 win32 API 都应该很快就属于我了。
      • 如果您仍然大量使用 Win32-API,我宁愿只用 C++/Win32 编写代码。
      【解决方案5】:

      查看自动热键。这是做你想做的最快的方法。

      【讨论】:

      • 我正在寻找最好的方法;以及我可以从中学到最多的方法;可能它们是相同的;另外,正如我在问题中提到的,我不是在寻找可以为我做这件事的应用程序;无论如何感谢您的回答!
      猜你喜欢
      • 2015-05-30
      • 2021-03-22
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多