Доступ запрещен - при попытке получить URL (текст) из дескриптора адресной строки - PullRequest
5 голосов
/ 20 июля 2010

Я пытаюсь извлечь 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 возвращает исключение «Доступ запрещен».При запуске приложения с правами администратора оно выдает «Системе не удается найти указанный файл».

Есть идеи?

1 Ответ

2 голосов
/ 20 июля 2010

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

Редактировать; Версия агностического способа:

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

using SHDocVw;
.
.
foreach (InternetExplorer ieInst in new ShellWindowsClass())
   Console.WriteLine(ieInst.LocationURL);
...