在 Chrome V27 之前,您可以枚举 Chrome 子窗口控件以到达编辑字段并从那里读取字符串值以获取当前打开的 URL。
不幸的是,Chrome 28 已切换到新的渲染引擎 (Blink),除了主窗口 (Chrome_WidgetWin_1) 和网页选项卡 (Chrome_RenderWidgetHostHWND) 之外,不再使用 Windows 控件。
如果有人能指出从另一个 (Win32) 应用程序获取当前打开的 Chrome URL 的替代方法,我将不胜感激。
最佳答案
Chrome 支持 Windows 辅助功能 API,因此您可以使用它们从 chrome(包括浏览器栏)和网页中提取信息。将此 API 视为枚举窗口控件的更抽象版本。
查看 Inspect Objects用于探索您可以访问哪些信息的工具 - 地址栏和内容看起来确实可用。
您可以在 C# 中使用 AutomationElement 获取相同的信息类集:
- 使用 AutomationElement windowEl = AutomationElement.FromHandle(new IntPtr(hwnd)) ;作为起点,如果你知道树的 HWND
- 然后尝试 AutomationElement editEl = AutomationElement.FindFirst (TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit )) 找到第一个 ControlType 为 Edit 的元素。 FindFirst 对树进行深度优先搜索,看起来在这种情况下会起作用;如果您想自己逐步行走,可以使用 TreeWalker 类。
- 使用以下方法将找到的元素“转换”为 ValuePattern:ValuePattern vp = (ValuePattern) editEl.GetCurrentPattern(ValuePattern.Pattern) ;
- 最后,使用 string str = vp.Current.Value;获得编辑的值(value)。
关于c# - 如何从另一个 Windows 应用程序获取 Chrome 28 的当前 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841965/