Как открыть консоль windows forms

Реализация DI в PHP

Jason-Webb 13.05.2025

Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .

Обработка изображений в реальном времени на C# с OpenCV

stackOverflow 13.05.2025

Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .

POCO, ACE, Loki и другие продвинутые C++ библиотеки

NullReferenced 13.05.2025

В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .

Паттерны проектирования GoF на C#

UnmanagedCoder 13.05.2025

Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .

Создаем CLI приложение на Python с Prompt Toolkit

py-thonny 13.05.2025

Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .

Конвейеры ETL с Apache Airflow и Python

AI_Generated 13.05.2025

ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .

Выполнение асинхронных задач в Python с asyncio

py-thonny 12.05.2025

Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .

Работа с gRPC сервисами на C#

UnmanagedCoder 12.05.2025

gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .

CQRS (Command Query Responsibility Segregation) на Java

Javaican 12.05.2025

CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций. . .

Шаблоны и приёмы реализации DDD на C#

stackOverflow 12.05.2025

Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто. . .

Главная » 2016 » Июль » 7 » Урок №7 — Console в проекте Windows Forms


08:48

Урок №7 — Console в проекте Windows Forms

Доброго времени суток мои читатели! Сегодня мы поговорим о том, как добавить консоль параллельно с нашим проектом Windows Forms на языке C#.

Иногда появляется такая нужда, чтобы в проекте Windows Forms присутствовала консоль (к примеру для банального Debug’a), и у меня она появилась. Речь пойдет всё о том же FileSystemWatcher и консоли. В процессе написания программы на этапе сращивания с 1С я встретился с одной не маловажной проблемой, файлы, которые поступали из 1С не попадали в мою программу, у меня сразу встал вопрос в чём же дело!? После некоторых манипуляций я просто написал на C# в консольном проекте моего FileSystemWatcher и тут я понял в чем была моя ошибка. Наша 1С создает некий файл с расширением .tmp, а фильтр программы отслеживал только файлы расширения .sav, через секунду .tmp файл становился .sav файлом. Мой самый первый FileSystemWatcher в консольном режиме отслеживал изменения OnChanged с фильтром «*.sav», после того, как я установил фильтр следующего типа «*.*» я получал сообщения о событии OnChanged со следующим текстом : «Файл : neworder.tmp создан», то есть получается, что файловая система отслеживала файл .tmp, но папка не показывала мне этого файла и в конечном варианте мы видели уже файл .sav я понял, что файловая система следом за событием OnChanged она делает OnRenamed и переименовывает .tmp файл в .sav.

Далее я добавил функцию OnRenamed и она действительно регистрировала переименование файла. В тот момент, я решил, что хорошо было бы иметь консоль в моем приложении чтобы смотреть, какие события она логирует. Итак, в нашем приложении мы имеем файл с настройками в него я прописал также и консоль, чтобы её можно было отключить в случае не надобности или боевого запуска на системе.
Файл с настройками имеет следующий вид :

User’s settings
Sborka Screen ver 1.0
by ZombieVDK
path folder = 
$B:\sb
sborka = true
fritur = false
Number block = 8
Debug Console status :Disabled

Что же отображается в этом файле? Всё что нужно моей программе. В нашей рознице существуют два типа продукции :

  • Сборка
  • Фритюр

