Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / Interop / April 2006

Tip: Looking for answers? Try searching our database.

Attach to Console?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
ME - 25 Apr 2006 06:51 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?

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?

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.