note : Web browser
发布日期:2021-06-30 22:04:06 浏览次数:2 分类:技术文章

本文共 7967 字,大约阅读时间需要 26 分钟。

用默认浏览器打开url

BOOL OpenUrlOnDefaultBrowser(const WCHAR * pcUrl)    {        HINSTANCE       hRc = S_OK;        std::wstring    strParam = L"";        strParam = ns_base::StringFormatV(L"url.dll,FileProtocolHandler %s", pcUrl);        hRc = ShellExecuteW(            NULL,             L"open",             L"rundll32.exe",            strParam.c_str(),             NULL,             SW_SHOWNORMAL);        return ((int)hRc > 32);    }

ExecuteUrl

#include 
#include
#include
#include
/// 按照给定的URL, 开一个浏览器窗口BOOL ExecuteUrl(WCHAR * pcUrl);int main( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ){ ExecuteUrl(L"http://my.csdn.net/"); return 0; }BOOL ExecuteUrl(WCHAR * pcUrl){ HRESULT hr = S_FALSE; IWebBrowser2 * pBrowser = NULL; BSTR bstrURL = NULL; VARIANT vEmpty; if (NULL == pcUrl) return FALSE; if (FAILED(OleInitialize(NULL))) return FALSE; CoCreateInstance( CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pBrowser); if (NULL == pBrowser) return FALSE; VariantInit(&vEmpty); bstrURL = SysAllocString(pcUrl); hr = pBrowser->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty); if (SUCCEEDED(hr)) { /// 只能是 VARIANT_TRUE, 填 VARIANT_FALSE 没效果 hr = pBrowser->put_Visible(VARIANT_TRUE); } else pBrowser->Quit(); SysFreeString(bstrURL); pBrowser->Release(); OleUninitialize(); return TRUE;}

遍历修改网页UI元素-文本

