Получить идентификатор процесса COM-сервера - PullRequest
6 голосов
/ 18 февраля 2011

Я делаю некоторую автоматизацию через комбинацию отправки сообщений Windows напрямую HWND и обращений к COM-серверу, предоставляемому автоматизированным приложением.

Если запущено более одного экземпляра, мне нужно иметь возможность определить идентификатор процесса COM-сервера, чтобы я мог подключиться к тому же экземпляру с помощью вызова COM, что и тот, на который я отправляю сообщения Windows.

Я могу перечислить все работающие COM-серверы с таблицей запущенных объектов и получить обратные имена для всех них, но сами COM-объекты не предоставляют методов, которые я могу использовать для получения дескриптора окна, идентификатора потока, идентификатора процесса или чего-либо еще такого рода.

Есть ли какой-нибудь способ выяснить, на основе моникера или фактического связывающего COM-объекта моникера, что такое идентификатор процесса COM-сервера?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 30 мая 2011

Если вы управляете (пишете код) сервером и клиентом, вы можете добавить в свой интерфейс COM метод, который бы возвращал идентификатор процесса / потока или что-либо подобное (например, имя хоста сервера, если он удаленный) на конец сервера. Я второй @Hans - если у вас нет доступа к реализации сервера, вам может быть не везет.

0 голосов
/ 15 июня 2019

Я считаю, что функция kimgr CoGetServerPID даст вам идентификатор процесса вашего COM-сервера.

...