Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)

Tensorboard 无法启动---Fatal error in launcher: Unable to create process using.......tensorboard.exe“ 使用Tensorboard时,启动不了,报下图所示的错误: Fatal error in launcher: Unable to create process using.......tensorboard.exe" 阅读详情

使用MSHTML 对 Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)

以前的代码,使用ATL会更整洁

 

//  放缩抓图

void CPageCaptureView::GetZoomPageDC()
{
    LONG lWidth = WINDOW_WIDTH;
    LONG lHeight = WINDOW_HEIGHT;
    BOOL bMargin = TRUE;
    IOleWindow *InterfacePtr = NULL;
    IHTMLDocument2* pDoc = NULL;
    IHTMLElement* pBodyElem = NULL;
    IHTMLBodyElement* pBody = NULL;
    IHTMLElement2* pBodyElement2=NULL;
    IHTMLStyle* pStyle = NULL;
    IHTMLStyle3 *pStyle3=NULL;
    LPDISPATCH pDisp = NULL;
    IOleObject * pObj = NULL;
    HRESULT hr = S_OK;


    pDisp = GetHtmlDocument();
    ASSERT(pDisp);
    if (pDisp)
    {
        hr = pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
        if (SUCCEEDED(hr)&&pDoc)
        {
            hr = pDoc->get_body(&pBodyElem);
            if (SUCCEEDED(hr)&&pBodyElem)
            {
                // hide 3D border
                hr =pBodyElem->get_style(&pStyle);
                if (SUCCEEDED(hr)&&pStyle)
                {
                    pStyle->put_borderStyle(CComBSTR("none"));
                    hr = pStyle->QueryInterface(IID_IHTMLStyle3,(void**)&pStyle3);
                    if (SUCCEEDED(hr&&pStyle3))
                    {
                        CString str(ZOOM);
                        BSTR bStr = str.AllocSysString();
                        VARIANT var;
                        var.vt = VT_BSTR;
                        var.bstrVal= bStr;
                        pStyle3->put_zoom(var);   
                        if (bStr)
                        {
                            SysFreeString(bStr);
                        }
                        pStyle3->Release();
                    }
                    pStyle->Release();
                }   
                // hide scroll bars
                hr = pBodyElem->QueryInterface(IID_IHTMLBodyElement, (void**)&pBody);
                if (SUCCEEDED(hr)&&pBody)
                {
                    pBody->put_scroll(CComBSTR("no"));
                    pBody->Release();
                }
                // get dimension and resize
                hr = pBodyElem->QueryInterface(IID_IHTMLElement2, (void**)&pBodyElement2);
                if (SUCCEEDED(hr)&&pBodyElement2)
                {
                    long iScrollWidth = 0,iScrollHeight = 0,
                        iClientWidth = 0,iClientHeight = 0;
                    pBodyElement2->get_scrollWidth(&iScrollWidth);
                    pBodyElement2->get_scrollHeight(&iScrollHeight);
                    pBodyElement2->get_clientWidth(&iClientWidth);
                    pBodyElement2->get_clientHeight(&iClientHeight);
                    CString strZoom(ZOOM);
                    strZoom.Replace("%","");
                    float fZoom = atof(strZoom)/100.0;
                    if (iScrollWidth>iClientWidth)
                    {
                        lWidth =  fZoom * iScrollWidth;       
                        bMargin = FALSE;
                    }
                    if (iScrollHeight>iClientHeight)
                    {
                        lHeight = fZoom * iScrollHeight;
                    }
                    SetWindowPos(NULL,0,0,lWidth,lHeight,SWP_HIDEWINDOW); 
                    pBodyElement2->Release();
                }

                LONG lBmpWidth = lWidth;
                LONG lBmpHeight = lHeight;
                LONG lMarginLeft = 50, lMarginRight = 50, lMarginTop  = 35, lMarginBottom  = 35;

                if (lBmpWidth > lBmpHeight*ASPECT_RADIO)
                {
                    lBmpHeight = lBmpWidth/ASPECT_RADIO;
                }
                else
                {
                    lBmpWidth = lBmpHeight*ASPECT_RADIO;
                }
                if (!bMargin)
                {
                    lMarginLeft = lMarginRight = lMarginTop = lMarginBottom = 0;
                    lBmpWidth = lWidth;
                    lBmpHeight = lHeight;
                }
                LONG lPageWidth = lBmpWidth + lMarginLeft + lMarginRight;
                LONG lPageHeight = lBmpHeight + lMarginTop + lMarginBottom;

                // resize ole
                hr = m_pBrowserApp->QueryInterface(IID_IOleObject,(void**)&pObj);
                if (SUCCEEDED(hr)&&pObj)
                {
                    SIZEL size ={lWidth,lHeight};
                    pObj->SetExtent(DVASPECT_CONTENT,&size);
                    pObj->Release();
                }

                //Draw
                HDC hScreenDC = ::GetDC(NULL);
                HDC hDrawDC = CreateCompatibleDC(NULL);
//                 SIZE PrevExt1, PrevExt2;
//                 SetMapMode(hImageDC, MM_HIENGLISH);
//                 GetWindowExtEx(hImageDC, &PrevExt1);
//                 GetViewportExtEx(hImageDC, &PrevExt2);
//                
//                 PrevExt1.cx *= 0.6;
//                 PrevExt1.cy *= 0.6;
//                 SetMapMode(hImageDC, MM_ISOTROPIC);
//                 SetWindowExtEx(hImageDC, PrevExt1.cx, PrevExt1.cy, NULL);    //600DPI
//                 SetViewportOrgEx(hImageDC, 0, 0, NULL);
//                 SetViewportExtEx(hImageDC, PrevExt2.cx, -PrevExt2.cy, NULL);

                HBITMAP hDrawBmp = NULL;
                hDrawBmp = CreateCompatibleBitmap(hScreenDC, lWidth,
                    lHeight);
                if(!hDrawBmp)
                     return;
                HGDIOBJ hOld = SelectObject(hDrawDC, hDrawBmp);
                RECT rt = {0,0,lWidth,lHeight};
                HBRUSH hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
                FillRect(hDrawDC,&rt,hBrush);
                RECT rcSource={0,0,lWidth,lHeight};           
                OleDraw(m_pBrowserApp,DVASPECT_CONTENT,hDrawDC,&rcSource);

                HANDLE hDibNew = pDib->CreateDib(lPageWidth,lPageHeight,NULL, 24);
                if (pDib->hdib)
                {
                    GlobalFree(pDib->hdib);
                    pDib->hdib = NULL;
                }
                if (hDibNew)
                {
                    pDib->CreateDibFromHandle(hDibNew);
                }
                CDrawDib dib;
                HANDLE handle = NULL;
                handle = dib.DibFromBitmap(hDrawBmp,BI_RGB,24,NULL);

                if (handle&&pDib)
                {
                    pDib->BitBlts(lMarginLeft+(lBmpWidth-lWidth)/2.0,lMarginTop+(lBmpHeight-lHeight)/2.0,
                        handle);
                    GlobalFree(handle);
                }         
                ::DeleteObject(hBrush);
                ::DeleteObject(hDrawBmp);
                ::ReleaseDC(0, hScreenDC);
                ::DeleteDC(hDrawDC);
                pBodyElem->Release();
            }
            pDoc->Release();
        }
        pDisp->Release();
    }
    g_eventComplete->SetEvent();
}

 

