10

Chrome V27 までは、Chrome の子ウィンドウ コントロールを列挙して編集フィールドにアクセスし、そこから文字列値を読み取って現在開いている URL を取得できました。

残念ながら、Chrome 28 は新しいレンダリング エンジン (Blink) に切り替わり、メイン ウィンドウ (Chrome_WidgetWin_1) と Web ページ タブ (Chrome_RenderWidgetHostHWND) 以外に Windows コントロールを使用しなくなりました。

現在開いている Chrome の URL を別の (Win32) アプリケーションから取得する別の方法を誰かが指摘できれば幸いです。

4

2 に答える 2

11

Chrome は Windows アクセシビリティ API をサポートしているため、それらを使用して、ブラウザー バーを含むクロムと Web ページの両方から情報を抽出できます。この API は、ウィンドウ コントロールの列挙のより抽象的なバージョンと考えてください。

Inspect Objectsツールをチェックして、アクセスできる情報を調べてください。アドレス バーとコンテンツが利用可能であるように見えます。

クラスのAutomationElementセットを使用して、C# で同じ情報を取得できます。

  • AutomationElement windowEl = AutomationElement.FromHandle(new IntPtr(hwnd))を使用します。ツリーの HWND がわかっている場合の出発点として
  • 次に、AutomationElement editEl = AutomationElement.FindFirst (TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit )) を試して、Edit の ControlType を持つ最初の要素を見つけます。FindFirst はツリーの深さ優先検索を行いますが、この場合はうまくいくようです。自分でステップバイステップで歩きたい場合は、TreeWalker クラスを使用できます。
  • ValuePattern vp = (ValuePattern) editEl.GetCurrentPattern(ValuePattern.Pattern) ;を使用して、見つかった要素を ValuePattern に「キャスト」します。
  • 最後に、string str = vp.Current.Value; を使用します。編集の値を取得します。
于 2013-05-31T08:45:09.397 に答える