这是否可以挂接子进程发送到 Windows 控制台的消息
is this possible to hook on messages that child process is sending to windows console?
到目前为止,我尝试了SetWindowsHookEx
,但似乎它无法从控制台窗口捕获消息。
说明这一点的代码:
#include <iostream>
#define _WIN32_WINNT 0x501
#include <windows.h>
using namespace std;
HHOOK hHook = 0;
LRESULT CALLBACK Callback(int code,WPARAM wParam,LPARAM lParam) {
cout << "tick: " << GetTickCount() << ", code: " << code << ", wParam: "
<< wParam << ", lParam: " << lParam << endl;
return CallNextHookEx(hHook,code,wParam,lParam);
}
int main() {
int idHook[14] = { WH_CALLWNDPROC, WH_CALLWNDPROCRET, WH_CBT, WH_DEBUG,
WH_FOREGROUNDIDLE, WH_GETMESSAGE, WH_JOURNALPLAYBACK, WH_JOURNALRECORD,
WH_KEYBOARD, WH_KEYBOARD_LL, WH_MOUSE, WH_MOUSE_LL, WH_SHELL,
WH_SYSMSGFILTER };
for (int i=0 ; i<=14 ; i++) {
hHook = SetWindowsHookEx( idHook[i] , (HOOKPROC)Callback,
NULL, GetCurrentThreadId());
}
system("dir");
//here appeared nothing insead `dir` output, but why ?
system("pause");
MessageBox(NULL, "Now creating window ...", "... and messages appear.", 0);
}
我查看的另一种方式是控制台本身的 api,特别是ReadConsoleInput()
函数。但它不能通过回调工作,因此它只能用于捕获键或鼠标事件。此处的示例代码:http://msdn.microsoft.com/en-us/library/windows/desktop/ms685035%28v=vs.85%29.aspx
但是我需要的是掌握由通过system
或CreateProcess
创建的进程发出的控制台调用。例如,通过调用,我的意思是在子进程到达我的进程拥有的控制台之前捕获子进程发出的每个printf()
。
有可能吗?
尝试输出重定向。使用 API CreatePipe
创建两个管道对象(一个用于标准输出,另一个用于标准输出),并在调用CreateProcess
时将它们传入hStdOutput
和hStdError
STARTUPINFO
的成员。子进程输出的任何内容都不会显示,但会通过这些管道;然后,您可以根据需要筛选数据并自行输出。
相关文章:
- C++程序不会从 Windows 控制台运行
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- Windows7+:如何构建不需要任何额外/外部运行时库的C++ Windows 控制台应用程序?
- Windows 控制台代码页 866
- 何时调用 Windows 控制台应用程序需要 CoInitialize
- 使用具有 UTF8 编码的源文件将 UTF8 符号打印到 Windows 控制台
- 打印到 Windows 控制台度数 (°) 和立方体符号 (³)
- 为什么我的Windows控制台关闭事件处理程序超时
- 子进程 c++ 的 Windows 控制台信号处理
- 处理运行的Windows控制台应用程序中的拖放文件
- Windows 控制台应用 (C++) 具有错误的退出代码
- 如何通过C++Windows控制台修改光标
- 如何将消息从一个 Windows 控制台应用程序发送到另一个应用程序
- 基于Windows控制台的游戏
- 这是否可以挂接子进程发送到 Windows 控制台的消息
- Windows 控制台应用在新控制台而不是同一控制台中打开
- 如何获取Windows控制台高度
- 调整 Windows 控制台和 MFC 静态库的大小
- 如何将国际字符发送到 Windows 控制台
- Qt:无法使用QProcess启动Windows控制台