//相关头文件 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();
}
}
}
}