Доступ запрещен - при попытке получить URL (текст) из дескриптора адресной строки

Я пытаюсь извлечь URL-адрес из адресной строки IE. (IE 8 в Windows 7), используя следующий код C#.

        static string GetUrlFromIE()
        {
            IntPtr windowHandle = APIFuncs.getForegroundWindow();
            IntPtr childHandle;
            String strUrlToReturn = "";

            //try to get a handle to IE's toolbar container
            childHandle = APIFuncs.FindWindowEx(windowHandle, IntPtr.Zero, "WorkerW", IntPtr.Zero);
            if (childHandle != IntPtr.Zero)
            {
                //get a handle to address bar
                childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "ReBarWindow32", IntPtr.Zero);
                if (childHandle != IntPtr.Zero)
                {
                    childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "Address Band Root", IntPtr.Zero);
                    if (childHandle != IntPtr.Zero)
                    {
                        childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "Edit", IntPtr.Zero);
                        if (childHandle != IntPtr.Zero)
                        {
                            strUrlToReturn = new string((char)0, 256);
                            GetWindowText(hwnd, strUrlToReturn , strUrlToReturn.Length);
                        }
                    }
                 }
            }
            return strUrlToReturn;
        } 

Вызов GetWindowText возвращает исключение «Отказано в доступе». При запуске приложения с правами администратора выдает "Система не может найти указанный файл".

Любые идеи?


person Sameet    schedule 20.07.2010    source источник


Ответы (1)


GetWindowText() не может получить текст элемента управления в другом процессе, вместо этого вы должны использовать SendMessage() с WM_GETTEXTLENGTH / WM_GETTEXT.

Редактировать; Независимый от версии способ:

(Добавьте ссылку на c:\WINDOWS\system32\shdocvw.dll)

using SHDocVw;
.
.
foreach (InternetExplorer ieInst in new ShellWindowsClass())
   Console.WriteLine(ieInst.LocationURL);
person Alex K.    schedule 20.07.2010
comment
Спасибо! SHDocVw - блестящий справочник! Однако причина, по которой я думаю, что мне придется придерживаться методологии GetText, заключается в том, что мне нужно сделать то же самое в большинстве популярных браузеров для Windows — Chrome, Firefox, Safari, Opera. Мой план состоял в том, чтобы написать собственный метод для каждого браузера для извлечения URL-адреса из его дескриптора адресной строки. - person Sameet; 20.07.2010