Software design and other ramblings RSS 2.0
# Wednesday, July 02, 2008

The other day I had to update a existing windows GUI application to enable it to be called via the command line. In order to do this, you need to add the following import to your .NET application (C# example shown):

/// <summary>
/// AttachConsole gives the ability for a GUI application to write to the console window of the console from which it was started.
/// </summary>
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
static extern bool AttachConsole(uint dwProcessId);

/// <summary>
/// Flag indicating that we should attach to parent console
/// </summary>
const uint ATTACH_PARENT_PROCESS = 0x0ffffffff;

After adding these declarations to your main class, its a simple case of adapting your Main method to detect if you're running in console or GUI mode and acting accordingly. E.g:

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
     // Are we in console mode
     bool isConsole = args.Length > 0;

     if (!isConsole)
     {
          RunVisual();
     }
     else
     {
          // Attach to console
          AttachConsole(ATTACH_PARENT_PROCESS);

          // Run console app
          RunConsole(args);
     }
}
Wednesday, July 02, 2008 4:31:56 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] -
.NET | C# | Software Development
Top Cashback
TopCashback
Archive
<July 2019>
SunMonTueWedThuFriSat
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2019 Scott Hill

Sign In
Statistics
Total Posts: 8
This Year: 0
This Month: 0
This Week: 0
Comments: 2
All Content © 2019, Scott Hill