2009-07-11 10 views
3

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

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

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

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

Так что я хотел бы создать приложение, которое будет следить за названиями таблиц для меня. (Все заголовки табуляции, а не только заголовок окна, который является только активным заголовком вкладки.) Я создал приложение 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

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

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