2009-07-11 11 views
3

Un peu d'une question étrange (difficile?). Est-il possible d'accéder par programmation aux onglets d'un navigateur ouvert à partir d'une application externe? Je me rends compte que c'est une question vague, mais écoutez-moi:Énumération des onglets du navigateur à partir d'une application externe

Ce que j'essaie de créer est une application "Gmail Chat Notifier" qui clignote une icône de notification dans la barre d'état système de Windows quand un message de chat sans réponse existe. En ce moment, pour autant que je peux dire, le seul intégré dans les notifications Gmail chat sont:

  1. Activer les sons (que je ne préfère pas)
  2. Regarder la fenêtre/onglet/titre de la page pour l'alternance clignotant "Gmail"/"Blah says ..." message.

Le problème n ° 2 est la suivante: Lorsque la fenêtre du navigateur est réduite au minimum, et lorsque l'onglet Gmail n'est pas le onglet actif dans le navigateur, le titre de la fenêtre ne change pas et je ne remarquent pas nouveaux messages de discussion Donc je voudrais créer une application qui surveille les titres d'onglet pour moi. (Tous les titres d'onglet, pas seulement le titre de la fenêtre, qui est uniquement le titre de l'onglet actif.) J'ai créé une application C# preuve de concept pour détecter les messages de discussion sans réponse en énumérant les processus Windows actifs. dit ... » dans le titre de la fenêtre:

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

Mais le problème évident avec ceci est qu'il ne fonctionne pas lorsque l'onglet Gmail n'est pas l'onglet actif/concentré (car il ne porte que sur les titres de fenêtre). J'ai donc besoin de quelque chose qui peut creuser plus profondément et regarder les titres de l'onglet.

Je suis ouvert à tout. Ce que j'avais pensé pourrait travail est de trouver un moyen d'énumérer les onglets du navigateur en quelque sorte (fenêtres enfants MDI? * Doigts croisés *), mais peut-être que ce n'est même pas proche de possible :) Je suis également ouvert à d'autres solutions si il y a un moyen de le faire avec, disons, des plugins Firefox ou autre chose (mais ce serait bien de l'intégrer à la barre d'état système de Windows, et pas seulement d'exister dans le sandbox du navigateur).

Quelqu'un peut-il m'aider à démarrer? Merci beaucoup d'avance.

Répondre

1

Ce n'est pas possible en général. Les onglets du navigateur n'ont pas besoin d'être des fenêtres enfants MDI (en fait, ils ne le sont certainement pas). Vous ne connaissez pas l'arborescence d'un navigateur arbitraire, vous ne pouvez donc pas l'analyser et comprendre les onglets (et même si vous le connaissiez pour un navigateur spécifique, il s'agit certainement d'un détail d'implémentation susceptible de changer même entre des versions mineures). En fait, vous ne savez pas si le navigateur utilise des handles de fenêtres Win32 séparés pour les onglets, car il peut avoir un seul handle pour sa fenêtre principale, et dessiner tout à l'intérieur (par exemple les applications Qt et WPF font cela, et je crois que Opera en particulier fait cela, et probablement aussi Safari).

Toute solution à cela devra être spécifique au navigateur. Vous pouvez probablement écrire des plugins correspondants pour IE et Firefox pour communiquer cette information à votre application (bien que les plugins Firefox soient en sandbox, donc je ne suis pas sûr qu'ils puissent même faire IPC). Je ne vois aucune option pour Opera, Safari ou Chrome.

Questions connexes