4

少し変わった (難しい?) 質問です。開いているブラウザーのタブに外部アプリケーションからプログラムでアクセスすることは可能ですか? 漠然とした質問だと思いますが、聞いてください。

私が作成しようとしているのは、応答のないチャット メッセージが存在する場合に Windows システム トレイに通知アイコンを点滅させる「Gmail Chat Notifier」アプリケーションです。現在、私が知る限り、組み込みの Gmail チャット通知は次の 2 つだけです。

  1. サウンドを有効にする (私は好まない)
  2. ウィンドウ/タブ/ページのタイトルで、"Gmail" / "Blah said..." というメッセージが交互に点滅していることに注意してください。

#2 の問題点: ブラウザ ウィンドウが最小化されていて、Gmail タブがブラウザのアクティブなタブではない場合、ウィンドウのタイトルが変わらず、新しいチャット メッセージに気付かない。

そこで、タブのタイトルを監視するアプリケーションを作成したいと思います。(アクティブなタブ タイトルのみであるウィンドウ タイトルだけでなく、すべてのタブ タイトル。) アクティブな 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 システム トレイと統合するとよいでしょう)。

誰でも私が始めるのを手伝ってくれますか? よろしくお願いします。

4

1 に答える 1

1

一般にはありえない。ブラウザーのタブは、MDI 子ウィンドウである必要はありません (実際、ほとんどの場合そうではありません)。任意のブラウザのウィンドウ ツリーを知らないため、それを解析してタブを把握することはできません (特定のブラウザについて知っていたとしても、マイナー リリース間でも変更される可能性が高い実装の詳細であることは間違いありません)。 )。実際、ブラウザがタブ用に個別の Win32 ウィンドウ ハンドルを使用しているのかどうかはわかりません。メイン ウィンドウ用のハンドルが 1 つしかなく、内部にすべてを単独で描画する可能性があるためです (たとえば、Qt および WPF アプリケーションはそれを行っており、私は信じています)。特にOperaはそうしており、おそらくSafariもそうです)。

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

于 2009-07-11T01:10:01.710 に答える