Получение Firefox URL - PullRequest
       8

Получение Firefox URL

4 голосов
/ 07 января 2010

Мне нужно знать URL-адрес, по которому сейчас находится пользователь. Я подумал о кейлоггере, чтобы отслеживать 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;
}

есть идеи?

Ответы [ 2 ]

3 голосов
/ 20 октября 2012

Вы можете получить URL, используя интерфейс Windows IAccessible .

Для простоты манипулирования IAccessible я предлагаю использовать библиотеку Управляемый Windows API . Вы должны заранее иметь дескриптор окна FireFox.

Вот код C # для получения URL из FireFox:

    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;
    }

Это работает для FireFox 14.

0 голосов
/ 07 января 2010

В javascript вы можете получить доступ к URL-адресу с помощью

window.location.href
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...