C# 获取Firefox URL
我需要知道用户当前所在的URL。(使用Firefox)C# 获取Firefox URL,c#,firefox,C#,Firefox,我需要知道用户当前所在的URL。(使用Firefox) 我想到了一个键盘记录器来跟踪URL,但是当用户点击链接时会发生什么呢 标题不够,我需要完整的URL。 对于IE来说这很容易,但对于Firefox来说就不容易了。 对于IE,我正在使用: private string GetUrlFromIE() { IntPtr windowHandle = GetForegroundWindow(); IntPtr childHandle; String strUrlToReturn = "&q
我想到了一个键盘记录器来跟踪URL,但是当用户点击链接时会发生什么呢 标题不够,我需要完整的URL。
对于IE来说这很容易,但对于Firefox来说就不容易了。
对于IE,我正在使用:
private string GetUrlFromIE()
{
IntPtr windowHandle = GetForegroundWindow();
IntPtr childHandle;
String strUrlToReturn = "";
//IE's toolbar container
childHandle = FindWindowEx(windowHandle,IntPtr.Zero,"WorkerW",IntPtr.Zero);
if(childHandle != IntPtr.Zero)
{
//get a handle to address bar
childHandle = FindWindowEx(childHandle,IntPtr.Zero,"ReBarWindow32",IntPtr.Zero);
if(childHandle != IntPtr.Zero)
{
// get a handle to combo boxes
childHandle = FindWindowEx(childHandle, IntPtr.Zero, "ComboBoxEx32", IntPtr.Zero);
if(childHandle != IntPtr.Zero)
{
// get a handle to combo box
childHandle = FindWindowEx(childHandle, IntPtr.Zero, "ComboBox", IntPtr.Zero);
if(childHandle != IntPtr.Zero)
{
//get handle to edit
childHandle = FindWindowEx(childHandle, IntPtr.Zero, "Edit", IntPtr.Zero);
if (childHandle != IntPtr.Zero)
{
strUrlToReturn = GetText(childHandle);
}
}
}
}
}
return strUrlToReturn;
}
有什么想法吗?在javascript中,您可以通过
window.location.href
您可以使用WindowsIAccessible界面获取URL 为了便于操作,我建议使用库。 您应该提前准备好FireFox窗口句柄 以下是从FireFox获取URL的C#代码:
private static string GetUrlFromFirefox(IntPtr windowHandle)
{
SystemAccessibleObject sao = SystemAccessibleObject.FromWindow(new SystemWindow(windowHandle), AccessibleObjectID.OBJID_WINDOW);
var preds = new Predicate<SystemAccessibleObject>[] {
s => s.RoleString == "application",
s => s.RoleString == "property page",
s => s.RoleString == "grouping" && s.StateString == "None",
s => s.RoleString == "property page" && s.StateString == "None",
s => s.RoleString == "browser",
s => s.RoleString == "document" && s.Visible
};
var current = sao.Children;
SystemAccessibleObject child = null;
foreach (var pred in preds)
{
child = Array.Find(current, pred);
if (child != null)
{
current = child.Children;
}
}
if (child != null)
{
return child.Value;
}
return string.Empty;
}
私有静态字符串GetUrlFromFirefox(IntPtr windowHandle)
{
SystemAccessibleObject sao=SystemAccessibleObject.FromWindow(新系统窗口(windowHandle),AccessibleObject.OBJID_窗口);
var preds=新谓词[]{
s=>s.RoleString==“应用程序”,
s=>s.RoleString==“属性页”,
s=>s.RoleString==“分组”&&s.StateString==“无”,
s=>s.RoleString==“属性页”和&s.StateString==“无”,
s=>s.RoleString==“浏览器”,
s=>s.RoleString==“文档”和s.可见
};
var电流=sao.儿童;
SystemAccessibleObject子对象=null;
foreach(pred中的var pred)
{
child=Array.Find(当前,pred);
if(child!=null)
{
当前=子项。子项;
}
}
if(child!=null)
{
返回子值;
}
返回字符串。空;
}
这适用于FireFox 14。在IE中,您可以通过获取地址栏的句柄来获取url,然后使用WINAPI getWindowText()可以检索IEs url,但FireFox没有子句柄,至少没有子句柄的getWindowText将返回除此之外的内容0@Dan这个问题被标记为C#(而不是JavaScript)请编辑您的问题,并准确地告诉我们您想做什么,以及您是如何做的。您的问题含糊不清,您的要求也不明确。我们现在才知道您是如何通过评论获取所需信息的。您是否正在使用C#win应用程序从外部web浏览器获取位置?是的,我正在使用C#winforms应用程序并尝试获取当前firefox上的位置。如何在firefox中运行该应用程序而不更改url?只有将url设置为某个值时,它才会更改url。要获取url,您可以:var theUrl=window.location.href;仅当您将其设置为某个窗口时,它才会重定向用户。location=“”;是的,但我如何在firefox中运行该脚本?如果我跑file:///.../script.js 或者类似的东西我会改变网址