2014-04-08 54 views
0

让我们假设我已创建并向Windows资源管理器右键单击菜单(上下文菜单)中添加了一个新条目,方法是添加一个指向用C++编写的.exe文件只读取并返回被点击文件的文件名。获取Windows资源管理器上下文菜单(右键单击菜单)的FilePath到Java

是否有可能将此文件名转换为已运行的Java应用程序?

我想过使用JNI,但可以从本机C++程序中调用已运行的Java应用程序的方法吗?

有没有人有另一个想法如何解决这个问题?是否有可能拥有纯粹的Java解决方案?

非常感谢。

编辑:是否可以调用已经运行的JVM的现有方法?然后,我可以创建一个C++程序来侦听右键单击并使用注册表项为contextmenu注册.exe。在C++程序中,我可以调用一个注入已经运行的JVM的dll。该DLL可以调用Java方法并将点击的文件路径提交给Java。这可能吗?

+0

好的,我已经实现了以下功能:我创建了一个与regsit条目(contextmenu /右键单击菜单)链接的C++程序。如果用户单击某个文件,文件路径将被传输(命令行参数)到该程序。在程序内部,一个dll被加载,并且文件路径被转移到只打印文件路径的dll中的一个定义的方法。我现在想实现的是调用一个已经运行的Java程序(在dll中)的方法,并将文件路径传递给Java方法,而不是打印它。你有什么建议吗?谢谢。 – user3422749

回答

0

您可以通过套接字连接连接到已经运行的Java程序,或将值存储到C++应用程序和Java应用程序可以访问的某种数据库中。

除了我的建议,here's a stackoverflow post that talks about communicating to a Java program already running without the Java program making the initial communication

+0

嗨,谢谢你的回应。这是一个本地Java程序,因此我认为套接字连接并不是解决这个问题的最佳方法。是否有另一种方法来检测右键单击文件并获取点击文件名到Java(Windows 7 64位)?注射法是唯一的可能性吗? – user3422749

+0

对不起,我不知道。我不知道API的微软可用于Windows资源管理器,但我想像任何解决方案都必须以本地代码开始,即使是Java解决方案在技术上也会使部分解决方案仍然使用JNI或其他本地代码意味着我会认为。 – NESPowerGlove

相关问题