L'obtention de l'onglet actuel de l'adresse URL de Google Chrome à l'aide de C#
Il y avait un moyen d'obtenir de l'onglet actif de l'URL à partir de Google Chrome en utilisant FindWindowEx
en combinaison avec un SendMessage
appeler pour obtenir le texte actuellement dans l'omnibox. Une étude récente (?) mise à jour semble avoir brisé cette méthode, étant donné que Chrome semble être le rendu de tout lui-même maintenant. (Vous pouvez vérifier avec Spy++, AHK Fenêtre d'Espion ou de la Fenêtre de Détective)
Pour obtenir l'URL actuelle sur Firefox et Opera, vous pouvez utiliser DDE et WWW_GetWindowInfo
. Cela ne semble pas être possible sur Chrome (plus?).
Cette question a une réponse avec plus d'informations sur la façon dont il l'habitude de travailler, qui est ce morceau de code (qui, comme je l'ai expliqué, ne fonctionne plus - hAddressBox
est 0
):
var hAddressBox = FindWindowEx(
intPtr,
IntPtr.Zero,
"Chrome_OmniboxView",
IntPtr.Zero);
var sb = new StringBuilder(256);
SendMessage(hAddressBox, 0x000D, (IntPtr)256, sb);
temp = sb.ToString();
Donc ma question est: Est-il un nouveau façon à obtenir le concentre actuellement sur l'onglet de l'URL? (Juste le titre n'est pas assez)
- Essayez de regarder les ce DONC, la question.
Vous devez vous connecter pour publier un commentaire.
Edit: Semble que le code dans ma réponse ici ne fonctionne plus (même si l'idée d'utiliser
AutomationElement
ne fonctionnent toujours) pour les dernières versions de Chrome, regardez les autres réponses pour les différentes versions. Par exemple, voici une pour le Chrome 54: https://stackoverflow.com/a/40638519/377618Le code suivant semble fonctionner, grâce à icemanind commentaire), mais est cependant à forte intensité de ressources. Il faut environ 350ms pour trouver elmUrlBar... un peu lent.
Pour ne pas mentionner que nous avons de la difficulté de travailler avec de multiples
chrome
processus en cours d'exécution en même temps.Edit: je n'étais pas heureux avec le ralentissement de la méthode ci-dessus, alors j'en ai fait plus vite (maintenant 50ms) et ajouté quelques URL de validation pour que nous avons eu la bonne URL à la place de quelque chose que l'utilisateur peut être à la recherche sur le web, ou encore d'être occupé à taper dans l'URL. Voici le code:
using System.Windows.Automation;
UIAutomationTypes.dll
dans vos projets de références.De Chrome 54, le code suivant fonctionne pour moi:
Toutes les méthodes ci-dessus sont un échec pour moi avec Chrome V53 et au-dessus.
Voici ce qu'est le travail:
Trouvé ici:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/93001bf5-440b-4a3a-ad6c-478a4f618e32/how-can-i-get-urls-of-open-pages-from-chrome-and-firefox?forum=csharpgeneral
J'ai pris Angelo solution et à la nettoyer un peu... j'ai une fixation avec LINQ 🙂
C'est la principale méthode qu'il avait; il utilise un couple de méthodes d'extension:
Noter que le commentaire est trompeur, car les commentaires ont tendance à être - il ne fait pas regarder un seul AutomationElement. Je l'ai laissé là parce que d'Angelo code qu'il avait.
Voici la classe d'extension:
Se référant à la solution d'Angelo Geels, voici un patch pour la version 35 - le code à l'intérieur de la "essayer" bloc doit être remplacé par ceci:
Je l'ai pris ici:
http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/dotNet/System_CodeDom+Grab~URL~from~Chrome.txt
Pour moi, seulement les actifs de la fenêtre de chrome a une MainWindowHandle. Je l'ai eu en regardant à travers toutes les fenêtres de google chrome windows, puis en utilisant ces poignées au lieu. Par exemple:
Et d'obtenir ensuite toutes les fenêtres google chrome:
et enfin:
J'espère que cela sauve quelqu'un d'autre peu de temps à essayer de comprendre comment obtenir effectivement les poignées de toutes les fenêtres google chrome.
J'ai découvert ce post et a réussi à tirer l'URL à partir de chrome en C# à l'aide de ces méthodes, merci à vous tous!
Malheureusement avec la récente Chrome 69 mise à jour, le
AutomationElement
l'arbre transversal a éclaté de nouveau.J'ai trouvé cet article de Microsoft: Naviguer Parmi UI Automation Éléments avec TreeWalker
Et l'a utilisé pour fouetter une fonction simple qui recherche la
AutomationElement
avec le"edit"
type de contrôle que nous recherchons, à la place de parcours d'un arbre de hiérarchie qui est toujours en évolution, et à partir de là extraire l'url de ValeurAutomationElement
.J'ai écrit une simple classe qui encapsule cette tout: Google-Chrome-URL-Voir-C-Sharp.
Le fichier readme qui explique un peu sur la façon de l'utiliser.
Dans l'ensemble c'est peut-être juste un peu plus fiable, et espère que certains d'entre vous le trouvez utile.
Pour la version 53.0.2785 l'ai eu à travailler avec cette: