Question

I'm doing some automation via a combination of windows message sending directly to HWNDs and calls to a COM server exposed by the automated application.

If there is more than one instance running, I need to be able to determine the process ID of the COM server so I can hit the same instance with the COM call as the one I'm sending windows messages to.

I can enumerate all the running COM servers with the running object table and get back monikers for all of them, but the COM objects themselves expose no methods I can use to get a window handle, thread ID, process ID, or anything of that sort.

Is there any way to figure out, based on a moniker or the actual binding COM object of the moniker, what the process ID of the COM server is?

Thanks!

Was it helpful?

Solution

If you control (write code for) both the server and the client you can add a method to your COM interface that would return the process / thread ID or anything of this nature (e.g. server hostname if it is remote) on the server end. I second @Hans - unless you have access to the server implementation you may be out of luck by design.

OTHER TIPS

I believe the kimgr CoGetServerPID function will give you the process-id of your COM server.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top