您的位置:首页 > 其它

Vc动态切换IE9标签(选项卡)

2012-10-25 10:09 316 查看
//相关头文件 Add 1210

#include <winuser.h>

#include <oleacc.h>

#pragma comment(lib,"oleacc.lib")

//全局变量 Add 1210

HWND hWndMainWindow;

IAccessible *paccMainWindow = NULL;

IAccessible *paccChildWindow = NULL;

HRESULT hr;

IAccessible* paccControl = NULL;//输入框的 IAccessible 接口

VARIANT varControl; //子ID

BOOL CActiveTabDlg::OnInitDialog()

{

CDialog::OnInitDialog();

CoInitialize(NULL);//初始化com Add1210

}

void CActiveTabDlg::OnGotofirstTab()

{

hWndMainWindow = ::FindWindow(L"IEFrame", NULL);

if(!hWndMainWindow)

{

MessageBox(L"没有发现IE窗口");

}

else

{

//查找DirectUIHWND窗口---begin

HWND hWnd = ::FindWindowEx(hWndMainWindow, NULL, L"WorkerW", NULL);

if (hWnd)

hWnd = ::FindWindowEx(hWnd, NULL, L"ReBarWindow32", NULL);

else

hWnd = NULL;

if (hWnd)

hWnd = ::FindWindowEx(hWnd, NULL, L"TabBandClass", NULL);

else

hWnd = NULL;

if (hWnd)

hWnd = ::FindWindowEx(hWnd, NULL, L"DirectUIHWND", NULL);

//查找DirectUIHWND窗口---end

if (hWnd)

{

HWND hWndChildWindow = hWnd;

if(S_OK == (hr = AccessibleObjectFromWindow(hWndChildWindow,OBJID_CLIENT, IID_IAccessible,(void**)&paccMainWindow)))

{

long nChildCount = 0;

long nObjectCount = 0;

HRESULT hr = paccMainWindow->get_accChildCount(&nChildCount);

if (SUCCEEDED(hr))

{

VARIANT ChildStruct[50];

HRESULT hRes=AccessibleChildren(paccMainWindow, 0, nChildCount, ChildStruct, &nObjectCount);

for(int i = 0; i < nObjectCount; i++) // enum objects

{

if(ChildStruct[i].vt == VT_DISPATCH)

{

VARIANT vtChild = ChildStruct[i];

IDispatch* pDisp = vtChild.pdispVal;

IAccessible* pChild = NULL;

long nChildCount2 = 0;

long nObjectCount2 = 0;

VARIANT ChildStruct2[50];

hr = pDisp->QueryInterface(IID_IAccessible, (void**) &pChild);

if (hr == S_OK)

{

///////////////////////////////////////////////////

//这里得到tab的标签个数

hr = pChild->get_accChildCount(&nChildCount2);

///////////////////////////////////////////////////

HRESULT hRes=AccessibleChildren(pChild, 0, nChildCount2, ChildStruct2, &nObjectCount2);

for(int j = 0; j < nObjectCount2; j++) // enum objects

{

if(ChildStruct2[j].vt == VT_DISPATCH)

{

VARIANT vtChild2 = ChildStruct2[j];

IDispatch* pDisp2 = vtChild2.pdispVal;

IAccessible* pChild2 = NULL;

hr = pDisp2->QueryInterface(IID_IAccessible, (void**) &pChild2);

if (hr == S_OK)

{

if (j == 0) //第一个标签

{

VARIANT varChild;

VariantInit(&varChild); //初始化变量

varChild.vt = VT_I4;

varChild.lVal = CHILDID_SELF;

HRESULT hr = pChild2->accDoDefaultAction(varChild); //这里不成功,不知道为什么

if (hr == S_OK)

{

}

}

//PrintName(pChild2, CHILDID_SELF);

pChild2->Release();

pDisp2->Release();

}

}

}

pChild->Release();

}

pDisp->Release();

}

}

}

paccMainWindow->Release();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: