尝试过各种常规方法去获取,都获取不到,到最后使用JS进行获取了.同时,也提供了一种在VC/C++/MFC下执行网页JS代码的方法.话不多说,看代码:

1 加入头文件:

 
  
  1. #import "C:\\windows\\system32\\msscript.ocx" 
  2. using namespace MSScriptControl; 

2 代码实现

 
  
  1. CString runJS(IHTMLDocument2* pDoc) 
  2.     //使用前已经初始化com 
  3.     ::CoInitialize(NULL); 
  4.     HRESULT hr; 
  5.     IScriptControlPtr pScriptControl(__uuidof(ScriptControl)); 
  6.     pScriptControl->Language = "JScript"
  7.     pScriptControl->AllowUI = TRUE; 
  8.     CString jsStr = _T("function getScroll()\ 
  9.                        {var t, l, w, h;\ 
  10.                        if (document.documentElement && document.documentElement.scrollTop)\ 
  11.                        {\ 
  12.                        t = document.documentElement.scrollTop;\ 
  13.                        l = document.documentElement.scrollLeft;\ 
  14.                        } \ 
  15.                        else if (document.body)\ 
  16.                        { \ 
  17.                        t = document.body.scrollTop;\ 
  18.                        l = document.body.scrollLeft;\ 
  19.                        } \ 
  20.                        return l+\"|\"+t;\ 
  21.                        }    "); 
  22.  
  23.     LPSAFEARRAY psa; 
  24.     SAFEARRAYBOUND rgsabound[] = { 1, 0 }; // 1 elements, 0-based 
  25.     int i; 
  26.     psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound); 
  27.     if (!psa) 
  28.     { 
  29.         return NULL; 
  30.     } 
  31.     VARIANT vFlavors[1]; 
  32.     for (i = 0; i < 1; i++) 
  33.     { 
  34.         VariantInit(&vFlavors[i]); 
  35.         V_VT(&vFlavors[i]) = VT_BSTR; 
  36.     } 
  37.     V_BSTR(&vFlavors[0]) = SysAllocString(L"TC_P"); 
  38.     long lZero = 0; 
  39.     hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]); 
  40.     for(i=0;i<1;i++) 
  41.     { 
  42.         SysFreeString(vFlavors[i].bstrVal); 
  43.     } 
  44.  
  45.     _bstr_t exp = jsStr; 
  46.     pScriptControl->AddCode(exp); 
  47.     IHTMLDocument2 *objDocument1=NULL; 
  48.     IHTMLWindow2* pIHTMLWindow1 = NULL; 
  49.     objDocument1 = pDoc; 
  50.     if(objDocument1) 
  51.     { 
  52.         objDocument1->get_parentWindow(&pIHTMLWindow1); 
  53.         pScriptControl->AddObject("window", pIHTMLWindow1, VARIANT_TRUE); 
  54.     } 
  55.     _variant_t outpar = pScriptControl->Run("getScroll", &psa); 
  56.     outpar.ChangeType(VT_BSTR,NULL); 
  57.     SafeArrayDestroy(psa); 
  58.     ::CoUninitialize(); 
  59.     return outpar.bstrVal; 

通过这个方法,就可以滚动条的位置了.至于 IHTMLDocument2* pDoc这个对象,获取方法有很多种,下次我再发获取IHTMLDocument2* 的代码.

 

如果大家还有什么更好的方法,谢谢一起交流!