2014-12-05 3 views
0

Несмотря на то, что мое длинное название портит довольно много моего вопроса, я постараюсь быть более конкретным здесь.Программная связь с несколькими несфокусированными экземплярами VMWare с C#

У меня есть 5 экземпляров VMWare, которые все имеют свои собственные задачи. Они размещаются на одном компьютере. Но мне нужна одна программа (которую я на самом деле пишу, duh), чтобы получать информацию и отправлять информацию, такую ​​как нажатия клавиш и щелчки мышью. Но из того, что я до сих пор краснел, связь между программами довольно трудно достичь, и я не нашел способа отправить нажатия клавиш в несфокусированные или уменьшенные окна VMWare. Кроме того, мне нужно будет отправлять разные и конкретные нажатия клавиш для каждого из 5 экземпляров VMWare.

Моя программа начнет каждые 5 заданий в каждом из 5 окон. Заказ не имеет значения, если каждый экземпляр имеет свой собственный список задач. Мне нужен способ отслеживать индивидуальность каждого окна, поэтому я не посылаю, скажем, нажатия клавиш окна 4 в окно 5. Мне также нужно будет периодически проверять, будут ли выполняться все экземпляры VMWare. В дополнение к моим экземплярам VMWare все работает в среде win7.

Теперь, когда объясняется вся ситуация, я подведу итог вопросу, который я сейчас представляю. Есть ли способ, которым моя программа на C# отслеживает идентификаторы экземпляров VMWare и посылает нажатия клавиш (+ mouseclicks) и получает по крайней мере скриншоты того, что отображается на каждом из них, даже если они уменьшены или не сфокусированы?

Большое спасибо.

Есть ли способ, чтобы получить

ответ

1

У вас неправильное понимание работы VMWare. VMWare не работает в окне. VMWare работает на виртуальной машине на очень низком уровне на вашем компьютере. То, что вы видите как «окно», - это просто «зритель», который позволяет вам подключаться к удаленному компьютеру (хотя он работает на локальном компьютере). Этот «просмотрщик» представляет собой приложение, подобное клиенту удаленного рабочего стола или клиенту VNC. Таким образом, существует очень ограниченное взаимодействие между ОС и ОС хоста и приложениями, запущенными в гостях.

Это означает, что ваш хост OS ничего не знает о отдельных приложений, работающих внутри гостевой ОС не знаете, и вы не можете видеть это окно ручки, или управление события мыши или клавиатуры. На самом деле, драйверы VMWare «захватывают» оборудование и крадут эти события непосредственно с аппаратного обеспечения, поэтому нет реального способа для вашего приложения имитировать человека, взаимодействующего с окном виртуальной машины.

Что вы можете сделать, и это было бы очень много работы, является создание «агентов» на каждом из виртуальных машин, которые будут иметь доступ к приложениям, работающим на них. Эти агенты могли прослушивать события в сети, и вы могли отправлять им события, чтобы делать то, что вы хотите. Однако, как я уже сказал, это, скорее всего, большая работа.

Все это кажется чем-то вроде дрянного, как будто вы пытаетесь сделать что-то трудное, но так как вы не сказали нам, что вы НАСТОЯТЕЛЬНО пытаетесь сделать .. мы не можем предложить любые лучшие альтернативы.

+0

«На самом деле, водители VMWare„захват“аппаратные и украсть эти события непосредственно из аппаратных средств, так что нет никакого реального способа для вашего приложения, чтобы имитировать человек, взаимодействующий с окном виртуальной машины.» Я понимаю. Ваше сообщение было действительно поучительным.Поэтому каждый экземпляр VMWare (который я не должен вызывать), по-моему, должен по крайней мере обмениваться одной и той же сетью и иметь возможность общаться друг с другом через эту сеть, не так ли? Таким образом, одним из способов достижения моей цели было бы иметь мое основное приложение для отправки информации через сеть. Или я не понимаю? –

+0

(извините за двойную почту) Я понимаю, насколько сложно расстраивать ответы на тех, кто не дает достаточно информации. Помимо моих трудностей выразить себя и объяснить ситуацию (которая является основной причиной моей неспецифичности), я хотел получить довольно общий ответ, потому что знаю, что мне, возможно, придется снова справиться с той же проблемой в другой ситуации. Большое спасибо, действительно, за ваш ответ. И тот, который ниже тебя тоже, и я тоже загляну. По крайней мере, для обучения! –

+0

@RobertArctor - Нет, это нормально назвать их экземплярами, но это экземпляры виртуальных машин, работающих на низком уровне аппаратного обеспечения. Да, в зависимости от того, как вы настроили виртуальные сетевые коммутаторы, все они могут совместно использовать общую сеть (включая совместное использование ее с хостом или даже с Интернетом). Да, вы отправляете и получаете информацию через сеть для отдельных «агентов», которые вы запускаете в каждом экземпляре виртуальной машины, эти «агенты» имеют полный доступ к гостевой ОС и приложениям (в зависимости от разрешений, которыми вы их управляете), чтобы делать то, что вы необходимость. –

0

А быстрый и грязный подход, чтобы смотреть в контроллер и агентов Visual Studio Test. Идея состоит в том, чтобы установить агент на каждую из машин. Затем вы можете использовать фреймворк MSTest (ошибочно называемый модульными тестами), чтобы выполнить код C# для каждого агента.

 Смежные вопросы

  • Нет связанных вопросов^_^