【问题标题】:It is possible to put a hook catching messages that are send to console by child process?可以设置一个钩子来捕获子进程发送到控制台的消息吗?
【发布时间】:2012-06-23 18:05:55
【问题描述】:

所以我启动了一个普通的控制台程序,然后在其中创建了另一个进程。接下来,子进程尝试将某些内容写入父进程拥有的控制台。

是否可以在此控制台上放置一个钩子,以便当子进程尝试编写一些文本时,我可以在此文本上进行搜索和替换并将其更改到控制台上。

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

SetWindowsHookEx 与我的问题有关吗?

【问题讨论】:

    标签: c++ windows winapi console hook


    【解决方案1】:

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

    如果要更改写入 STDOUT 的子进程数据,则需要创建自己的管道,在创建进程时将其传递给进程。这使您可以从中读取数据,根据需要进行更改,然后自己打印到 STDOUT。无法拦截直接写入控制台的数据。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-06
        • 2011-10-17
        • 2021-09-05
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        相关资源
        最近更新 更多