2009-07-11 12 views
3

奇妙な質問ですか?開いているブラウザのタブにプログラムで外部アプリケーションからアクセスすることは可能ですか?外部アプリケーションからブラウザのタブを列挙します。

私が作成しようとしているのは、チャットメッセージが返信されていないときにWindowsシステムトレイの通知アイコンを点滅させる「Gmail Chat Notifier」アプリケーションです。今、私の知る限り、唯一の組み込みのGmailのチャットの通知は次のとおりです。

  1. の交流のために(私は好まない)音
  2. ウォッチウィンドウ/タブ/ページタイトルを有効にします"Gmail"/"Blah says ..."というメッセージが点滅します。

#2に問題がある:ブラウザのウィンドウが最小化された場合、およびGmailのタブブラウザでアクティブタブでないとき、ウィンドウタイトルが変更されないと、私は気づきません新しいチャットメッセージ。

私は、私のためのタブのタイトルを監視するアプリケーションを作成したいと思います。アクティブなWindowsプロセスを列挙し、「Blah」が点滅しているかどうかを監視することで、未解決のチャットメッセージを検出するための概念実証C#アプリケーションを作成しました(これはアクティブなタブタイトルだけではなく、すべてのタブタイトルです)ウィンドウのタイトルに「...言う:

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ウィンドウハンドルをタブに使用しているのかどうかは分かりません。メインウィンドウのハンドルを1つしか持たないので、すべてを内部で描画することができます(QtやWPFアプリケーションがそうします)。特にOperaはこれを行い、おそらくSafariもそうです)。

これに対する解決策は、ブラウザ固有のものでなければなりません。おそらくIEとFirefox用の対応するプラグインを書いてその情報をアプリケーションに伝えることができます(Firefoxのプラグインはサンドボックス化されているので、IPCを実行できるかどうかはわかりません)。 Opera、Safari、Chromeのオプションはありません。

関連する問題