zoukankan      html  css  js  c++  java
  • 枚举所有IE窗口,实现自动登录

    //定义IE程序处理函数指针
    typedef  void  (*ProcessWebBrowser)( const IWebBrowser2Ptr pBrowser );
    /*
    * 枚举当前打开的IE窗口,并输出网页的标题
    */
    BOOL  EnumInternetExplorer( ProcessWebBrowser pHander )
    {
        Sleep(500);

        //IE属于shell的一个应用程序,再次需要枚举ShellWindows集合
        IShellWindowsPtr  spSHWinds;
        if( FAILED( spSHWinds.CreateInstance( __uuidof( ShellWindows ) ) ) )
            return FALSE;

        //获取ShellWindows集合的数目
        long nCount=0;
        spSHWinds->get_Count(&nCount);
        for ( long lIndex = 0; lIndex < nCount; lIndex++ )
        {
            //枚举每个项
            IDispatchPtr  spDisp;
            _variant_t  var( lIndex, VT_I4 );
            spSHWinds->Item( var, &spDisp );

            if ( spDisp != NULL )
            {
                //Query网页接口
                IWebBrowser2Ptr  spBrowser( spDisp );
                if( ( spBrowser != NULL ) && ( pHander != NULL ) )
                {
                    //调用处理函数
                    pHander( spBrowser );
                }
            }
        }

        return TRUE;
    }

    //    这里需要事先设置好 LPCTSTR lpszUserNameID, LPCTSTR lpszUser, LPCTSTR lpszPwdID, LPCTSTR lpszPwd, LPCTSTR lpszSubmitID
    LPCTSTR lpszUserNameID="loginname";
    LPCTSTR lpszUser="87426628123456@sina.com";
    LPCTSTR lpszPwdID="password";
    LPCTSTR lpszPwd="123456";
    LPCTSTR lpszSubmitID="login_submit_btn";
    void AutoLogin(const IWebBrowser2Ptr pBrowser)
    {
        MSHTML::IHTMLDocument3Ptr ptrDoc3;

        IDispatch* pDocDisp;
        HRESULT hResult = pBrowser->get_Document((IDispatch **)&pDocDisp);
        if (FAILED(hResult))
        {
            _TRACE("获取IE里面的文档失败\n");

            return;
        }

        hResult = pDocDisp->QueryInterface(__uuidof(IHTMLDocument3), (void**)&ptrDoc3);
        if (FAILED(hResult))
        {
            _TRACE("获取IHTMLDocument3    失败\n");

            return;
        }
        
        MSHTML::IHTMLDocument2Ptr ptrDoc2 = ptrDoc3;

        MSHTML::IHTMLInputElementPtr ptrUserName = NULL;
        MSHTML::IHTMLInputElementPtr ptrPwd = NULL;
        MSHTML::IHTMLElementPtr pstrSubmit = NULL;

        try
        {
            //    为什么这里老崩溃呢
            //#pragma implementation_key(9490)
    //         inline VARIANT_BOOL MSHTML::DispHTMLSelectElement::GetisTextEdit ( ) {
    //             VARIANT_BOOL _result = 0;o
    //             _com_dispatch_method(this, 0x8001040a, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&_result, NULL);
    //             return _result;
    //         }
            MSHTML::IHTMLElementPtr elePtr;

            elePtr = ptrDoc3->getElementById(lpszUserNameID);
            if (!elePtr.GetInterfacePtr())
            {
                return;
            }
            ptrUserName = (MSHTML::IHTMLInputElementPtr)(elePtr);
        }
        catch(...)
        {

        }
        if (ptrUserName==NULL)
        {
            return;
        }

        ptrUserName->value = lpszUser;
        ptrUserName->put_value(ptrUserName->value);

        ptrPwd = ptrDoc3->getElementById(lpszPwdID);
        if (ptrPwd==NULL)
        {
            return;
        }

        ptrPwd->value = lpszPwd;
        ptrPwd->put_value(ptrPwd->value);
        
        CComBSTR bstrMember("toggleLogin");
        DISPID dispid = NULL;

        IDispatchPtr ptrDisp = ptrDoc2->Script;
        HRESULT hr=ptrDisp->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
        if (SUCCEEDED(hr))
        {
            DISPPARAMS paraDisp = {0,0,0,0};
            ptrDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &paraDisp, NULL, NULL, NULL);
        }


        pstrSubmit = ptrDoc3->getElementById(lpszSubmitID);
        if (pstrSubmit==NULL)
        {
            return;
        }

        pstrSubmit->click();
    }

  • 相关阅读:
    oracle 创建数据库 创建表空间 创建用户
    Oracle 10G/11G 导入 导出
    winform与IE交互
    asihttprequest简单异步
    架构师的故事
    duobangotinySDP,rfc 2327
    duobangotinySAK,20121213
    doubango框架阅读计划
    并读<自己动手做操作系统>及<汇编语言2>
    SBJSON在xcode的应用中需要注意的
  • 原文地址:https://www.cnblogs.com/maifengqiang/p/2126105.html
Copyright © 2011-2022 走看看