Get Process ID of COM Server

拈花ヽ惹草 提交于 2019-11-26 23:23:02

问题


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!


回答1:


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.




回答2:


I believe the kimgr CoGetServerPID function will give you the process-id of your COM server. It works well as long as the process-id is <65k.



来源:https://stackoverflow.com/questions/5046433/get-process-id-of-com-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!