LogicSoft.com.pl - systemy informatyczne

Uruchamianie konsoli w aplikacji WPF/WinForms

Uwaga, otwiera nowe okno. PDFDrukujEmail

Tryb konsoli w nowoczesnych aplikacjach systemowy może się przydać. Z tego właśnie powodu w tym artykule przedstawiłem prosty sposób uruchomienia konsoli z poziomu aplikacji Windows Presentation Foundation lub Windows Forms. Do tego celu zostały wykorzystane biblioteki znajdujące się w środowisku Windows.

Pracując nad pewnym projektem w WPF niezbędne okazało się wykorzystanie konsoli do wyświetlenia pewnego rodzaju danych. Po dłuższym przeszukiwaniu internetu udało mi się znaleść informacje, jak to zrobić, jednak nie były one dość precyzyjne. Z tego właśnie powodu postanowiłem opisać całą procedurę uruchamiania konsoli w aplikacjach WPF/WinForms.

Do tego celu niezbędne będzie stworzenie nowego projektu WPF w Visual Studio, dodanie trzech przycisków typu Button oraz kontrolki typu TextBox. Pierwszy z przycisków będzie odpowiedzialny za otwieranie okna konsoli, drugi za jego zamykanie, a zadaniem trzeciego będzie przesyłanie tekstu znajdującego się w TextBox'ie do okna konsoli. Poniższy zrzut ekranu prezentuje wygląd przykładowego interfejsu użytkownika.

Kolejnym krokiem będzie dodanie statycznej klasy, w której zaimportowane zostały biblioteki odpowiedzialne za obsługę konsoli. W niej także znajdują się statyczne metody odpowiedzialne za otwieranie i zamykanie konsoli oraz wypisywanie na niej tekstu. Klasa ta została zaprezentowana na poniższym listingu.

public static class WPFConsole
{
public static void OpenConsole()
{
if (!AttachConsole(-1))
{
AllocConsole();
}
}
public static void CloseConsole()
{
FreeConsole();
}
public static void WriteOnConsole(string text)
{
Console.WriteLine(text);
}

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool FreeConsole();
}

Użyte tutaj zostały biblioteki znajdujące się w systemie Windows, dzięki którym użytkownik ma możliwość otworzenia i zamknięcia konsoli.

Ostatnim krokiem będzie dodanie obsługi zdarzeń odpowiedzialnych za naciśnięcie poszczególnych przycisków wchodzących w skład interfejsu użytkownika. Zostało to opisany na poniższym listingu.

private void btnOpen_Click(object sender, RoutedEventArgs e)
{
WPFConsole.OpenConsole();
btnOpen.IsEnabled = false;
btnClose.IsEnabled = true;
}

private void btnClose_Click(object sender, RoutedEventArgs e)
{
WPFConsole.CloseConsole();
btnOpen.IsEnabled = true;
btnClose.IsEnabled = false;
}

private void btnWriteOnConsole_Click(object sender, RoutedEventArgs e)
{
if(!string.IsNullOrEmpty(txtToConsole.Text))
{
WPFConsole.WriteOnConsole(txtToConsole.Text);
txtToConsole.Text = string.Empty;
}
}

W tym momencie po naciśnięciu przycisku OTWÓRZ zostanie wyświetlona konsola. Po wpisaniu tekstu i naciśnięciu przycisku WYŚWIETL tekst zostanie przeniesiony na konsole. Zamykanie konsoli odbywa się poprzez naciśnięcie przycisku ZAMKNIJ. Zostało to zaprezentowane na poniższym zrzucie ekranu.

W razie jakichkolwiek pytań, zapraszam do działu kontakt.