如何向正在运行的Java程序发送命令?

Dan*_*ski 3 java winapi ipc

我有一个Java程序,我想从我的Win32应用程序发送命令.通常我会使用WM_COPYDATA但我有什么选择与Java?

nd.*_*nd. 10

有一些方法可以在Java和Windows之间进行互操作.命令权力和困难:

  • 对于处理窗口消息,您可以使用Jawin - 它甚至包含如何处理窗口消息演示 - 或类似的东西.当然,如果将Java程序绑定到像Jawin这样的库,它将永远不会在非Windows机器上运行
  • 对于Win32和Java之间的简单交互,限制在localhost上侦听的套接字将是我最喜欢的选择.协议可能很简单,但我更喜欢纯文本协议以便于调试.请注意,如果用户终止程序,套接字连接可能会中断.
  • 您可以使用(本地)Web服务,如此处其他帖子中所建议的那样.双方都要确保使用Webservice/XML库来构造和解析消息,如果你进行字符串连接,那么构造格式错误的XML就太容易了.
  • 您可以将Windows程序的功能放入COM组件并使用Java-to-COM桥接器:Jacob或j-Interop是流行的免费库,j-Integra似乎是具有遗留系统的企业的流行选择.
  • 您可以将Java程序的功能放入COM组件中,并使用Sun的Java-ActiveX桥.根据我的个人经验,这是一个相当尴尬的选择:Java-ActiveX桥的开发自1.4开始就停滞不前,ActiveX的安装导致您的Java组件安装在JRE目录中的某个位置并调试ActiveX容器内的Java组件相当麻烦.

旁注:如果您要处理双方的字符串,请始终考虑Java将字符串处理为与字节数组完全不同的字符串.特别是如果您使用的是Windows ANSI字符串,请注意在Windows-1252代码页中将字符81,8D,8F,90和9D指定为未定义,因此如果Windows字符串包含这些元素,Java将产生问号或异常.因此,如果可能的话,在Windows端使用WChar字符串或限制自己使用安全字符.