I need to get (or pipe) the output from a process that is already running, using the windows api.
Basically my application should allow the user to select a window to pipe the input from, and all input will be displayed in a console. I would also be looking on how to get a pipe on stderr later on.
Important: I did not start the process using CreateProcess() or otherwise. The process is already running, and all I have is the handle to the process (returned from GetWindowThreadProcessId()).
Whatever you’re trying to do, you’re doing it wrong. If you’re interacting with a program for which you have the source code, create a defined interface for your IPC: create a socket, a named pipe, windows messaging, shared memory segment, COM server, or whatever your preferred IPC mechanism is. Do not try to graft IPC onto a program that wasn’t intending to do IPC.
You have no control over how that process’s stdout was set up, and it is not yours to mess with. It was created by its parent process and handed off to the child, and from there on out, it’s in control of the child. You don’t go in and change the carpets in somebody else’s house.
Do not even think of going into that process, trying to
CloseHandleits stdout, andCreateFilea new stdout pointing to your pipe. That’s a recipe for disaster and will result in quirky behavior and “impossible” crashes.Even if you could do what you wanted to do, what would happen if two programs did this?