2016-02-11 2 views
1

Я наткнулся на следующий код недавно:Как настроить таргетинг на процесс без его выполнения?

Process proc1 = Runtime.getRuntime().exec("C:\\Program Files (x86)\\..."); 

Это работает прекрасно. Однако, интересная проблема. Этот код фактически открывает новый экземпляр указанного процесса и сохраняет его в объекте. Он не нацеливается на этот процесс, если он уже запущен и хранит его в объекте. Я предполагаю, что это вызов функции .exec(), который это делает. Как настроить таргетинг на уже активный процесс и сохранить его в моем объекте Process без открытия нового экземпляра?

Примечание: Я пробовал очевидные ответы, Process proc1 = new Process("name"); Eclipse говорит, что процесс не может быть создан. Я просмотрел класс Runtime в javadoc. Насколько я могу судить, нет очевидного метода, который делает то, что я пытаюсь достичь. Похоже на простой вопрос, я уверен, что его спросили раньше, но я не мог найти ответ нигде, поэтому я спрашиваю здесь. Возможно, я использую неправильную терминологию.

EDIT: Я на Windows 10

Моя цель состоит в том, чтобы attatch процесс игры Minecraft для Process объекта. Затем, я хочу переместить мой персонаж вперед, используя robot.keyPress(KeyEvent.VK_W);. Я не могу просто открыть процесс minecraft, потому что все, что можно было бы сделать, это открыть программу minecraft.exe, и тогда я буду на «приветственном» экране.

+0

Вы можете подключить только к процессам, которые вы создали. Этот процесс должен быть ребенком текущего процесса. Вы можете получить доступ к процессу в Linux с помощью '/ proc', но это зависит от платформы. –

+0

Что вы пытаетесь сделать с процессом? – nlloyd

+0

@PeterLawrey Я нахожусь в MS Windows. Извините, забыл упомянуть об этом, я добавил, что в вопрос орган. Как я могу создать его в окнах? –

ответ

1

Как вы можете догадаться из Process docs,, объект процесса создается при создании дочернего процесса из вашего кода. Вы можете управлять процессом с помощью этого объекта, но другие процессы, выполняемые там, предназначены для управления вашей ОС (или процессов, с которыми они имеют отношение). Вам придется взаимодействовать с ОС, чтобы что-то с ними делать.

Пример для поиска и убить процесс в Windows, можно найти в this answer.

+0

Я слышал о чем-то под названием JNI, который, вероятно, предназначен для работы с ОС и т. Д. Может ли быть какая-то функция или класс, который позволил бы мне это сделать? –

+0

JNI предназначен для взаимодействия с нативным (думаю, C/C++) кодом. OS не будет предлагать этот уровень доступа, но обычно предлагает утилит, которые можно вызывать из командной строки, используя «Runtime».exec() '- следуйте по ссылке в моем ответе, чтобы увидеть пример – nlloyd

+0

О, хорошо, я не знал, что я просто догадывался. Хотя, если он способен вызывать C#, C# может иметь лучшую функциональность процесса Windows. –

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