Перечислять вкладки браузера из внешнего приложения - PullRequest
3 голосов
/ 11 июля 2009

Немного странный (сложный?) Вопрос. Возможно ли программный доступ к вкладкам открытого браузера из внешнего приложения? Я понимаю, что это неопределенный вопрос, но выслушай меня:

То, что я пытаюсь создать, - это приложение "Gmail Chat Notifier", которое отображает значок уведомления на панели задач Windows, когда существует неотвеченное сообщение чата. На данный момент, насколько я могу судить, единственные встроенные уведомления чата Gmail:

  1. Включить звуки (которые я не предпочитаю)
  2. Посмотрите заголовок окна / вкладки / страницы для чередующегося всплывающего сообщения "Gmail" / "Бла говорит ...".

Проблема с # 2: когда окно браузера свернуто и вкладка Gmail не является вкладкой active в браузере, заголовок окна не меняется, и я не замечать новые сообщения чата.

Так что я хотел бы создать приложение, которое следит за названиями вкладок для меня. (Все заголовки вкладок, а не только заголовок окна, который является только заголовком активной вкладки.) Я создал тестовое приложение C # для обнаружения неотвеченных сообщений чата путем перечисления активных процессов Windows и отслеживания мигающего сообщения «Бла». говорит ... "в заголовке окна:

Process[] procs = Process.GetProcesses();
IntPtr hWnd;
foreach (Process proc in procs)
    if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero)
        if (proc.MainWindowTitle.IndexOf(" says… ") >= 0)
        ...

Но очевидная проблема с этим заключается в том, что она не будет работать, если вкладка Gmail не является активной / сосредоточенной вкладкой (поскольку она смотрит только на заголовки окон). Поэтому мне нужно что-то, что может копать глубже и смотреть на заголовки вкладок.

Я открыт для всего. То, о чем я думал может работа - это найти способ как-то перечислить вкладки браузера (дочерние окна MDI? * Пальцы скрещены *), но, возможно, это даже близко не возможно :) Я тоже открыт для и другие решения, если есть способ сделать это, скажем, с помощью плагинов Firefox или чего-то еще (но было бы неплохо интегрироваться в системный трей Windows, а не просто существовать в изолированной программной среде браузера).

Может ли кто-нибудь помочь мне начать? Большое спасибо заранее.

1 Ответ

1 голос
/ 11 июля 2009

Это вообще невозможно. Вкладки браузера не должны быть дочерними окнами MDI (на самом деле, они почти наверняка не являются). Вы не знаете дерева окон произвольного браузера, поэтому не можете разобрать его и выяснить вкладки (и даже если вы знали это для конкретного браузера, это определенно деталь реализации, которая может измениться даже между небольшими выпусками ). Фактически, вы не знаете, использует ли браузер отдельные дескрипторы окна Win32 для вкладок, поскольку он может иметь только один дескриптор для своего главного окна и рисовать все внутри себя (например, приложения Qt и WPF делают это, и я считаю эта опера, в частности, делает это, и, вероятно, так делает Safari).

Любое решение должно быть привязано к браузеру. Вероятно, вы можете написать соответствующие плагины для IE и Firefox, чтобы передать эту информацию вашему приложению (хотя плагины Firefox находятся в «песочнице», поэтому я не уверен, что они вообще способны на IPC). Я не вижу вариантов для Opera, Safari или Chrome.

...