java - 从当前 COME 后期绑定(bind)对象获取进程 ID

标签 java com jna

我正在使用 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 Clients and Servers :

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/

相关文章:

Java JNA native 库调用 NoClassDefFoundError

java - JNA回调的使用方法

c# - 在 .NET COM 互操作中传递强类型参数

c# - 为什么这个 C# COM 类可用于 VBScript 而不是 JScript?

java - 如何连接到具有不同 IP 地址的网站?

java - LockManager - 想法和API

c++ - OpenMP "master"编译指示不得包含在 "parallel for"编译指示中

java - 使用 Java 中的 JNA 获取窗口正在访问的文件的文件路径

java - 如何停止定时器线程改变变量值

java - 如何避免使用@SuppressWarnings?