【问题标题】:Access is denied - when trying to get the url (text) from address bar's handle访问被拒绝 - 尝试从地址栏的句柄获取 url(文本)时
【发布时间】:2010-07-20 08:15:07
【问题描述】:

我正在尝试从 IE 的地址栏中提取 URL。 (Windows 7 上的 IE 8)使用以下 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 调用返回“访问被拒绝”异常。在以管理员权限运行应用程序时,它会抛出“系统找不到指定的文件”。

有什么想法吗?

【问题讨论】:

    标签: c# winapi handle access-denied


    【解决方案1】:

    GetWindowText() 无法在另一个进程中检索控件的文本,您应该使用 SendMessage()WM_GETTEXTLENGTH / WM_GETTEXT

    编辑;版本无关方式:

    (给 c:\WINDOWS\system32\shdocvw.dll 添加一个引用)

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

    【讨论】:

    • 谢谢! SHDocVw 是一个绝妙的参考!然而,我认为我必须坚持使用 GetText 方法的原因是因为我需要在大多数流行的 Windows 浏览器(Chrome、Firefox、Safari、Opera)中做同样的事情。我的计划是为每个浏览器编写一个自定义方法,以从其地址栏句柄中提取 url。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多