Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是否可以钩住子进程发送到windows控制台的消息?_C++_Windows_Winapi_Console_Hook - Fatal编程技术网

C++ 这是否可以钩住子进程发送到windows控制台的消息?

C++ 这是否可以钩住子进程发送到windows控制台的消息?,c++,windows,winapi,console,hook,C++,Windows,Winapi,Console,Hook,到目前为止,我尝试了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 &l

到目前为止,我尝试了
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);
}
#包括
#定义_WIN32_WINNT 0x501
#包括
使用名称空间std;
HHOOK HHOOK=0;
LRESULT回调(int代码,WPARAM WPARAM,LPARAM LPARAM){

cout尝试输出重定向。创建两个管道对象(一个用于stdout,另一个用于stderr)使用
CreatePipe
API,并在调用
CreateProcess
时将它们传入
hStdOutput
hStdError
STARTUPINFO
成员。子进程输出的任何内容都不会显示,但会通过这些管道;然后您可以根据需要过滤数据并自己输出。

我如何这与不到24小时前发布的帖子有什么不同?我想,如果我提供证据证明我在这个问题上花了一些时间,并证明我在提问之前尝试了一些可能性,我最终会得到一个诚实的答案。(在你之前)对上一个问题的回答是错误的。)-我仍在等待可能知道方法的人,可能存在一些未记录的可能性。然后你应该更新现有问题,并对不正确的答案进行适当的评论。创建新问题只会造成混乱并降低网站的信噪比。那么谁会看到我的问题?编辑问题吗跳转到顶部?不,但如果是这样,人们会看到它。如果他们能回答,他们会看到。如果你想在几天后增加曝光率,你可以创建一个。这个网站不是一个论坛。是的,我知道这种方式,但一些连接到管道的程序表现不同,我需要这样做,因为当有东西试图向它发送utf-8数据时,windows控制台会退出,我想考虑捕获此信息并使用
WriteConsoleW
绕过problem@rsk82你是说,当你重定向管道时,一些假设的程序可能无法正常工作?这是不合理的。你宁愿使用一些非常难看的黑客/未记录的东西来做这件事,以防一个制作糟糕的程序?你说你正在处理输出。似乎您确切地知道它是什么程序。