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

本文关键字:Chrome URL 另一个 Windows 应用程序 | 更新日期: 2023-09-27 18:16:02

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

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

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

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

Chrome支持Windows可访问性api,因此您可以使用这些api从Chrome(包括浏览器栏)和网页中提取信息。可以把这个API看作是枚举窗口控件的一个更抽象的版本。

检查检查对象工具来探索您可以访问的信息-它看起来好像地址栏和内容是可用的。

你可以在c#中使用AutomationElement类集获得相同的信息:

  • 使用AutomationElement。FromHandle(新IntPtr (hwnd));作为起始点,如果您知道树的HWND
  • 然后尝试AutomationElement editEl = AutomationElement. findfirst (TreeScope)。派生,新的属性条件(AutomationElement)。ControlTypeProperty, ControlType.Edit))来查找第一个具有ControlType为Edit的元素。FindFirst对树进行深度优先搜索,这在本例中似乎行得通;如果你想一步一步自己走,可以使用TreeWalker类。
  • 使用:ValuePattern vp = (ValuePattern) editEl.GetCurrentPattern(ValuePattern. pattern);
  • 最后,使用string str = vp.Current.Value;来获取编辑的值。

你可以创建一个chrome扩展,然后使用WebSockets与应用程序通信。

甚至有一个Delphi实现的Web Socket协议(带有示例)-> DelphiWs

更多相关信息在这里。这样你就可以开始了。