通过subprocess发送一个钩子捕获消息到控制台是可能的吗?

所以我开始一个普通的控制台程序,然后在其中创build另一个进程。 接下来,subprocess尝试在父进程拥有的控制台上写入内容。

是否有可能在这个控制台上挂钩,所以当subprocess试图写一些文本我可以做这个文本search和replace,并把它改变到控制台。

(我知道使用pipe道是可能的,但是在这里我特别要求在控制台级别执行此操作,因为如果某些程序看到它们连接到pipe道而不是控制台,则其行为会有所不同。)

SetWindowsHookEx与我的问题有关吗?

只是为了避免混淆,windows消息不涉及这个挂钩是完全错误的概念。

如果要更改写入STDOUT的子进程数据,则需要创建自己的管道,并在创建时将其传递给进程。 这允许您从中读取数据,根据需要进行更改,然后自行打印到标准输出。 截取直接写入控制台的数据是没有办法的。

所以你想在控制台上安装一个winproc钩子? 当然,你可以这样做,首先你必须得到控制台窗口的HWND( 在这里阅读),然后你可以调用你的SetWindowsHookEx()并挂钩它。 请注意,在你的钩子程序中,调用defwinproc将调用控制台的原始winproc,所以如果你不想修改控制台的整个行为,你清楚。