获取进程的输入

时间:2011-02-07 19:53:46

标签: c# c++ windows winapi input

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

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

我可以使用C#或VC ++作为编程部分,我可以使用任何帮助:具体的答案或可以帮助我的提示 - 例如:google for google。到目前为止,我的谷歌研究只提出了一些应用程序/ dll /代码,为你和一些脚本编写的东西,我并没有完全搜索。我想自己做所有的工作,所以我可以从中学习。

5 个答案:

答案 0 :(得分:1)

您似乎基本上想要控制其他应用程序。

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

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

2 - 使用更高级别的UI自动化API以更加结构化的方式与应用程序进行交互。 最好的(最好的,最新的)方法是使用windows vista和7中提供的Microsoft UI Automation API(它也可以在XP上使用)。 Here's the MSDN starter page for it.

我们在我的工作中使用microsoft UI自动化API来对我们的应用程序进行自动UI测试,这也不算太糟糕。但要注意,无论你如何选择解决这个问题,它都充满了危险,它是否起作用取决于目标应用。

祝你好运

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果你真的想从头学习一切,那么你应该使用C ++和本地WIN32 API functions

如果您想使用C#玩一下,那么您应该查看pinvoke.net网站和Managed Windows API项目。

您肯定需要的是Spy++ tool

答案 3 :(得分:0)

查看Autohotkey。这是做你想做的最快的方式。

答案 4 :(得分:0)

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

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

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