请问如何得到浏览器(IE和腾讯)中输入的网址? 我现在只能得到IE中的,对于腾讯浏览器得不到,请高人指点,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 FindWindowEx 找窗口的方法也不行? 顶!顺便学习一下:你得到IE中输入的网址的方法是什么?GetWindowText?? 腾讯浏览器不能用IWebbrowser2接口,需要先找到窗口,//通过一系列的FindWindowEx找到地址栏的编辑框句柄,窗口的类名可通过WINSIGHT32找到 handle=FindWindowEx(handle,0,"IEFrame",NULL); handle=FindWindowEx(handle,0,"WorkerA",NULL); handle=FindWindowEx(handle,0,"ReBarWindow32",NULL); handle=FindWindowEx(handle,0,"ComboBoxEx32",NULL); handle=FindWindowEx(handle,0,"ComboBox",NULL); handle=FindWindowEx(handle,0,"Edit",NULL); //取得URL的长度 int i=SendMessage(handle,WM_GETTEXTLENGTH,0,0); char *tem=new char[i]; //取回URL并显示 SendMessage(handle,WM_GETTEXT,i+1,long(tem)); 如果仍然找不到,用spy++对比一下改 腾讯的主窗口类名不是IEFRAME,没有子窗口的类名是workerA of workerW 是workerA or workerW,请问有什么办法判断是浏览器窗口吗? bool FindAllWebBrowser(){ //释放上次调用该函数时,生成的com对象 if (vectPWebBrowser.size() != 0) { for (int i = 0; i < vectPWebBrowser.size(); i++) { vectPWebBrowser[i]->Release(); } vectPWebBrowser.clear(); } HRESULT hr; SHDocVw::IShellWindowsPtr spSHWinds; hr = spSHWinds.CreateInstance (__uuidof(SHDocVw::ShellWindows)); if (FAILED (hr)) { return false; } if(spSHWinds == NULL) return false; //获得系统中的窗口数目 long nCount = spSHWinds->GetCount (); IDispatchPtr spDisp; for (long i = 0; i < nCount; i++) { _variant_t va (i, VT_I4); spDisp = spSHWinds->Item (va); IWebBrowser2 * pWebBrowser = NULL; hr = spDisp.QueryInterface (IID_IWebBrowser2, & pWebBrowser); if (pWebBrowser != NULL) { HRESULT hr; IDispatch* pHtmlDocDispatch = NULL; IHTMLDocument2 * pHtmlDoc = NULL; //接收document object. hr = pWebBrowser->get_Document (&pHtmlDocDispatch); if (SUCCEEDED (hr) && (pHtmlDocDispatch != NULL)) { // Query for IPersistStreamInit. hr = pHtmlDocDispatch->QueryInterface (IID_IHTMLDocument2, (void**)&pHtmlDoc); if (SUCCEEDED (hr) && (pHtmlDoc != NULL)) { vectPWebBrowser.push_back(pWebBrowser); //将该页面添加到页表中 pHtmlDoc->Release(); //寻找到doc成功,必须要释放 } pHtmlDocDispatch->Release (); } } } return TRUE;}这个是最标准的方法, 可以找到所有的当前IE的实例, 不过你得先把msdn里IWebBrowser2的使用说明看一下. HWND hIE=::FindWindow("IEFRAME",0); //获得第一个IE窗口 HWND hbegin=hIE; //记录下来 bool bnext=false; while(hIE) { TCHAR bb[200]; //获取标题 ::SendMessage(hIE,WM_GETTEXT,200,(LPARAM)bb); CString ss(bb); //注意:explorer也是使用的IE窗口,也含有地址栏,判断是不是正在浏览网页的真正IE窗口 if(ss.Find("Microsoft Internet Explorer")>0) //一般情况下这样判断是可以的,除非你的IE被别人恶意修改了,呵呵 { bool bfind=false; HWND hSub=::FindWindowEx(hIE,0,_T("WorkerW"),0);//查找子窗口 while(hSub && !bfind) { HWND hss=::FindWindowEx(hSub,0,_T("ReBarWindow32"),0); while(hss && !bfind) { //找到包含地址栏的窗口,取地址 HWND hs3=::FindWindowEx(hss,0,"ComboBoxEx32",0); if(hs3) { bfind=true; ::SendMessage(hs3,WM_GETTEXT,200,(LPARAM)bb); //::GetWindowText(hs3,bb,200); AfxMessageBox(bb); break; } } hSub=::FindWindowEx(hIE,hSub,_T("RebarWindow32"),0); } } hIE=::GetNextWindow(hIE,GW_HWNDNEXT);//按照z-序向下找 //如果已经到最下边了,从hbegin开始向上找 if(!hIE && !bnext) { bnext=true; hIE=::GetNextWindow(hbegin,GW_HWNDPREV); } } 为什么VC6.0与VS2008同样的程序编译出来的EXE文件相差那么大!! GDI按像素画图 在线等,MFC聊天程序出现link2001错误 [Help]视频文件怎么和语音文件合成? 求统计http中post和get包的程序,最好能有代码,我的编程能力很差。 闪闪的红星,升星了,散分庆祝! 问一下网页上出现的"鼠标接触或点击出现一程序界面"的效果是怎么实现的问题? 请教各位大虾!!!!!!!! 如何建立元素是struct数组的数组?高手帮忙! 头文件编译出错? 文件传送 定时器最大定时间隔是多少?
//通过一系列的FindWindowEx找到地址栏的编辑框句柄,窗口的类名可通过WINSIGHT32找到
handle=FindWindowEx(handle,0,"IEFrame",NULL);
handle=FindWindowEx(handle,0,"WorkerA",NULL);
handle=FindWindowEx(handle,0,"ReBarWindow32",NULL);
handle=FindWindowEx(handle,0,"ComboBoxEx32",NULL);
handle=FindWindowEx(handle,0,"ComboBox",NULL);
handle=FindWindowEx(handle,0,"Edit",NULL);
//取得URL的长度
int i=SendMessage(handle,WM_GETTEXTLENGTH,0,0);
char *tem=new char[i];
//取回URL并显示
SendMessage(handle,WM_GETTEXT,i+1,long(tem));
如果仍然找不到,用spy++对比一下改
{
//释放上次调用该函数时,生成的com对象
if (vectPWebBrowser.size() != 0)
{
for (int i = 0; i < vectPWebBrowser.size(); i++)
{
vectPWebBrowser[i]->Release();
} vectPWebBrowser.clear();
} HRESULT hr;
SHDocVw::IShellWindowsPtr spSHWinds;
hr = spSHWinds.CreateInstance (__uuidof(SHDocVw::ShellWindows));
if (FAILED (hr))
{
return false;
} if(spSHWinds == NULL)
return false;
//获得系统中的窗口数目
long nCount = spSHWinds->GetCount (); IDispatchPtr spDisp;
for (long i = 0; i < nCount; i++)
{
_variant_t va (i, VT_I4);
spDisp = spSHWinds->Item (va);
IWebBrowser2 * pWebBrowser = NULL;
hr = spDisp.QueryInterface (IID_IWebBrowser2, & pWebBrowser);
if (pWebBrowser != NULL)
{
HRESULT hr;
IDispatch* pHtmlDocDispatch = NULL;
IHTMLDocument2 * pHtmlDoc = NULL;
//接收document object.
hr = pWebBrowser->get_Document (&pHtmlDocDispatch);
if (SUCCEEDED (hr) && (pHtmlDocDispatch != NULL))
{
// Query for IPersistStreamInit.
hr = pHtmlDocDispatch->QueryInterface (IID_IHTMLDocument2, (void**)&pHtmlDoc);
if (SUCCEEDED (hr) && (pHtmlDoc != NULL))
{
vectPWebBrowser.push_back(pWebBrowser); //将该页面添加到页表中
pHtmlDoc->Release(); //寻找到doc成功,必须要释放
}
pHtmlDocDispatch->Release ();
}
}
}
return TRUE;
}这个是最标准的方法, 可以找到所有的当前IE的实例, 不过你得先把msdn里IWebBrowser2的使用说明看一下.
HWND hbegin=hIE; //记录下来
bool bnext=false;
while(hIE)
{
TCHAR bb[200];
//获取标题
::SendMessage(hIE,WM_GETTEXT,200,(LPARAM)bb);
CString ss(bb);
//注意:explorer也是使用的IE窗口,也含有地址栏,判断是不是正在浏览网页的真正IE窗口
if(ss.Find("Microsoft Internet Explorer")>0)
//一般情况下这样判断是可以的,除非你的IE被别人恶意修改了,呵呵
{
bool bfind=false;
HWND hSub=::FindWindowEx(hIE,0,_T("WorkerW"),0);//查找子窗口
while(hSub && !bfind)
{
HWND hss=::FindWindowEx(hSub,0,_T("ReBarWindow32"),0);
while(hss && !bfind)
{
//找到包含地址栏的窗口,取地址
HWND hs3=::FindWindowEx(hss,0,"ComboBoxEx32",0);
if(hs3)
{
bfind=true;
::SendMessage(hs3,WM_GETTEXT,200,(LPARAM)bb);
//::GetWindowText(hs3,bb,200);
AfxMessageBox(bb);
break;
}
}
hSub=::FindWindowEx(hIE,hSub,_T("RebarWindow32"),0);
}
}
hIE=::GetNextWindow(hIE,GW_HWNDNEXT);//按照z-序向下找
//如果已经到最下边了,从hbegin开始向上找
if(!hIE && !bnext)
{
bnext=true;
hIE=::GetNextWindow(hbegin,GW_HWNDPREV);
}
}