.net - 使用Microsoft用户界面自动化获取所有 Firefox 打开的url

  显示原文与译文双语对照的内容

我正在尝试retirve标签中打开的所有 url 。

这就是我到目前为止所做的,代码获取所有的Firefox 网址,但它也从每个开放的文档中获取。 我不喜欢的东西。

我怎么解决这个问题。

同时,在尝试强制转换为字符串时,'type的第一个机率例外'system 。'在 Microsoft.VisualBasic.dll 中发生'也引发了一些异常:


test.Add(TryCast(DirectCast(d.GetCurrentPattern(ValuePattern.Pattern), ValuePattern).Current.Value, String))

如果我能正确地控制控件来检索正确的url,就应该解决这个问题。

这里代码的另一个问题,UI自动化使我的Firefox 过程unminizable从Takbar中进行,无法按下 Firefox 任务栏按钮最大化/最小化窗口。


Imports System.Windows.Automation

Public Shared Function GetFirefoxUrls(process As Process) As List(Of String)

 If process Is Nothing Then
 Throw New ArgumentNullException("process")

 ElseIf process.MainWindowHandle = IntPtr.Zero Then
 Throw New ArgumentException("Invalid process.","process")

 Else

 Dim element As AutomationElement =
 AutomationElement.FromHandle(process.MainWindowHandle)

 If element Is Nothing Then
 Return Nothing

 Else

 Dim docs As AutomationElementCollection =
 element.FindAll(TreeScope.Subtree,
 New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document))

 If docs Is Nothing Then
 Return Nothing

 Else

 Dim test As New List(Of String)

 For Each d In docs
 Try
 test.Add(TryCast(DirectCast(d.GetCurrentPattern(ValuePattern.Pattern), ValuePattern).Current.Value, String))

 Catch ex As Exception
 Debug.WriteLine(ex.Message)
 End Try
 Next

 Return test

 End If ' doc Is Nothing

 End If ' element Is Nothing

 End If ' process Is Nothing

End Function

使用方法:


Dim urls As List(Of String) =
 GetFirefoxUrls(Process.GetProcessesByName("Firefox").First)

时间: 原作者:

使用检查工具( 它在 Windows 7 SDK中),我可以看到所有的Firefox 选项卡'url EditControls有 name="搜索或者输入地址"。 我不记得你可以基于元素( 我相信你不能)的名称创建一个 PropertyCondition 。 但是当你循环访问文档元素时,你可以在将它们添加到列表之前获得每个文档的名称属性。 例如,就在这一行代码之前:


test.Add(TryCast(DirectCast(d.GetCurrentPattern(ValuePattern.Pattern), ValuePattern).Current.Value, String))

[EDIT] 哎呀,请不要说话,说话太快了。 name="搜索或者输入地址"只是导航工具栏父控件中的控件。它包含当前的URL,而不是每个页面的URL 。

Plan B: can你可以构建一个测试应用,它可以在整个文档测试过程中对整个文档和与已知的URL文本 Fragments Fragments 进行比较,例如。xml 。

...