Проверьте, открыта ли сеть в Chrome (C#) - PullRequest
1 голос
/ 09 февраля 2020

Я программирую. NET Framework-приложение, которое открывает веб-сайт в Chrome и переключает его в полноэкранный режим. Проблема, с которой я сталкиваюсь, заключается в том, чтобы определить, открыта ли сеть (я не хочу открывать несколько страниц без необходимости). В этом случае программа должна просто переключить текущее активное окно на правильную вкладку и переключиться на полный экран.

Проблема в том, что только активная вкладка видна программе C# одновременно, поэтому программе необходимо проверять каждую вкладку вручную (путем переключения активной вкладки и проверки названия). Мне все равно, если экран мерцает, бросить все вкладки.

Я нашел это решение онлайн:

        private void GetCaptionOfActiveWindow()
    {
        Process[] procs = Process.GetProcessesByName("Chrome");

        // to find the tabs we first need to locate something reliable - the 'New Tab' button 
        if (procs.Length == 0)
        {
            //some code to open chrome with the correct web site and change to full screen
            return;
        }

        IntPtr hWnd = IntPtr.Zero;
        int id = 0;
        int numTabs = procs.Length;

        foreach (Process p in procs)
        {
            if (p.MainWindowTitle.Length > 0)
            {
                hWnd = p.MainWindowHandle;
                id = p.Id;
                break;
            }
        }

        SetForegroundWindow(hWnd);
        SendKeys.SendWait("^1"); // change focus to first tab
        Thread.Sleep(100);

        int next = 1;
        string title;

        while (next <= numTabs)
        {
            try
            {
                title = Process.GetProcessById(id).MainWindowTitle.Replace(" - Google Chrome", "");
                //richTextBox1.Text += title + "\n";
                if (title.ToLower().Contains("some web site name"))
                {
                    // some code to change the current active tab and change to full screen.
                    return;
                }
                next++;
                SendKeys.SendWait("^{TAB}"); // change focus to next tab
                Thread.Sleep(100);
            }
            catch (Exception ex)
            {
                // Chrome internal process, doesn't have tab.

            }
        }
        //richTextBox1.Text += "web not exists\n";
        //some code to open new tab with the correct web site and change to full screen
    }

Это решение отлично работает, если все вкладки Chrome открыты в то же самое окно. Моя проблема состоит в том, чтобы выяснить, что делать, если вкладки разбросаны по нескольким Chrome Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...