今のところ試してみ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()
呼び出しとは、たとえば、プロセスが所有するコンソールに到達する前に、子プロセスによって発行されたすべてをキャッチすることを意味します。
可能性はありますか?