Java 从当前COMLateBindingObject获取ProcessID

Java 从当前COMLateBindingObject获取ProcessID,java,com,jna,Java,Com,Jna,我正在使用JNA 4.5+ 是否有一种方法可以获取以以下内容启动的应用程序的PID:new-COMLateBindingObject(“X.application”,布尔值) 比如: COMLateBindingObject obj = new COMLateBindingObject("myapp.Application", false); SomeUtil.INSTANCE.getPidFor(obj); 我不能使用WMIC或基于窗口句柄的方法,因为我有多个同一应用程序的并发运行实例 提前

我正在使用JNA 4.5+

是否有一种方法可以获取以以下内容启动的应用程序的PID:
new-COMLateBindingObject(“X.application”,布尔值)

比如:

COMLateBindingObject obj = new COMLateBindingObject("myapp.Application", false);
SomeUtil.INSTANCE.getPidFor(obj);
我不能使用WMIC或基于窗口句柄的方法,因为我有多个同一应用程序的并发运行实例


提前感谢。

很遗憾,无法直接找到有关COM服务器的信息。作为汉斯·帕桑:

不公开这些实现细节并使其不可能被发现是出于设计。就像剪贴板一样

发件人:

COM客户端应用程序不需要知道服务器对象是如何打包的,不管它们是打包为进程内对象(在DLL中)还是本地或远程对象(在EXE中)

COM的设计很简单,您不需要了解这些细节。正如作者在评论中所建议的,您可以在启动COM服务器之前和之后使用类似于
enumprocess
的方法来检索进程列表,并检查创建了哪些进程,但即使这样做,充其量也不准确

我想你可能遇到了麻烦。如果我是你,我会后退两步,思考为什么我需要访问COM的内部(关于创建COM服务器的过程的信息),看看我实际解决的问题是否有不同的解决方案。也许您可以详细说明您实际需要的流程ID是什么?

如果目标应用程序(X.application或myapp.application)是由您创建的,或者您可以修改什么,那么添加一个接口来获取流程ID如何

在名为OPOS的零售业务IO控制接口中,定义了两个级别的COM(ControlObject/ServiceObject),ServiceObject可以获取ControlObject所属的进程ID

详情如下:

COMLateBindingObject obj = new COMLateBindingObject("myapp.Application", false);
int createdPID = obj.getProcessID();

我明白,所以我决定采取另一种方法:在打开文档后使用窗口句柄获取PID,而不是在打开之前尝试获取,以防出现问题。拥有而不需要比需要而不拥有要好。