I'm trying to extract the URL from the address bar of IE. (IE 8 on Windows 7) using the following C# code.
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;
}
The GetWindowText call returns an "Access is denied" exception. On running the app with admin privileges, it throws a "System cannot find the file specified".
Any ideas?
GetWindowText()
can't retrieve the text of a control in another process, instead you should use SendMessage()
with WM_GETTEXTLENGTH
/ WM_GETTEXT
.
Edit; Version agnostic way:
(Add a ref to c:\WINDOWS\system32\shdocvw.dll)
using SHDocVw;
.
.
foreach (InternetExplorer ieInst in new ShellWindowsClass())
Console.WriteLine(ieInst.LocationURL);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With