Expand description
Create multiple consoles for a windows application.
This crate makes use of windows Named Pipes to enable a process to controll multiple consoles.
§Quick Overview
Normaly a program running on windows can only use one console.
A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console.
From the microsoft docs.
This crate solves this problem by providing an abstraction over a worker process wich is controlled using named pipes.
§Examples
You can use the Console
class to create a new console, after that
you can write to it or read a line.
It is planned, that Console
will also implement the Read
and Write
traits.
use pipedconsole::Console;
let my_console = Console::new("My Console").expect("Failed to create a new console");
my_console.println("What is your name?"); // seperate window
let mut name = String::new();
my_console.read_line(&mut name).expect("Could not read from the console");
println!("Your name is: {}", name); // main processe's console
When the console object is dropped or the calling program exits, the console will close automaticly, unless another process also writes to it.
§Important
This crate comes with a build script wich tries to compile the console_worker
executable.
You need to have the cargo
command usable in order for it to work.
This script is important because cargo does not build binaries inside library crates, so
it needs to be done manually.
If the build script runs for the first time, it will display an info message.
When you run your program, a call to Console::new
will do the following:
- It trys to find the
console_worker
executable in the same directory as the currently running one. This will always work, if you putconsole_worker.exe
into the same folder as any executable calling Console::new(). - If it cant find the executable, it tries to find it at the default path cargo will put it when you build normally. This only works inside the default cargo project structure and makes it easier to just use this crate as-is.
If you want to move your executable and run it in a new directory because of some reason,
you will have to find console_worker.exe
on your computer.
For more information on where you can find it, run the build script again with the PIPED_CONSOLE_HELP
environment variable set.
If you use cmd
:
set PIPED_CONSOLE_HELP=TRUE
cargo clean
cargo build
This should display a message on where the console_worker
executable is located.
§Additional Information
Creating a new Console
will create a new seperate process. That means you will
see a “console_worker” process in your task manager. That process is just the console
listening for commands to execute.
In order to interface to a console-worker process using another language etc. you can
manually launch it and then connect to the named pipe wich is created. For more
information about this see the worker
documentation inside the repository.
You can find the worker binary files at /src/bin/console_worker/main.rs
Structs§
- Console
- Used for printing and reading from an external console.
- Error
- The main error type used by this crate.
Enums§
- Error
Kind - The error type returned by all functions that interact with a
Console
.