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