我正在使用 JNA 4.5+
有没有办法获取以以下方式启动的应用程序的 PID:new COMLateBindingObject("X.Application", _boolean_)
?
类似于:
COMLateBindingObject obj = new COMLateBindingObject("myapp.Application", false);
SomeUtil.INSTANCE.getPidFor(obj);
我无法使用 WMIC 或基于窗口句柄的方法,因为我有同一应用程序的多个并发运行实例。
提前致谢。
最佳答案
遗憾的是,直接查找有关 COM 服务器的信息是不可能的。正如汉斯·帕桑特 puts it :
Not exposing these implementation details, and making it impossible to find out, is by design. Like the clipboard.
COM client applications do not need to be aware of how server objects are packaged, whether they are packaged as in-process objects (in DLLs) or as local or remote objects (in EXEs).
COM 的设计很简单,因此您不需要知道这些细节。正如this question的作者评论中所建议的那样,您可以在启动 COM 服务器之前和之后使用 EnumProcesses
之类的方法检索进程列表并检查创建了哪些进程,但即使这样充其量也只是一个不准确的 hack。
我认为您可能遇到了XY problem 。如果我是你,我会退后两步,思考为什么我需要访问 COM 的内部(有关创建的 COM 服务器的进程的信息),并看看我的问题是否实际上解决有不同的解决方案。也许您可以详细说明您实际需要进程 ID 的用途?
关于java - 从当前 COME 后期绑定(bind)对象获取进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956464/