Получить идентификатор процесса COM-сервера
Я делаю некоторую автоматизацию через комбинацию отправки сообщений Windows непосредственно в HWND и вызовов на COM-сервер, предоставляемый автоматизированным приложением.
Если запущено более одного экземпляра, мне нужно иметь возможность определить идентификатор процесса COM-сервера, чтобы я мог выполнить тот же экземпляр с помощью вызова COM, что и тот, на который я отправляю сообщения Windows.
Я могу перечислить все работающие COM-серверы с таблицей запущенных объектов и получить для всех из них моникеры, но сами COM-объекты не предоставляют методов, которые я могу использовать, чтобы получить дескриптор окна, идентификатор потока, идентификатор процесса или что-либо подобное.,
Есть ли какой-нибудь способ выяснить, на основе моникера или фактического связывающего COM-объекта моникера, что такое идентификатор процесса COM-сервера?
Спасибо!
1 ответ
Если вы управляете (пишете код) сервером и клиентом, вы можете добавить в свой интерфейс COM метод, который возвращал бы идентификатор процесса / потока или что-либо подобное (например, имя хоста сервера, если оно удаленное) на стороне сервера. Я второй @Hans - если у вас нет доступа к реализации сервера, вам может не повезти в дизайне.
Я считаю, что функция kimgr CoGetServerPID предоставит вам идентификатор процесса вашего COM-сервера. Однако это работает, только если идентификатор процесса <65k.