I have a application that someone else has wrote that runs in a console
window. It does not take parameters, but when running it asks three
questions and then exits. I would like to write a small utility to attach
to the console app, send the necessary answers (typically typing the letter
"y" and enter) and then leave. Is this a possiblity for .net? If so what
would be the best approach?
Thanks,
Matt
lgs.lgs - 25 Apr 2006 07:04 GMT
Is redirection acceptable?
Create a file named foo.inp, then do
conapp.exe < foo.inp
ME - 25 Apr 2006 07:16 GMT
Unfortunately no. The console app is the first part of a larger application
that starts up a custom web server after answering some questions. I wish
it were that easy. Basically I have no control of the console app until it
asks the first question.
Thanks,
Matt
> Is redirection acceptable?
>
> Create a file named foo.inp, then do
>
> conapp.exe < foo.inp
James Park - 25 Apr 2006 14:45 GMT
>I have a application that someone else has wrote that runs in a console
>window. It does not take parameters, but when running it asks three
>questions and then exits. I would like to write a small utility to attach
>to the console app, send the necessary answers (typically typing the letter
>"y" and enter) and then leave. Is this a possiblity for .net? If so what
>would be the best approach?
You could try using the SendKeys class.
ME - 25 Apr 2006 16:30 GMT
Unfortunately this didn't seem to work either. It appears SendKeys uses the
API SendMessage to transfer the keys. The CONSOLE doesn't seem to process
window messages.
>>I have a application that someone else has wrote that runs in a console
>>window. It does not take parameters, but when running it asks three
[quoted text clipped - 4 lines]
>
> You could try using the SendKeys class.
James Park - 25 Apr 2006 16:54 GMT
> Unfortunately this didn't seem to work either. It appears SendKeys uses
> the API SendMessage to transfer the keys. The CONSOLE doesn't seem to
> process window messages.
You could also try P/Invoke'ing SendInput, which often works when
keybd_event and SendKeys doesn't.
James Park - 25 Apr 2006 18:15 GMT
> Unfortunately this didn't seem to work either. It appears SendKeys uses
> the API SendMessage to transfer the keys. The CONSOLE doesn't seem to
> process window messages.
The following seems to work for me.
string cmdPath = Environment.ExpandEnvironmentVariables("%COMSPEC%");
Process consoleProcess = Process.Start(cmdPath);
Thread.Sleep(2000);
SetForegroundWindow(consoleProcess.MainWindowHandle);
SendKeys.SendWait("{ENTER}");
ME - 25 Apr 2006 18:56 GMT
THANK YOU! Grabbing the foreground window is what I had overlooked.
Thanks,
Matt
>> Unfortunately this didn't seem to work either. It appears SendKeys uses
>> the API SendMessage to transfer the keys. The CONSOLE doesn't seem to
[quoted text clipped - 8 lines]
> SetForegroundWindow(consoleProcess.MainWindowHandle);
> SendKeys.SendWait("{ENTER}");
ME - 25 Apr 2006 16:54 GMT
I have figured out how to ATTACH to a running console. I have yet to figure
out how to send an ENTER key, but here is what i have so far:
public class Attach
{
[DllImport("kernel32", SetLastError = true)]
public static extern bool AttachConsole(uint dwProcessId);
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
public static extern bool FreeConsole();
public static void AttachToCMD()
{
//Get a list of running process that are command windows
Process[] ps = Process.GetProcessesByName("cmd");
Process p = null;
uint pID = 0;
bool retVal = false;
string inputText = string.Empty;
//if we found command windows then attach to the first one
if (ps.Length > 0)
{
p = ps[0];
}
//if we successfully attached then get uint with process id so
//can pass the id to the AttachConsole method
if (p != null)
{
pID = Convert.ToUInt32(p.Id);
}
//if our pid > 0 then attach
if (pID > 0)
{
//attach to the running console. remember that an app can only
//attach to one console at a time
retVal = AttachConsole(pID);
//Perform our writes
Console.WriteLine("DIR");
//Detach from the console
FreeConsole();
}
}
}
>I have a application that someone else has wrote that runs in a console
>window. It does not take parameters, but when running it asks three
[quoted text clipped - 6 lines]
>
> Matt
cody - 26 Apr 2006 10:00 GMT
>I have figured out how to ATTACH to a running console. I have yet to
>figure out how to send an ENTER key, but here is what i have so far:
Doesn't neither "\r", "\n" or "\r\n" work?