How to send input to the console as if the user is typing?
I have figured out how to send the input to the console. I used what Jon Skeet said. I am not 100% sure this is the correct way to implement this.
If there are any comments on to make this better I would love to here. I did this just to see if I could figure it out.
Here is the program I stared that waited for input form the user
class Program
{
static void Main(string[] args)
{
// This is needed to wait for the other process to wire up.
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Enter Pharse: ");
string pharse = Console.ReadLine();
Console.WriteLine("The password is '{0}'", pharse);
Console.WriteLine("Press any key to exit. . .");
string lastLine = Console.ReadLine();
Console.WriteLine("Last Line is: '{0}'", lastLine);
}
}
This is the console app writing to the other one
class Program
{
static void Main(string[] args)
{
// Find the path of the Console to start
string readFilePath = System.IO.Path.GetFullPath(@"..\..\..\ReadingConsole\bin\Debug\ReadingConsole.exe");
ProcessStartInfo startInfo = new ProcessStartInfo(readFilePath);
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
Process readProcess = new Process();
readProcess.StartInfo = startInfo;
// This is the key to send data to the server that I found
readProcess.OutputDataReceived += new DataReceivedEventHandler(readProcess_OutputDataReceived);
// Start the process
readProcess.Start();
readProcess.BeginOutputReadLine();
// Wait for other process to spin up
System.Threading.Thread.Sleep(5000);
// Send Hello World
readProcess.StandardInput.WriteLine("Hello World");
readProcess.StandardInput.WriteLine("Exit");
readProcess.WaitForExit();
}
static void readProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
// Write what was sent in the event
Console.WriteLine("Data Recieved at {1}: {0}", e.Data, DateTime.UtcNow.Ticks);
}
}
This sounds like a task for SendKeys()
. It's not C#, but VBScript, but nontheless - you asked for some way of automating it:
Set Shell = CreateObject("WScript.Shell")
Shell.Run "cmd.exe /k title RemoteControlShell"
WScript.Sleep 250
Shell.AppActivate "RemoteControlShell"
WScript.Sleep 250
Shell.SendKeys "dir{ENTER}"