За эти элементы отвечают соответствующие строчки ‘sborka = true’ & ‘fritur = false’, в данной настройке у нас программа работает только на отлов файлов с фильтром «sb*.*». Параметр ‘Number block = #’ отображает количество блоков заказов которые будут отображаться в программе. Параметр ‘path folder = $B:\sb’дает наше программе понять, в какую папку посылать FileSystemWatcher для слежения. Следующий Параметр ‘Debug Console status :Disabled’ он уже отвечает за нашу консоль, в данном примере консоль отключена. Теперь рассмотрим как связать этот параметр с нашей программой.
Для того, чтобы считать параметры файла мы напишем функцию preloader, которая будет прогружать настройки, в этой статье не буду расписывать как это сделать, данный пример мы уже реализовывали в нашем
уроке №6 по FileSystemWatcher 
После того, как функция settings (которая создает наш файл с настройками) и функция preloader (которая загружает эти настройки) написаны, мы переходим к основному, написание кода для работы с консолью в Windows Forms проекте. С самого начала создаем функцию, я назвал её consondeb и прописываем вот такой код :

 

 public void consondeb()

        {

            if (NativeMethods.AllocConsole())

            {

IntPtr stdHandle = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE);

Console.WriteLine(«sbscreen.exe — Debug Console v0.01 — ZombieVDK»);

Console.WriteLine(«Debug Console будет следить за папкой в режиме Debug для отслеживание событий : \r\nOnChanged\r\nOnRenamed\r\nOnDelete\r\nAnother»);

Console.WriteLine(«Для деактивации консоли перейдите в настройки и произведите отключение.»);

Console.WriteLine(«Параметры программы : \r\nПуть = » + pathme + «\r\nСтатус Фритюра = » + fwatch +»\r\nСтатус сборки = » + watch);

            }

            else

                Console.WriteLine(«Консоль Активна!»);

        }

После того, как мы создали эту функцию, Надо ещё прописать класс NativeMethods :

public partial class NativeMethods
        {
            public static Int32 STD_OUTPUT_HANDLE = -11;

            [System.Runtime.InteropServices.DllImportAttribute(«kernel32.dll», EntryPoint = «GetStdHandle»)]
            public static extern System.IntPtr GetStdHandle(Int32 nStdHandle);

            [System.Runtime.InteropServices.DllImportAttribute(«kernel32.dll», EntryPoint = «AllocConsole»)]

[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]

            public static extern bool AllocConsole();
        }

На этом все, теперь в нашем проекте будет запускаться консоль параллельно с Windows Forms! Вот наш результат:

На этом наш урок закончен! До новых встреч! :)

Категория: Уроки по C# |
Просмотров: 2773 |

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Often, you need a console window together with a WinForm application. It can be very handy for debugging purposes while developping, but also for a (temporary) logging of some data. It is very simple to do. The following program demonstrates it, using P/Invoke.

Start a new Windows application, drop a CheckBox on the form, name it ViewConsole, and copy the following code into it.

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;    // needed to call external
                                         // application (winAPI dll)

namespace WindowsApplication1
{
   partial class Form1: Form
   {
      public Form1()
      {
         InitializeComponent();
      }

      private void ViewConsole_CheckedChanged(object sender,
                                              EventArgs e)
      {
         if (ViewConsole.Checked)
            Win32.AllocConsole();
         else
            Win32.FreeConsole();
      }
   }

   public class Win32
   {
      [DllImport("kernel32.dll")]
      public static extern Boolean AllocConsole();
      [DllImport("kernel32.dll")]
      public static extern Boolean FreeConsole();
   }
}

Вопросом таким я озадачился, читая ВиО. Поискал по интернету и нашёл solution здесь.

Для тестирования создал пустой проект Windows Forms C#. Добавал класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

    class Win32
    {
        /// <summary>
        /// Allocates a new console for current process.
        /// </summary>
        [DllImport("kernel32.dll")]
        public static extern Boolean AllocConsole();

        /// <summary>
        /// Frees the console.
        /// </summary>
        [DllImport("kernel32.dll")]
        public static extern Boolean FreeConsole();
    }

В конструктор формы добавил:

        public Form1()
        {
            InitializeComponent();

            Win32.AllocConsole();
            Console.WriteLine("Hello world\n");
        }

См. также

  • http://stackoverflow.com/questions/472282/show-console-in-windows-application
  • http://reg2run.svn.sourceforge.net/viewvc/reg2run/trunk/ManualConsole.cs?view=markup
  • http://www.nerdyhearn.com/blog/157
  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии
  • Windows server 2008 standard enterprise datacenter web
  • Создать флешку для установки windows 11 с официального сайта microsoft
  • Net exe stop windows search
  • Документация по командной строке windows
  • Как запустить windows 11 без интернета