Консольное/оконное приложение по наличию аргумента командной строки - C#

Узнай цену своей работы

Формулировка задачи:

Вопрос: Можно ли в main() организовать две ветви: если args.Length == 0, то запускается интерфейс Windows Form, а если есть аргумент (имя файла исходных данных), то запускается консоль с выводом результатов расчета в консоль с возможностью переадресации выдачи в файл стандартным способом (через >)?

Решение задачи: «Консольное/оконное приложение по наличию аргумента командной строки»

textual
Листинг программы
         
        static void Main(string[] args)
        {
            if (args.Length==0)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
            {
                CreateConsole();
            }
        }
        
        public static void CreateConsole()
        {
            AllocConsole();
            
            // перенаправление ввода/вывода в консоль. (visual studio перенаправляет в Output window при отладке проекта с типом Windows приложение)
            IntPtr defaultStdout = new IntPtr(7);
            IntPtr currentStdout = GetStdHandle(STD_OUTPUT_HANDLE);
            if (currentStdout != defaultStdout)
            {
                SetStdHandle(STD_OUTPUT_HANDLE, defaultStdout);
            }
 
            IntPtr defaultStdin = new IntPtr(3);
            IntPtr currentStdint = GetStdHandle(STD_INPUT_HANDLE);
            if (currentStdint != defaultStdin)
            {
                SetStdHandle(STD_INPUT_HANDLE, defaultStdin);
            }
        }
        
        private const int STD_OUTPUT_HANDLE = -11;
        private const int STD_INPUT_HANDLE = -10;
        [DllImport("kernel32.dll")]
        private static extern IntPtr GetStdHandle(int nStdHandle);
        [DllImport("kernel32.dll")]
        private static extern void SetStdHandle(int nStdHandle, IntPtr handle);
        [DllImport("kernel32.dll")]
        static extern bool AllocConsole();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы