2016-02-26 64 views
0

我有一个进程使用Java启动了一个(非Java)CLI进程,并且我想以编程方式向其发送Ctrl + I组合键。如何模仿在终端进程中按下的Ctrl + I

可能吗?

+0

是的。有可能的。 java键绑定应该做的伎俩。 – andrewdleach

+0

@andrewdleach也许我错过了一些东西,但我不明白这将如何帮助我编程发送Ctrl + I到远程CLI进程。 –

+0

对不起,我在控制台上做了些什么?它是否映射到中断? – ChiefTwoPencils

回答

2

如果外部进程在其标准输入中寻找Ctrl-I字符(顺便说一句,与Tab相同),GreenGiant的解决方案将起作用。既然这样做不起作用,那么这个过程显然是寻找其控制台上的按键(tty),这是其他程序根本无法访问的。你需要编写本地代码来创建一个虚拟的tty并让这个过程使用它。 JNI是你如何让Java调用本地代码作为Java程序的一部分。

0

如果您使用ProcessBuilder启动其他程序,那么您可能能够通过发送控制序列将适当的字节写入进程的输入流。

我不知道实际的字节序列是什么,你需要发送,但based on what I'm finding,好像按Ctrl + A为1,按Ctrl + B为2,等等

ProcessBuilder pb = new ProcessBuilder("..."); 
Process process = pb.start(); 
OutputStream stream = process.getOutputStream(); 
stream.write('I' - 'A' + 1); // send Ctrl+I 
stream.flush(); 
+0

这看起来很合理,但没有奏效。 –