可以放置一个钩子来捕获由子进程发送到控制台的消息
It is possible to put a hook catching messages that are send to console by child process?
所以我启动了一个普通的控制台程序,然后在其中创建另一个进程。接下来,子进程尝试将某些内容写入父进程拥有的控制台。
是否可以在此控制台上放置一个钩子,以便当子进程尝试编写一些文本时,我可以搜索并替换此文本并将其更改为控制台。
(我知道管道是可能的,但在这里我特别要求在控制台级别执行此操作,因为如果某些程序看到它们连接到管道而不是控制台,它们的行为会有所不同。
SetWindowsHookEx
与我的问题有关吗?
为了避免混淆,Windows 消息不涉及此,因此挂钩是完全错误的概念。
如果要更改写入 STDOUT 的子进程数据,则需要创建自己的管道,以便在创建进程时传递给进程。这使您可以从中读取数据,根据需要进行更改,然后自己打印到STDOUT。无法拦截直接写入控制台的数据。
所以你想在控制台上安装一个winproc钩子?当然,你可以这样做,首先你必须获得控制台窗口的HWND(阅读这里),然后你可以调用你的SetWindowsHookEx()并钩住它。请注意,在您的钩子过程中,调用 defwinproc 将调用控制台的原始 winproc,因此,如果您不想修改控制台的整个行为,请以明文形式进行。
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- C++ 窗口本地系统模拟在子进程中失败
- 将类型化数组写入子进程 stdin 无法正常工作
- 将 nodejs 脚本作为子进程执行(而不是从其他脚本执行)
- 连接到子进程stdout的管道中的消息不完整
- 这是否可以挂接子进程发送到 Windows 控制台的消息
- 可以放置一个钩子来捕获由子进程发送到控制台的消息