在已知一个控制台运行程序的进程PID的情况下。
我希望能向这个进程发送按键消息以及获取其在控制台的输出。
出于对原有控制台输出缓存大小的考虑,还要预先把缓冲设置大一点,以免冲掉部分内容。
(重点在于获取控制台输出,按键一般还是好办的。)实际在xp下,我已经利用Freeconsole和attachconsole实现了以上的要求。
但Attachconsole这个函数在win2000下没有。我知道用EnumWindows可以获得窗口句柄,再就不知道怎么搞了。
好像获得标准输出流的时候,都是针对程序自己的控制台来的。希望哪位兄弟能给出完整方案。

解决方案 »

  1.   

    win2000下只能自己实现attachconsole功能了
      

  2.   

    也许对你有帮助
    http://blog.csdn.net/yangjiudan/archive/2006/04/29/697517.aspx
      

  3.   

    2000 如果是sp4也可以    HMODULE hKernel32 = LoadLibrary( "kernel32.dll" );
        if( !hKernel32 )
        {
            return false;
        }
        typedef  BOOL ( WINAPI *PATTACHCONSOLE)(DWORD);
        PATTACHCONSOLE pAttachConsole = (PATTACHCONSOLE) GetProcAddress( hKernel32,"AttachConsole" );
        if( !pAttachConsole )
        {
            return false;
        }
        BOOL bRet = pAttachConsole( dwProcessId );
      

  4.   

    那怎么自己实现 AttachConsole
    怎么调用 AttachConsole我知道。
    2000环境我没法自己控制是不是SP4的。
      

  5.   

    重定向输出流的话,需要处理所有的输出。而且处理的性能还影响原有程序的性能。实际上,我只需要在特定的时刻获取指定按键后的输出就可以了。比如原有程序是java程序,在失去响应时,
    Ctrl+Break可以打印所有线程信息。