8

我正在通过将 Windows 消息直接发送到 HWND 和调用自动化应用程序公开的 COM 服务器相结合来进行一些自动化。

如果有多个实例在运行,我需要能够确定 COM 服务器的进程 ID,以便我可以通过 COM 调用访问同一个实例,作为我向其发送 Windows 消息的实例。

我可以用正在运行的对象表枚举所有正在运行的 COM 服务器并取回它们的名字,但是 COM 对象本身没有公开任何方法,我可以使用它来获取窗口句柄、线程 ID、进程 ID 或任何类似的东西.

有没有办法根据名字对象或名字对象的实际绑定 COM 对象来确定 COM 服务器的进程 ID 是什么?

谢谢!

4

2 回答 2

6

如果您同时控制服务器和客户端(为其编写代码),您可以向您的 COM 接口添加一个方法,该方法将在服务器端返回进程/线程 ID 或任何此类性质的内容(例如,如果它是远程的,则服务器主机名)。我第二个@Hans - 除非您可以访问服务器实现,否则您可能会在设计上不走运。

于 2011-05-29T23:25:27.220 回答
1

我相信 kimgr CoGetServerPID函数将为您提供 COM 服务器的进程 ID。但是,它仅在进程 ID <65k 时才有效。

还有一篇3 Ways to Get a COM Server Process ID blog post可能值得一看。不过自己没试过。

于 2019-06-15T20:41:00.957 回答