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

35 篇文章 0 订阅
15 篇文章 0 订阅

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值