2012-06-25 36 views
1

截至目前我试过SetWindowsHookEx,但它似乎是无法从控制台窗口赶上消息。说明这个是否可以挂钩子进程发送给Windows控制台的消息?

代码:

#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); 
} 

的另一种方式,我看了一下是控制台本身,特别是ReadConsoleInput()功能的API。但它不通过回调工作,所以它只能用于捕获键或鼠标事件。示例代码在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms685035%28v=vs.85%29.aspx

但我需要的是采取由这是通过systemCreateProcess创建过程中发出的控制台呼叫保持。通过调用,我的意思是例如在子进程发出的每个printf()到达我的进程拥有的控制台之前。

任何机会,这可能吗?

+0

这是如何不同,以[您刚才的问题(http://stackoverflow.com/questions/11171785/it-is-possible-to-put-a-hook-catching-messages-that-are-send-不到24小时前发布? – Deanna

+0

我认为,如果我提供的证据表明我在问题上花了一些时间,并表明我在询问之前尝试了一些可能性,我终于得到了一个诚实的答案。 (回答(在你之前)以前的问题是错误的。) - 我仍然在等待某个可能知道方法的人,也许有一些没有证据的可能性。 – rsk82

+0

然后,您应该更新现有问题并根据情况评论不正确的答案。创建新问题只会造成混乱,并降低网站的信噪比。 – Deanna

回答

0

尝试输出重定向。创建使用CreatePipe API两个管的对象(一个用于标准输出,另一个用于标准错误),并调用CreateProcess时通过他们在STARTUPINFOhStdOutputhStdError成员。子进程输出的任何内容都不会显示,但会通过这些管道;您可以根据需要过滤数据并自行输出。

+0

是的,我知道这样,但连接到管道某些程序的行为不同,我需要因为Windows控制台将退出时尝试的东西发送给它的UTF-8的数据做了,我想捕获此并使用'WriteConsoleW'绕过的问题 – rsk82

+0

@ rsk82您是否说在重定向管道时某些假设程序可能无法正常工作?这是不合理的。你宁愿使用一些非常丑陋的黑客/无证的东西来做这件事,只是为了制作一个糟糕的程序?你说你正在处理输出。似乎你确切地知道它是什么节目。 – doug65536

相关问题