2009-07-11 37 views
3

有點奇怪(具有挑戰性?)的問題。是否可以通過編程方式從外部應用程序訪問打開的瀏覽器的選項卡?我意識到這是一個模糊的問題,但聽到我:枚舉來自外部應用程序的瀏覽器選項卡

我想創建的是一個「Gmail聊天通知程序」應用程序,當存在未答覆的聊天消息時,閃爍Windows系統托盤中的通知圖標。現在,據我所知道的,唯一內置Gmail聊天通知如下:

  1. 啓用聲音(我不喜歡)
  2. 觀看窗口/標籤/頁標題爲交替閃爍「Gmail」/「Blah說...」消息。

與#2的問題是:當最小化瀏覽器窗口,並在Gmail的標籤是不是在瀏覽器中活躍標籤,窗口標題不會改變,我沒有注意到新的聊天消息。

所以我想創建一個應用程序,爲我觀看標籤標題。 (所有標籤標題,不只是窗口標題,它只是活動標籤標題)。我創建了概念證明C#應用程序,通過枚舉活動的Windows進程並監視閃爍的「Blah」來檢測未應答的聊天消息在窗口的標題說...」:

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的任何選項。

相關問題