Сохранение фокуса на консольном приложении

#c# #excel #focus #console-application #setforegroundwindow

#c# #excel #фокус #консольное приложение #setforegroundwindow

Вопрос:

Я создаю программу, в которой я управляю Excel через консольное приложение, но мне нужно постоянно фокусироваться на консоли. Я уже пробовал некоторые методы, такие как SetForegroundWindow (), но это не сработало. Как я могу это сделать? Мне нужно, чтобы это было внутри цикла while, чтобы каждый раз, когда я вставляю символ (код, который выполняется, чтобы мне не приходилось каждый раз нажимать enter), он оставался в консольном приложении и не менял фокус в Excel.

 foreach (Process p in prcss)
        {
            p.WaitForInputIdle();
            IntPtr h = p.MainWindowHandle;
            SetForegroundWindow(h);

            if (p.ProcessName == prog || p.ProcessName == progcaps)
            {
                Console.WriteLine("nnProcess: {0} ID: {1}n", p.ProcessName, p.Id); //Imprime apenas o que queremos        

            }

            string pname = p.ProcessName;

            //Enter
            SendKeys.SendWait("~");
            SendKeys.SendWait("{F2}");

            while (true)
            {
                //Code goes here
            }
       }
  

Комментарии:

1. К вашему сведению, если вы хотите автоматизировать Excel с. Net вы можете использовать Office Interop, который дает вам полный контроль через расширенный API.

2. Очевидно, что этот метод легко взломать и он подвержен ошибкам. Во время работы вашего приложения может появиться любая программа и перехватить фокус; сканер вирусов, обновления программы, системные сообщения и т.д… Используйте другой подход!

3. Я использую interop, это не весь код