如何以编程方式与应用程序交互

时间:2009-01-05 08:53:52

标签: winforms

我很可能很快就会开展一些项目,我需要从文件中获取数据并以编程方式将数据输入另一个第三方(不是我自己的)应用程序。一个问题:我不知道该怎么做。我需要输入数据(比如时间表上的时间,例子)有人能引导我朝正确的方向获得这项技能吗?

附加规格:我在深夜写了原帖,所以可能没有我应该的那么详细。这是一个例子:我的客户有一个ERP应用程序,他们用来收集工作人员执行工作时的时间戳,并在一天之内将项目推出门外。这个应用程序没有我可以用来提供数据的API。我听说有一个人能够以编程方式将数据实际推送到此应用程序的窗口和控件的屏幕上,这样数据就可以收集到Excel工作表中,然后有效地上传到这个应用程序中。一种反向屏幕刮擦。它不像API那样,但它有效。

我已经看到app以类似的方式与其他应用互动。我能想到的一个很好的例子是截图实用程序SnagIt。您可以命令它在特定应用程序中屏幕捕获窗口,当您在该窗口周围移动鼠标时,指针下的控件将以红色轮廓显示它将为您捕获的控件。我觉得这很有意思,可能距离实际输入这样的控件只有一步之遥。

感谢您的评论和答案到目前为止,我正在全力以赴。

7 个答案:

答案 0 :(得分:10)

您可以使用AutoIt脚本自动执行此操作。这是一种简单的脚本语言,它隐藏了向窗口和控件发送消息的一些复杂性。

答案 1 :(得分:6)

不同的应用程序允许您以不同的方式以编程方式控制它们。最常用的两种方法是:

1)一些应用程序公开命令行参数。例如:

c:\> someapp.exe arg1 arg2

您可以通过以下调用从C ++程序调用此类应用程序:

System("C:\\>someapp.exe arg1 arg2");

2)其他应用程序可能会暴露更强大的面向对象的API。例如,Microsoft Excel允许您使用App本身作为C#程序中的对象对其进行编程:

Excel.Application excelApp = new Excel.App()

获得app对象后,可以调用其上的方法来控制其行为。例如,您可以使用以下调用打开一个新的Excel文件:

excelApp.Workbooks.Open("\\Somefile.xls", ...);

对于您尝试控制的任何第三方应用,您将不得不阅读其文档,了解它如何让您这样做。例如,可以找到有关如何编程Excel的信息here

答案 2 :(得分:3)

如果应用程序不是为与之交互而设计的,则可能非常困难。您将需要发送模拟事件(例如假装鼠标正在执行某些操作)。一种方法是编写一个不连接真实鼠标的鼠标驱动程序。但是,正如我所说,这取决于应用程序。具有更大用户群的应用程序通常具有允许编程交互的API,或具有内置脚本功能(因此您可以使应用程序使用您的代码)。

答案 3 :(得分:3)

我认为FindWindowSendMessage是您想要使用的功能。

答案 4 :(得分:0)

我曾经做过类似的事情,其中​​一个Windows应用程序由Web应用程序控制。我为此使用了很多Win32 API。如果你的应用程序是类似的,那么为初学者寻找开源Winamp遥控器。

答案 5 :(得分:0)

或者如果你想要更“hacky”,开始阅读程序存储器并直接注入数据。 :P

但这可能非常复杂,并且由于程序如何使用内存而常常无法正常工作。

答案 6 :(得分:0)

这不是最漂亮的方式,但我看到一些应用程序使用剪贴板来做这样的事情。不幸的是,这可能还需要手动干预,因为您可能无法以编程方式将应用程序从/推送到剪贴板。