如何从另一个Windows应用程序获取Chrome 28的当前URL?

在Chrome V27之前,您可以枚举Chrome子窗口控件以进入编辑字段并从那里读取字符串值以获取当前打开的URL。

不幸的是,除了主窗口(Chrome_WidgetWin_1)和网页标签(Chrome_RenderWidgetHostHWND)之外,Chrome 28已经切换到新的渲染引擎(Blink)并且不再使用Windows控件。

如果有人能指出从另一个(Win32)应用程序获取当前打开的Chrome URL的替代方法,我将不胜感激。

Chrome支持Windows辅助functionAPI,因此您可以使用这些API从Chrome(包括broswer栏)以及网页中提取信息。 可以将此API视为枚举窗口控件的更抽象版本。

查看Inspect Objects工具,了解您可以访问哪些信息 – 看起来好像地址栏和内容可用。

您可以使用AutomationElement类集在C#中获取相同的信息:

  • use AutomationElement windowEl = AutomationElement.FromHandle(new IntPtr(hwnd)) ; 作为起点,如果你知道树的HWND
  • 然后尝试使用AutomationElement editEl = AutomationElement.FindFirst (TreeScope.Descendants,new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit ))来查找ControlType为Edit的第一个元素。 FindFirst对树进行深度优先搜索,看起来它在这种情况下会起作用; 如果您想自己一步一步地走路,可以使用TreeWalker类。
  • 使用以下命令将找到的元素“cast”到ValuePattern:ValuePattern vp =(ValuePattern) editEl.GetCurrentPattern(ValuePattern.Pattern) ;
  • 最后,使用string str = vp.Current.Value; 获得编辑的价值。

AFAIK你可以通过创建一个chrome扩展来实现这一点,然后使用WebSockets与应用程序进行通信。

甚至还有一个Delphi实现的Web Socket协议(带例子) – > DelphiWs

更多相关信息在这里 。 这应该让你开始。