近来需要用到在C/S程序中得到IE和遨游当前打开的地址,于是在baidu和gooogle中是大搜而特搜,又在搜索出来的大量文章中一个个的测试,可把我累晕了。终于,功夫不负有心人,终于搞定!原来这个简单,特对此作出总结。
首先不管是哪个浏览器都不要忘了:
using System.Runtime.InteropServices;
const int WM_GETTEXT = 0X000D;//获得文本消息的16进制。
1、IE篇:
声明API ,注意了IE和遨游的是不一样的:
[DllImport("user32")]
public static extern Int FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32")]
public static extern Int FindWindowEx(Int hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
[DllImport("user32")]
public static extern int GetWindowText(int hwnd, StringBuilder buf, int nMaxCount);
[DllImport("user32")]
public static extern int SendMessage(IntPtr hwnd, int msg,int wParam, StringBuilder lParam);
private void button6_Click(object sender, EventArgs e)
{
String ls_url;
ls_url = GetUrl();
MessageBox.Show(ls_url);
}
public static string GetUrl()
{
int parent = FindWindow("IEFrame", null);
int child = findwindowex(parent, 0, "workerw", null);
child = findwindowex(child, 0, "rebarwindow32", null);
child = findwindowex(child, 0, "comboboxex32", null);
child = findwindowex(child, 0, "combobox", null);
child = findwindowex(child, 0, "edit", null);//通过spy++获得地址栏层次结构,然后一层层的获得
StringBuilder buffer = new StringBuilder(1024);
int num = SendMessage(Child, WM_GETTEXT, 1024, buffer);
string url = buffer.ToString();
return url;
}
2、遨游篇:
声明API:
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
[DllImport("user32")]
public static extern int GetWindowText(int hwnd, StringBuilder buf, int nMaxCount);
[DllImport("user32")]
public static extern int SendMessage(IntPtr hwnd, int msg,int wParam, StringBuilder lParam);
调用:
private void button6_Click(object sender, EventArgs e)
{
String ls_url;
ls_url = GetUrl();
MessageBox.Show(ls_url);
}
public static string GetUrl()
{
IntPtr parentMx = FindWindow("Maxthon2_Frame", null);
IntPtr Child = FindWindowEx(parentMx , IntPtr.Zero,"XTPDockBar",null);
Child = FindWindowEx(Child, IntPtr.Zero, "XTPToolBar", "地址栏");
Child = FindWindowEx(Child, IntPtr.Zero, "RichEdit20W", null);
StringBuilder buffer = new StringBuilder(1024);
int num = SendMessage(Child, WM_GETTEXT, 1024, buffer);
string url = buffer.ToString();
return url;
}