BOOL CWebPageAutoFill::fnWebPageAutoFill(){    /// 要填写元素都成功,才算成功    BOOL    bRc_MailBoxNamePrefix = FALSE;    BOOL    bRc_MailBoxNamePostfix = FALSE;    BOOL    bRc_MailBoxPwd = FALSE;    BOOL    bRc_MailBoxVerifyPwd = FALSE;    BOOL    bOK_Elem = FALSE;    BOOL    bOK_InputElem = FALSE;    long    lIndex = 0;    long    lLen = 0;    HRESULT hr = E_FAIL;    BSTR    bstrTagName = NULL;    BSTR    bstrClassName = NULL;    BSTR    bstrType = NULL;    BSTR    bstrName = NULL;    IDispatch *                 pDispatchHtmlDoc = NULL;    IDispatch*                  pElemDispatch = NULL;    IHTMLDocument2 *            pHtmlDoc = NULL;    IHTMLElementCollection *    pColl = NULL;    IHTMLElement *              pElem = NULL;    IHTMLInputElement *         pInputElem = NULL;    if (NULL == m_pWebBrowser)        goto _fnWebPageAutoFill_END;    // Retrieve the document object.    hr = m_pWebBrowser->get_Document(&pDispatchHtmlDoc);    if (FAILED(hr) || (NULL == pDispatchHtmlDoc))        goto _fnWebPageAutoFill_END;    hr = pDispatchHtmlDoc->QueryInterface(        IID_IHTMLDocument2,        (void**)&pHtmlDoc);    if (FAILED(hr) || (NULL == pHtmlDoc))        goto _fnWebPageAutoFill_END;    hr = pHtmlDoc->get_all (&pColl);    if (FAILED(hr) || (NULL == pColl))        goto _fnWebPageAutoFill_END;    // Obtained the Anchor Collection...    pColl->get_length (&lLen);    for (lIndex = 0; lIndex < lLen; lIndex++)    {        FreeBSTR(bstrTagName);        FreeBSTR(bstrClassName);        FreeBSTR(bstrType);        FreeBSTR(bstrName);        hr = pColl->item(            CComVariant(lIndex),             CComVariant(lIndex),             &pElemDispatch);        if (FAILED(hr) || (NULL == pElemDispatch))            goto _fnWebPageAutoFill_END;        hr = pElemDispatch->QueryInterface(            IID_IHTMLElement,            (void**)&pElem);        bOK_Elem = SUCCEEDED(hr);        hr = pElemDispatch->QueryInterface(            IID_IHTMLInputElement,             (void**)&pInputElem);        bOK_InputElem = SUCCEEDED(hr);        /// bBOK_strValue 是 FALSE, 因为文本没有值, 需要填充文本内容        /// 即使取COM元素成功, 得到的COM对象也有可能是空的        /// e.g. 取内容为空的文本输入框内的内容, 那个BSTR就是空的        if (bOK_Elem             && (NULL != pElem)            && bOK_InputElem            && (NULL != pInputElem))        {            hr = AutoFill_GetElement(pElem, bstrTagName, bstrClassName);            if (FAILED(hr))                continue;            hr = AutoFill_GetInputElement(pInputElem, bstrType, bstrName);            if FAILED(hr)                continue;            hr = AutoFill_MailBoxNamePerfix(                pInputElem,                 bstrTagName,                 bstrClassName,                 bstrType,                 bstrName);            if (SUCCEEDED(hr))            {                bRc_MailBoxNamePrefix = TRUE;                continue;            }            hr = AutoFill_MailBoxNamePostfix(                pInputElem,                 bstrTagName,                 bstrClassName,                 bstrType,                 bstrName);            if (SUCCEEDED(hr))            {                bRc_MailBoxNamePostfix = TRUE;                continue;            }            hr = AutoFill_MailBoxPwd(                pInputElem,                 bstrTagName,                 bstrClassName,                 bstrType,                 bstrName);            if (SUCCEEDED(hr))            {                bRc_MailBoxPwd = TRUE;                continue;            }            hr =  AutoFill_MailBoxVerifyPwd(                pInputElem,                 bstrTagName,                 bstrClassName,                 bstrType,                 bstrName);            if (SUCCEEDED(hr))            {                bRc_MailBoxVerifyPwd = TRUE;                break; ///< Web页面元素都填完了,跳出循环!            }        }    }_fnWebPageAutoFill_END:    FreeBSTR(bstrTagName);    FreeBSTR(bstrClassName);    FreeBSTR(bstrType);    FreeBSTR(bstrName);    if (NULL != pInputElem)        pInputElem->Release();    if (NULL != pElem)        pElem->Release();    if (NULL != pElemDispatch)        pElemDispatch->Release();    if (NULL != pColl)        pColl->Release();    if (NULL != pHtmlDoc)        pHtmlDoc->Release();    if (NULL != pDispatchHtmlDoc)        pDispatchHtmlDoc->Release();    /// 元素都填写成功了, 才算成功    return (bRc_MailBoxNamePrefix        && bRc_MailBoxNamePostfix        && bRc_MailBoxPwd        && bRc_MailBoxVerifyPwd);}

取网页元素值-文本

HRESULT CWebPageAutoFill::AutoFill_GetElement(    IHTMLElement * pElem,    BSTR & bstrTagName,    BSTR & bstrClassName){    HRESULT hr = E_FAIL;    bstrTagName = NULL;    bstrClassName = NULL;    if (NULL != pElem)    {        hr = pElem->get_tagName(&bstrTagName);        if (FAILED(hr) || (NULL == bstrTagName))            return E_FAIL;        hr = pElem->get_className(&bstrClassName);        if (FAILED(hr) || (NULL == bstrClassName))            return E_FAIL;    }    return S_OK;}HRESULT CWebPageAutoFill::AutoFill_GetInputElement(    IHTMLInputElement * pInputElem,    BSTR & bstrType,    BSTR & bstrName){    HRESULT hr = E_FAIL;    bstrType = NULL;    bstrName = NULL;    if (NULL != pInputElem)    {        hr = pInputElem->get_type(&bstrType);        if (FAILED(hr) || (NULL == bstrType))            return E_FAIL;        hr = pInputElem->get_name(&bstrName);        if (FAILED(hr) || (NULL == bstrName))            return E_FAIL;    }    return S_OK;}

元素值的比较和修改-文本

HRESULT CWebPageAutoFill::AutoFill_MailBoxNamePerfix(    IHTMLInputElement * pInputElem,    BSTR & bstrTagName,    BSTR & bstrClassName,    BSTR & bstrType,    BSTR & bstrName){    BSTR            bstrValue = NULL;    std::wstring    strMailBoxName;    std::wstring    strMailBoxPwd;    if ((NULL == pInputElem)        || (NULL == bstrTagName)        || (NULL == bstrClassName)        || (NULL == bstrType)        || (NULL == bstrName))    {        return E_FAIL;    }    /// 寻找邮箱名称    ///     if ((0 == _tcsicmp(bstrTagName, L"input"))        && (0 == _tcsicmp(bstrClassName, L"inputStyle"))        && (0 == _tcsicmp(bstrType, L"text"))        && (0 == _tcsicmp(bstrName, L"email")))    {        /// 得到Web页面填充参数        GetParam_MailBoxReg(strMailBoxName, strMailBoxPwd);        /// 设置邮箱名称        bstrValue = SysAllocString(strMailBoxName.c_str());         pInputElem->put_value(bstrValue);        SysFreeString(bstrValue);        return S_OK;    }    return E_FAIL;}

转载地址:https://lostspeed.blog.csdn.net/article/details/12690143 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:note : FAILED宏 和 SUCCEEDED宏 的使用细节
下一篇:note : calculate opcode address

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月23日 09时17分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Hourglass Network 沙漏网络 (pose estimation姿态估计) 2019-04-30
OpenCV实战(二)——答题卡识别判卷 2019-04-30
目标检测神经网络的发展历程(52 个目标检测模型) 2019-04-30
Boundary loss 损失函数 2019-04-30
神经网络调参实战(一)—— 训练更多次数 & tensorboard & finetune 2019-04-30
tensorflow使用tensorboard进行可视化 2019-04-30
神经网络调参实战(二)—— activation & initializer & optimizer 2019-04-30
凸优化 convex optimization 2019-04-30
数据库索引 & 为什么要对数据库建立索引 / 数据库建立索引为什么会加快查询速度 2019-04-30
IEEE与APA引用格式 2019-04-30
research gap 2019-04-30
pytorch训练cifar10数据集查看各个种类图片的准确率 2019-04-30
Python鼠标点击图片,获取点击点的像素坐标 2019-04-30
路径规划(一) —— 环境描述(Grid Map & Feature Map) & 全局路径规划(最优路径规划(Dijkstra&A*star) & 概率路径规划(PRM&RRT)) 2019-04-30
神经网络调参实战(四)—— 加深网络层次 & 批归一化 batch normalization 2019-04-30
数据挖掘与数据分析(三)—— 探索性数据分析EDA(多因子与复合分析) & 可视化(1)—— 假设检验(μ&卡方检验&方差检验(F检验))&相关系数(皮尔逊&斯皮尔曼) 2019-04-30
RRT算法(快速拓展随机树)的Python实现 2019-04-30
路径规划(二) —— 轨迹优化(样条法) & 局部规划(人工势能场法) & 智能路径规划(生物启发(蚁群&RVO) & 强化学习) 2021-07-03
强化学习(四) —— Actor-Critic演员评论家 & code 2021-07-03
RESTful API 2019-04-30