// 改变Font

HRESULT CPageCaptureView::ChangeFontSize(float nZoom)
{
    CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> pDoc2;
    CComQIPtr<IHTMLElementCollection,&IID_IHTMLElementCollection>  pCollection;
    //CComQIPtr<IHTMLDocument3,&IID_IHTMLDocument2> pDoc3;
    CComQIPtr<IHTMLElement,&IID_IHTMLElement> pBody;
    CComQIPtr<IHTMLElement2,&IID_IHTMLElement2> pBody2;
    LPDISPATCH pDisp = NULL;
    HRESULT  hr = S_OK;
    pDisp = GetHtmlDocument();
    if(!pDisp)
    {
        return E_FAIL;
    }
   
    //    hr = pDoc->QueryInterface(IID_IHTMLDocument3,(void**)&pDoc3);
    hr = pDisp->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc2);
   
    if (hr || (!pDoc2))
    {
        return E_FAIL;
    }
    hr = pDoc2->get_body(&pBody);//getElementsByTagName(L"SPAN",&pCollection);
    if (hr || (!pBody))
    {
        return E_FAIL;
    }
    pBody->QueryInterface(IID_IHTMLElement2,(void**)&pBody2);
    if (hr || (!pBody2))
    {
        return E_FAIL;
    }
    pBody2->getElementsByTagName(L"SPAN",&pCollection);;
    if (hr || (!pCollection))
    {
        return E_FAIL;
    }
   
    long len;
    VARIANT varIndex;
    VARIANT var2;
    varIndex.vt=VT_I4;
    VariantInit( &var2 );
    pCollection->get_length(&len);
    CComVariant var;
    for(long i=0; i<len; i++)
    {
        CComQIPtr<IHTMLStyle,&IID_IHTMLStyle> pStyle;
        varIndex.lVal=i;
        CComPtr<IDispatch> pDisp;
        pCollection->item(varIndex,var2, &pDisp);
        if (hr || (!pDisp))
        {
            return E_FAIL;
        }
        CComQIPtr<IHTMLElement,&IID_IHTMLElement>  pElement(pDisp);
       
        if ((!pElement))
        {
            return E_FAIL;
        }
        hr = pElement->get_style(&pStyle);
        if (hr || (!pStyle))
        {
            continue;
        }
        hr = pStyle->get_fontSize(&var);
        if(var.bstrVal != NULL && var.vt == VT_BSTR)
        {
            CString strSize(var.bstrVal);
            strSize.TrimLeft();
            strSize.TrimRight();
            if (strSize.Find("pt")!=-1)
            {
                CString str =strSize.Left(strSize.GetLength()-2);
                int n = atoi(str);
                str.Format("%dpt",(int)(n*nZoom));
                var.bstrVal = str.AllocSysString();
                pStyle->put_fontSize(var);
            }
           
        }
    }
    return hr;
}

