I\'ve some library code that is used by both console and WPF apps. In the library code, there are some Console.Read()
calls. I only want to do those input rea
This SO question may provide you a solution.
Another solution is:
Console.Read()
returns -1
in windows forms applications without opening up a console window. In a console app, it returns the actual value. So you can write something like:
int j = Console.Read();
if (j == -1)
MessageBox.Show("It's not a console app");
else
Console.WriteLine("It's a console app");
I tested this code on console and winforms apps. In a console app, if the user inputs '-1', the value of j is 45. So it will work.
You can pass argument on initialize.
for example:
In your library class, add constructor with 'IsConsole' parameter.
public YourLibrary(bool IsConsole)
{
if (IsConsole)
{
// Do console work
}
else
{
// Do wpf work
}
}
And from Console you can use:
YourLibrary lib = new YourLibrary(true);
Form wpf:
YourLibrary lib = new YourLibrary(false);
In the end I did as follows:
// Property:
private bool? _console_present;
public bool console_present {
get {
if (_console_present == null) {
_console_present = true;
try { int window_height = Console.WindowHeight; }
catch { _console_present = false; }
}
return _console_present.Value;
}
}
//Usage
if (console_present)
Console.Read();
Following thekips advice I added a delegate member to library class to get user validation - and set this to a default implimentation that uses above to check if theres a console and if present uses that to get user validation or does nothing if not (action goes ahead without user validation). This means:
Thanks to all who replied.
This works for me (using native method).
First, declare:
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
After that, check with elegance... hahaha...:
if (GetConsoleWindow() != IntPtr.Zero)
{
Console.Write("has console");
}