描述:
IE7中,因为可以TAB页面,所以有这个问题,换句话说,我想让某个页面提到前面来!
如果在IE7以前,就好做了,IWebBrowser2提供HWND这样一个函数可以得到IE的窗口句柄,直接让这个窗口提到前面即可。
解决方案1:
Navigate
解决方案2:应该是得到你需要的窗口然后ActiveWindow吧,应该和IE6没多少区别的。
解决方案3:Navigate
解决方案4: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=743273&SiteID=1
found solution. Spicific IE7 tab can be set as active via Active Accessability !
This is my very very first experemental but !!!WORKING!!! code !
I write it under BDS 2006, but it's must work under Visual studio to.
I hope it's helps:
void __fastcall TForm1::ActivateTab(TObject *Sender)
{
HRESULT hRes;
HWND MainIEWnd;
HWND CommandBarWnd;
HWND ReBarWnd;
HWND TabBandWnd;
HWND DirectUIWnd;
BSTR tabCaption;
long TabsCount=0,TabsReceived=0,newRes;
IAccessible *tabsAccess,*tabObject,*newObj;
IDispatch *tabDisp,*tab1;
VARIANT ChildStruct[10],tabStruct[10],tabQueryStruct,tabResStruct;
tabQueryStruct.vt=VT_I4;
tabQueryStruct.lVal=CHILDID_SELF;
/*
IE7 windows tree:
IEFrame
|
--CommandBarClass
|
--ReBarWindow32
|
--TabBandClass
|
--DirectUIHWND <<<<< IE 7 Tabs here !!!
*/
MainIEWnd=FindWindow("IEFrame",NULL);
if(!MainIEWnd)
{
ShowMessage("DEBUG: Unable to find main IE window");
return;
}
CommandBarWnd=FindWindowEx(MainIEWnd,NULL,"CommandBarClass",NULL);
if(!CommandBarWnd)
{
ShowMessage("DEBUG: Unable to find CommandBarWindow");
return;
}
ReBarWnd=FindWindowEx(CommandBarWnd,NULL,"ReBarWindow32",NULL);
if(!ReBarWnd)
{
ShowMessage("DEBUG: Unable to find ReBarWindow32");
return;
}
TabBandWnd=FindWindowEx(ReBarWnd,NULL,"TabBandClass",NULL);
if(!TabBandWnd)
{
ShowMessage("DEBUG: Unable to find TabBandClass");
return;
}
DirectUIWnd=FindWindowEx(TabBandWnd,NULL,"DirectUIHWND",NULL);
if(!DirectUIWnd)
{
ShowMessage("DEBUG: Unable to find DirectUIHWND");
return;
}
if(AccessibleObjectFromWindow(DirectUIWnd,OBJID_CLIENT,IID_IAccessible,(void **)&tabsAccess)!=S_OK)
{
ShowMessage("DEBUG: Unable to get IAccessible interface");
return;
}
hRes=tabsAccess->get_accChildCount(&TabsCount); // get objects count
if(!SUCCEEDED(hRes))
{
ShowMessage("DEBUG: Unable to get Objects count");
return;
}
hRes=AccessibleChildren(tabsAccess,0,TabsCount,ChildStruct,&TabsReceived);
if(!SUCCEEDED(hRes))
{
ShowMessage("DEBUG: Unable to get objects");
return;
}
for(int i=0;i<TabsReceived;i++) // enum objects
{
if(ChildStruct.vt==VT_DISPATCH)
{
tabDisp=ChildStruct.pdispVal;
hRes=tabDisp->QueryInterface(IID_IAccessible,(void **)&tabObject);
if(!SUCCEEDED(hRes))
{
ShowMessage("DEBUG: QueryInterface to tabObject failed");
continue;
}
hRes=tabObject->get_accRole(tabQueryStruct,&tabResStruct);
if(!SUCCEEDED(hRes))
{
ShowMessage("DEBUG: Unable to receive object role");
continue;
}
if(tabResStruct.lVal!=ROLE_SYSTEM_PAGETABLIST) // we need only PageControl ! skip
continue; // another contorls
tabsAccess=tabObject; // we found PageControl with IE7 tabs !
hRes=tabsAccess->get_accChildCount(&TabsCount); // number of opened tabs + New Tab button
if(!SUCCEEDED(hRes))
{
ShowMessage("DEBUG: tab count failed");
continue;
}
hRes=AccessibleChildren(tabsAccess,0,TabsCount,tabStruct,&newRes);
for(int j=0;j<newRes;j++) // enum tabs
 
您可能想查找下面的文章:
- IWebBrowser2::Navigate的问题
- IWebBrowser2::Navigate的问题
- 请教IWebBrowser2问题~~~~~~~~~在线等
- 如何用IWebBrowser2判断当前窗口是否处于激活状态?
- ATL下有没有包装过的(基础是IWebBrowser2)的浏览器控件可用?或者哪里有源代码可以下载?
- 通过IWebBrowser2能获得IE中已经载入的其他插件的接口么?
- 给定一个url,如何用IWebBrowser2接口获得该url的源码?
- 如何在activex中得到IWebBrowser2指针???
- 提问一个IWebBrowser2如何自动保存当前的文件啊,如果用EXECWB会弹出SAVE窗口,我想不让他弹出,比如自动保存到C:下,请问这个怎么搞啊,有点
- 关于IWebBrowser2的get_Width,get_Height问题(解决后将加到200分,不够再加,多谢!)