包含mshtml, SHDocVw, AxSHDocVw的引用 在vs2005中,这样引进mshtml  在代码开头加上using mshtml;  SHDocVw的引用,网上有篇文章这么做的:SHDocVw一定要在下面这个路径找:(C:/Program Files/Microsoft Visual Studio 8/Application/PreEmptive Solutions/Dotfuscator Community E 阅读详情

相关推荐

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 411

DHTML Process Using MSHTML

<br />使用MSHTML 对 Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)<br />以前的代码,使用ATL会更整洁<br /> <br />//  放缩抓图<br />void CPageCaptureView::GetZoomPageDC()<br /> {<br />     LONG lWidth = WINDOW_WIDTH;<br />     LONG lHeight = WINDOW_HEIGHT;<br />     BOOL bMargin

++∞ 1401

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码) 文章目录扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)理论讲解KF和EKF模型对比雅可比矩阵计算计算实例应用实例线性模型CV模型:CA模型非线性模型CTRV模型:CTRV实例(python)small demo抛物线demo飞机高度demoC++实例参考文献 我们上篇提到的卡尔曼滤波是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布

O_MMMM_O的博客 10万+

html界面缩放

【代码】html界面释放。

qq_34631220的博客 3971

Linux中断子系统(二)—— 通用框架处理

1、数据结构分析 (1)中断描述符结构structirq_desc: 1)打开CONFIG_SPARSE_IRQ宏(中断编号不连续),中断描述符以radix- tree来组织,用户在初始化时进行动态分配,然后再插入radix-tree中; 2)关闭CONFIG_SPARSE_IRQ宏(中断编号连续),中断描述符以数组的 形式组织,并且已经分配好; 3)不管哪种形式,最终都可以通过linuxirq号来找到对应的中断描述符; (2)stru...

weixin_38428439的博客 4873

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2180

IE 解析 Web Page DOM结构 (一)

IE 浏览器利用DOM结构管理和运用网页的数据的。IE 浏览器通过一个容器IWebBrowser2/IHTMLWindow2来下载一个网页,而众所周知网页是由互相嵌套的许多frames构成的,网页中每一个frame都是IHTMLWindows2。所以,我们的首要任务就是取得IHTMLDocument2接口,此接口代表着你所下载的网页。然后,就可以用递归探索每一个frame和frame中的内容。

LEE的专栏 2098

如何让 RTX 5090 开启 PCIE P2P 以加速多卡通信

RTX 5090 基于新的 Blackwell 架构。NVIDIA 出于对某些主板兼容性(如 IOMMU、Resizable BAR 策略)的保守考虑,**屏蔽了 5090 的 BAR1 P2P 功能**。 我们需要通过 Patch 驱动源码,强制开启这一隐藏功能。 开启 P2P 后,PyTorch 的集合通信算子(Multi-GPU 训练的核心)延迟显著降低,**All-Reduce 甚至降低了 60% 以上**。

Hi20240217的博客 1741

浏览器实现滚动截屏

工作日志:实现浏览器滚动截屏,并且是指定的iframe在跨域的情况下。 首先拿到这个需求的时候,想了一下,实现滚动截屏并不难,难的具体的情况如下, 在IE浏览器的情况下,在前端实现,并且iframe是跨域的,还要自动上传服务器,万事开头难,尝试了HTML2canvas之后发现,它并不能解决跨域问题,而且不同浏览器其图片会有差异,并且最重要的一点,svg图在IE浏览器中截图是空白。 当然,遇到需求,一定要解决,研究了IE设计接口,终于实现了,整体的思路是,拿到浏览器的接口对象,使用递归遍历,找到指定的ifra

qq_45469225的博客 6071

一起玩转GNU Radio:调制解调大合集

本文汇总了GNU Radio中多种常见的调制解调方法及其参考文献链接,便于今后查看,供大家参考!

无线通信实验室 1万+

第 13 章:Spring AI Alibaba MCP 与 Nacos3 — 企业级MCP服务

理解Spring AI Alibaba 框架下的MCP服务与Nacos注册中心整合的必要性,学会Spring AI Alibaba-基于Nacos的MCP实现方法

paopao_wu的专栏 788

如何让c++调用网页中的jsp函数

c++调用jsp一般通过在窗口中内嵌一个CAxWindow来实现的 在CAxWindow中通过调用CreateControlEx来初始化话IWebBrowser2接口 如: CComPtr punknown; HRESULT hr = CreateControlEx(L"Shell.Explorer", NULL, NULL, &punknown); CComQIPtr spWebB

neilhuang的专栏 1615

【经验&技巧】IBIS AMI模型眼图仿真问题探讨

在ADS的仿真环境中,不论发送和接收的AMI模型是否为true或者false,都可以将通道仿真设置为统计模式,但是,如果有一方的Init函数为false,在统计模式下,处于false状态的模型将不能执行其自带的后处理功能,如下图所示,左边的统计模式和右边的逐比特模式眼图存在明显的差异,原因在于,接收端的init函数为false导致在统计模式中不能对眼图进行DFE处理,换言之,此时统计模式下的眼图就是未经任何处理的“生图”。

一只豌豆象的博客 1767

html拼接颜色,Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)

使用MSHTML 对 Html 进行DOM 操作(放缩,颜色...),HTML抓图(放缩,滚动,拼接)以前的代码,使用ATL会更整洁// 放缩抓图void CPageCaptureView::GetZoomPageDC(){LONG lWidth = WINDOW_WIDTH;LONG lHeight = WINDOW_HEIGHT;BOOL bMargin = TRUE;IOleWindow ...

weixin_33700809的博客 378

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

利用 SHDocVw::IShellWindowsPtr m_spSHWinds 遍历所有IE浏览器,得到里面的所有元素

