使用C#以编程方式与多个未聚焦的VMWare实例进行通信

时间:2014-12-05 05:35:17

标签: c# vmware communication keystroke

即使我的长标题破坏了我的很多问题,但我会在这里尝试更具体。

我有5个VMWare实例都有自己的任务要做。它们托管在同一台计算机上。但是我需要一个程序(我实际上是在写,呃)来获取信息并发送键盘和鼠标点击等信息。但是到目前为止,我已经很红了,程序之间的通信很难实现,我还没有找到任何方法将键击发送到不专心或简化的VMWare窗口。另外,我需要向我的5个VMWare实例发送不同的特定按键。

我的程序将在每5个窗口中自动启动每5个任务。只要每个实例都有自己的任务列表,顺序就无关紧要了。我需要一种方法来跟踪每个窗口的标识,所以我不发送窗口4的窗口按键。我还需要能够定期检查每个VMWare的实例是否正在执行其工作。另外我的VMWare实例都在win7环境中运行。

既然解释了整个情况,我将总结我目前提交的问题。我的C#程序有没有办法跟踪5个VMWare实例的身份,并发送击键(+鼠标点击)并至少获得每个显示内容的屏幕截图,即使它们被缩小或未聚焦?

非常感谢。

有没有办法获得

2 个答案:

答案 0 :(得分:1)

您对VMWare的工作原理有不正确的理解。 VMWare不是“在窗口中运行”。 VMWare在计算机中的虚拟机中运行的级别非常低。您所看到的“窗口”仅仅是一个“查看器”,它允许您连接到远程计算机(即使它在本地计算机上运行)。此“查看器”是类似于远程桌面客户端或VNC客户端的应用程序。因此,操作系统与主机操作系统和客户机中运行的应用程序之间的交互非常有限。

这意味着您的主机操作系统对客户操作系统内运行的各个应用程序一无所知,您无法看到它的窗口句柄或控制鼠标或键盘事件。事实上,VMWare驱动程序“捕获”硬件并直接从硬件中窃取这些事件,因此您的应用程序无法模拟人与虚拟机窗口进行交互。

你可以做什么,这将是很多工作,是在每个可以访问在其上运行的应用程序的虚拟机上创建“代理”。这些代理可以监听网络上的事件,您可以向他们发送事件以执行您想要的操作。但是,正如我所说......这可能是很多工作。

这一切听起来有些俗气,就像你正在努力做一些事情,但是因为你没有告诉我们你实际上在做什么......我们不能建议任何事情更好的选择。

答案 1 :(得分:0)

快速而肮脏的方法是研究Visual Studio测试控制器和代理。我们的想法是在每台机器上安装代理程序。然后,您可以利用MSTest框架(错误地称为单元测试)来执行每个代理的c#代码。