曾经有一种方法可以从Google Chrome中获取活动标签的URL,方法是使用FindWindowEx
结合SendMessage
调用来获取当前在omnibox中的文本。最近(?)更新似乎打破了这种方法,因为Chrome现在似乎是自己渲染一切。(您可以使用Spy++,AHK Window Spy或Window Detective进行检查)
要获取Firefox和Opera上的当前URL,可以使用DDE和WWW_GetWindowInfo
。这在Chrome上似乎是不可能的(不再是了)。).
This question有一个关于它如何工作的更多信息的答案,这是这段代码(正如我所解释的,它不再工作了-hAddressBox
是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();
所以我的问题是有没有一种新的方法来获取当前关注的标签页的URL?(仅标题是不够的)
9条答案
按热度按时间rsl1atfo1#
**编辑:**看起来我在这里的答案中的代码在以后的Chrome版本中不再起作用(尽管使用
AutomationElement
的想法仍然有效),所以看看其他版本的答案。例如,以下是Chrome 54:https://stackoverflow.com/a/40638519/377618下面的代码看起来可以工作(感谢icemanind的评论),但是需要大量的资源。找到elmUrlBar需要大约350ms…有点慢
更不用说同时运行多个
chrome
进程的问题了。**编辑:**我不满意上面的慢方法,所以我让它更快(现在50ms),并添加了一些URL验证,以确保我们得到正确的URL,而不是用户可能在网络上搜索的东西,或者仍然忙碌输入URL。代码如下:
tpgth1q72#
从Chrome 54开始,以下代码对我有效:
pxy2qtax3#
以上所有的方法对我来说都是失败的Chrome V53及以上。
以下是正在起作用的:
在这里找到:
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
cfh9epnr4#
我用下一个代码得到了Chrome 38.0.2125.10的结果('try'块中的代码必须用这个替换)
2ledvvac5#
我拿了安吉洛的溶液,稍微清理了一下……我有一个固定与LINQ:)
这可以说是主要的方法;它使用了几个扩展方法:
请注意,该注解具有误导性,因为注解往往是这样的--它实际上并没有查看单个AutomationElement。我把它留在那里是因为安吉洛的代码里有。
下面是扩展类:
guicsvcw6#
我发现了这篇文章,并且能够使用这些方法在C#中成功地从chrome中提取URL,谢谢大家!
AutomationElement
树遍历再次中断。我看到了Microsoft的这篇文章:Navigate Among UI Automation Elements with TreeWalker
并使用它来创建一个简单的函数,该函数搜索具有我们正在寻找的
"edit"
控件类型的AutomationElement
,* 而不是遍历总是变化的树层次结构 *,并从那里提取AutomationElement
的url值。我写了一个简单的类来完成这一切:Google-Chrome-URL-Check-C-Sharp。
自述文件解释了一点如何使用它。
总而言之,它可能只是更可靠一点,希望你们中的一些人觉得它有用。
myss37ts7#
参考Angelo Geels的解决方案,这里是版本35的补丁-“try”块中的代码必须替换为:
我把它从这里:http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/dotNet/System_CodeDom+Grab~URL~from~Chrome.txt
bq9c1y668#
对我来说,只有活动的chrome窗口有一个MainWindowHandle。我通过在所有窗口中查找Chrome窗口来解决这个问题,然后使用那些句柄来代替。例如:
然后获取所有Chrome窗口:
最后:
希望这能为其他人节省一些时间,让他们弄清楚如何真正获得所有chrome窗口的句柄。
uqdfh47h9#
对于版本53.0.2785,它可以使用以下命令: