Получить ProcessID из текущего COMLateBindingObject - PullRequest
0 голосов
/ 23 октября 2018

Я использую JNA 4.5 +

Есть ли способ получить PID для приложения, запущенного с: new COMLateBindingObject("X.Application", _boolean_)?

Что-то вроде:

COMLateBindingObject obj = new COMLateBindingObject("myapp.Application", false);
SomeUtil.INSTANCE.getPidFor(obj);

Я не могу использовать WMIC или метод, основанный на дескрипторе окна, потому что у меня есть несколько одновременно работающих экземпляров одного и того же приложения.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Если целевое приложение (X.Application или myapp.Application) создано вами или что вы можете изменить, как насчет добавления интерфейса для получения идентификатора процесса?

В интерфейсе управления IO розничного бизнесаназываемый OPOS, два уровня COM (ControlObject / ServiceObject) определены, и ServiceObject может получить идентификатор процесса, которому принадлежит ControlObject.

Как показано ниже:

COMLateBindingObject obj = new COMLateBindingObject("myapp.Application", false);
int createdPID = obj.getProcessID();
0 голосов
/ 24 октября 2018

Поиск этой информации о COM-сервере напрямую, к сожалению, невозможен.Как выразился Ханс Пассант :

Невозможность разоблачить эти детали реализации и сделать невозможным ее выяснение - это дизайн.Как и буфер обмена.

От COM-клиенты и серверы :

Клиентские приложения COM не должны знать, как упаковываются объекты сервера,упакованы ли они как внутрипроцессные объекты (в DLL-файлах) или как локальные или удаленные объекты (в EXE-файлах).

COM был спроектирован просто так, что вам не нужно знать 1018* эти детали.Как предложено в комментариях автора к этому вопросу , вы можете прибегнуть к извлечению списка процессов с чем-то вроде EnumProcesses до и после запуска COM-сервера и проверки, какие процессы были созданы, но даже это будетбыть в лучшем случае неточным взломом.

Я думаю, что вы, возможно, столкнулись с проблемой XY .На вашем месте я бы сделал два шага назад и подумал, зачем мне нужен доступ к внутренним компонентам COM (информация о процессе созданного COM-сервера), и выяснил, действительно ли я решаю проблему имеет другое решение.Возможно, вы могли бы уточнить, для чего на самом деле нужен идентификатор процесса?

...