The Console functions provide the tools for character-based applications that want to receive input about mouse events, window resize events, and unfiltered keyboard events; or that want to have greater control of the screen display.
Each console group has its own input buffer. When a console group has the keyboard focus, it receives information about input events which it formats as input records and places in its input buffer. Any process in the console process group can read from the input buffer of its group if it has an open handle to “CONIN$”.
More than one process (or thread) in the same screen group can read at the same time from the shared input buffer. There is no guarantee that the correct process will receive the key strokes intended for it. The only way to control this is for applications to spawn child processes that do not inherit handles to StdIn, or alternatively, allow only one child to inherit keyboard access with the parent refraining from keyboard access until the child has terminated.