<br />void   OnLogin()   <br />{ <br />          _variant_t   v; <br />          HRESULT   hr; <br />          VARIANT   id,   index; <br />          CComPtr <IDispatch>   spDispatch; <br />          CComQIPtr <IHTMLDocument2,   &IID_IHTMLDocument2>   pDoc

cyforce的专栏 2770

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

从一个窗口句柄获取IWebBrowser2和IHTMLDocument2接口

从一个窗口句柄获取IWebBrowser2和IHTMLDocument2接口更新日期:2010-1-10测试环境:VC6.0+WinXP━━━━━━━━━━━━━━━━━━━━━━━━将以下代码张贴到对话框程序,运行即可。调用之前请确保打开IE浏览器愿顺利!阿弥陀佛!/****************************************************************************从一个窗口句柄获取IHTMLDocument2接口使用完后要调用Release如果找不到接

jacky_qiu的专栏 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WPF WebBrowser放大缩小问题

WebBrowser放大缩小可用下面几句话实现:  mshtml.IHTMLDocument2 doc = myBrowser.Document as mshtml.IHTMLDocument2; doc.parentWindow.execScript("document.body.style.zoom=" + Zoom.ToString() + ";");   但实现效果并不太好,网页内容...

Delphi编程 2222

webbrowser截图

PBITMAPINFO CreateBitmapInfoStruct(HWND hwnd, HBITMAP hBmp) { BITMAP bmp; PBITMAPINFO pbmi = NULL; WORD cClrBits; // Retrieve the bitmap color format, width, and height. if (!GetObject(hBmp,

sx5486510的专栏 822

将WebBrowser中的页面截屏保存为图片

先说一点题外话,将WEB页面渲染成图片有比较好的开源工具,如CutyCapt ,它使用WebKit渲染,兼容多种操作系统,适合于在服务器上作为后台服务运行。 不过,这里说到的是对WebBrowser内的页面进行截图并保存. WebBrowser本质上就是IE内核的浏览器。使用mshtml来渲染页面的话,依赖GDI,所以不可能作为后台服务运行。 获取WebBrowser截屏的方法很多, Print...

tempsitegoogle 470

关于引用mshtml的问题

    今天看了个验证码识别的代码,其中引用到了mshtml.dll,找了半天原来就是microsoft.mshtml.dll。查这个dll的时候还发现了好几篇关于这个dll添加问题的文章。顺便看了下,原来这个dll有三个,添加引用时要注意了。     第一篇文章:     1.添加引用的问题     一般在开发环境下会在三个地方存有microsoft.mshtml.dll文件。所以在添加引...

weixin_34220834的博客 344

C#利用mshtml的COM接口,将WebBrowser中的验证码图片读入内存

在做发贴机,灌水机,自动登录等情况时,如果遇到图片验证码的情形,就需要做验证码分析了,这时将验证码图片读入内存或保存在本地,就是必须的了 当然,使用WebClient直接download验证码图片回来,是可以实现的,但是这样的话,实际上是请求了2次验证码,而直接从webbrowser中,将验证码提取出来的话,就可以免去一次网络通信,而且,也可以应付一些网站的每次随验证码动态返回的其他附属验证...

真有意思 269

Fatal error in launcher: Unable to create process using ‘“D:\FIles\anaconda\envs\pytorch\python.exe“

应该是系统内有多个python,tensorboard版本和所使用的python版本不匹配造成的(大抵是因为环境变量中配置的python的问题,更改环境变量太过复杂,可以用以下办法应急)

maktoub的博客 1802

在C#中使用MSHTML的高级支持接口(引自http://www.vckbase.com/document/viewdoc.asp?id=1018)

[ 翻译文档 本文适合高级读者 已阅读2837次 ]在C#中使用MSHTML的高级支持接口原著:Nikhil Dabas翻译:Abbey原文出处 Using MSHTML Advanced Hosting Interfaces, CodeProject下载源代码:IDocHostUIHandler(79KB) 摘要  本文向你演示了如何使用IDocHostU

ComingtoExpert的专栏 2078

虚拟环境迁移后报错tensorboard -Fatal error in launcher: Unable to create process using ...

conda迁移虚拟环境后,tensorboard报错。

weixin_43352642的博客 638

Fatal error in launcher: Unable to create process using

Fatal error in launcher: Unable to create process using 前几天重装系统,忘记备份文档文件,很多设置都丢失了。今天学习tensorboard可视化时在cmd中运行tensorboard时出现 这是忘记设置环境变量了,找到“桌面-此电脑-右键-属性-高级系统设置-环境变量” 点击“编辑” 新建,找到自己安装python文件夹中的Scripts文...

weixin_43479834的博客 589
上一篇: CComPtr对象作为参数进行 1.值传递 2.引用传递 3.做为返回值的注意事项
下一篇: 最近在SDK下使用WebBrowser遇到了个问题
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值