我正在编写一个程序,将我的浏览历史记录在文本文件中。它从Chrome窗口中获取URL并将其写入文本文件。它将Chrome窗口句柄作为参数,并将URL写入输出参数。代码如下:
我正在编写一个程序,将我的浏览历史记录在文本文件中。它从Chrome窗口中获取URL并将其写入文本文件。它将Chrome窗口句柄作为参数,并将URL写入输出参数。代码如下:
static AutomationElement elm;// = AutomationElement.FromHandle(handle);
static AutomationElement elmUrlBar;
public static void GetChromeUrl(IntPtr handle, out string url)
{
string namedProperty = "Address and search bar" ;
url = null;
elm = AutomationElement.FromHandle(handle);
elmUrlBar = elm.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.NameProperty, namedProperty));
if (elmUrlBar != null)
{
AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();
if (patterns.Length > 0)
{
ValuePattern val = (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]);
url = val.Current.Value;
}
}
}
我使用计时器回调每5秒钟调用这个方法,它从Chrome浏览器窗口返回正确的URL。因此,它能够正常工作,尽管似乎没有释放AutomationElement对象所占用的内存,导致该应用程序使用的RAM不断增长。 我使用dotMemory 4.0和ants memory profiler 8对其进行了分析,发现AutomationElement对象被创建,但垃圾收集器未将其删除。有人知道如何解决这个问题吗?
using(){}
语句中,会发生什么?你也可以实现IDisposable
吗?你还可以调用GC.Collect()
吗? - MethodMan