如何在诸如VSCode的应用程序中集成控制台窗口?

时间:2018-07-08 07:16:25

标签: c++ windows winapi visual-studio-code

就像Visual Studio Code的集成控制台一样,我想知道它是如何实现的。

我试图阅读VSCode的源代码,发现它正在使用xterm.js提供终端。然后,我尝试阅读xterm.js的源代码,但没有找到任何有关创建或集成终端的本机(?)代码。

也许我错过了一些东西,请给我一些建议。

它的窗口SetParent与其父窗口是一个子进程吗?

  

编辑:

我的目标是在应用程序中嵌入一个控制台窗口,以便在使用它时可以快速运行一些脚本,就像VS Code中的经验一样。

很抱歉,原始问题不明确。

1 个答案:

答案 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演示了如何通过管道的使用在父子进程之间重定向控制台输入/输出。