所以我启动一个普通的控制台程序,然后在其中创建另一个进程。接下来,子进程尝试将某些内容写入父进程拥有的控制台。
是否可以在此控制台上放置一个挂钩,以便当子进程尝试编写一些文本时,我可以在此文本上进行搜索和替换并将其更改为控制台。
(我知道管道是可能的,但在这里我特别要求在控制台级别执行此操作,因为如果某些程序看到它们连接到管道而不是控制台,它们的行为会有所不同。)
跟我的问题有SetWindowsHookEx
关系吗?
只是为了避免混淆,Windows 消息不涉及此,因此挂钩是完全错误的概念。
如果要更改写入 STDOUT 的子进程数据,则需要创建自己的管道,在创建进程时将其传递给进程。这使您可以从中读取数据,根据需要进行更改,然后自己打印到 STDOUT。无法拦截直接写入控制台的数据。
所以你想在控制台上安装一个winproc钩子吗?当然,您可以做到,首先您必须获取控制台窗口的 HWND(请阅读此处),然后您可以调用您的 SetWindowsHookEx() 并挂钩它。请注意,在您的钩子过程中,调用 defwinproc 将调用控制台的原始 winproc,因此,如果您不想修改控制台的整个行为,那么您应该清楚。