就像Visual Studio Code的集成控制台一样,我想知道它是如何实现的。
我试图阅读VSCode的源代码,发现它正在使用xterm.js提供终端。然后,我尝试阅读xterm.js的源代码,但没有找到任何有关创建或集成终端的本机(?)代码。
也许我错过了一些东西,请给我一些建议。
它的窗口SetParent
与其父窗口是一个子进程吗?
编辑:
我的目标是在应用程序中嵌入一个控制台窗口,以便在使用它时可以快速运行一些脚本,就像VS Code中的经验一样。
很抱歉,原始问题不明确。
答案 0 :(得分:1)
VS Code为控制台输入/输出创建命名管道,然后生成进程winpty-agent.exe和powershell.exe。 winpty-agent.exe打开CONIN $和CONOUT $的命名管道,并且绑定到VSCode的终端窗口中的所有输入都使用Read / WriteFile与管道传递信息,然后将信息传递给由其产生的隐藏终端窗口powershell.exe。每次输入字符时,管道就被写入和读取。
winpty-agent.exe也使从powershell.exe生成的PowerShell窗口成为子窗口,并用标志SW_HIDE隐藏它。当窗口可见性状态的标志设置为SW_SHOW时,可以看出,每次在绑定到VSCode的终端中输入某些内容时,都会同时在隐藏的PowerShell终端窗口中同时输入某些内容。
此article演示了如何通过管道的使用在父子进程之间重定向控制台输入/输出。