如何编写可以与其他程序交互的程序

时间:2011-10-30 14:24:40

标签: java

我想写一个可以在Windows上播放纸牌的程序。用户将运行该程序并打开纸牌,并在卡片移动时观看。很容易编写AI用于播放纸牌的程序(我显然没有Windows纸牌的源代码)。我可以想到这样做的一种方式是,如果我拍摄了纸牌的图像并对其进行分析以确定卡片的当前状态,那么我可以将卡片的当前状态传递给我的程序,这可以决定下一步行动。但是我将如何执行click命令。

更一般地说,我想编写一个可以像用户那样与另一个程序交互的程序。 我有C,C ++,Java,Ruby方面的经验。但我不知道如何开始这个,或者甚至可以做到这一点?

6 个答案:

答案 0 :(得分:7)

我不确定这里的所有其他帖子,但是Java有一个Robot类,它允许你(轻松地)将键盘和鼠标事件发送到底层操作系统(在这种情况下是窗口),这样你就可以完成你在谈论什么这是一个小课程我已经用了很多次来“自动化”Windows上的任务。

(我知道这是一个老话题,但万一其他人在世界各地偶然发现它并且想要做你所概述的事情。)

答案 1 :(得分:2)

如果要自动执行Windows任务,请使用专门编写的语言来执行此操作。想到的那些包括WinBatch,AutoIt和AutoHotkey。

答案 2 :(得分:1)

Java不是这样做的语言。为了促进这样的功能,您需要严重依赖Windows API,尤其是那些允许您注入输入的API。作为一个起点,我建议您熟悉Windows应用程序实际处理输入的方式。 This是一篇关于这个主题的好文章。

答案 3 :(得分:0)

Windows有一个所谓的“UI自动化”API,它非常有助于实现您的要求 - 一些链接包含详细信息/来源/样本:

<强> REMARK:

从Java执行此操作可能有点困难,因为AFAIK需要使用JNI。

答案 4 :(得分:0)

Windows有一个方法SendInput,可用于编程控制鼠标和键盘。如果您知道要控制哪个应用程序,这可能就足够了。但是,您可能还想检查屏幕上的内容。为此,您需要GetPixel

答案 5 :(得分:0)

我个人不太喜欢屏幕抓取技术,因为它们经常受到底层应用程序更改或甚至屏幕分辨率变化的影响。
然而,这似乎是一种你可以采用的方法。
我同意java不是这里的最佳选择 搜索“屏幕刮刀API”,你应该找到一些东西让你开始。

更新

第一个看起来很有希望的是http://community.screen-scraper.com/API 反直觉似乎是基于java的。