最近在SDK下使用WebBrowser遇到了个问题

Sentry-JS-SDK-Browser 官方示例最佳实践 系列 SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(Unified API篇) 系列 Snuba:Sentry 新的搜索基础设施(... 阅读详情

最近在SDK下使用WebBrowser遇到了个问题,就是VK_TAB加速健,经后来分析,其实Ctrl+C等操作也是不行的,只不过已经事先在框架中执行了ExecWeb操作。

一开始,我还以为是MFC的CHtmlView对WebBrowser的包装过程中也象我处理Ctrl+C处理好了。因此,从早上到今晚的12点,我都试图使用这种方法来解决。就是在DocumetComplete后得到所有的Input link和textarea以及frame,然后实现SetFocusToNext和SetFocusToPrev.等函数。

//////////////////////////
BOOL CHtmlView::SetFocusToNext(LPDISPATCH pHtmlDocument)
{
BOOL bFocus=FALSE;
BOOL bFassCurFocus=FALSE;
IHTMLDocument2 *pDoc=NULL;
pHtmlDocument->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
if(pDoc)
{
   IHTMLElementCollection* pColl = NULL;
   //得到所有元素
   if(SUCCEEDED(pDoc->get_all(&pColl)))
   {
    long   nNumElements;  
    if(SUCCEEDED(pColl->get_length(&nNumElements)))
    {
     if(nNumElements)
     {
      IHTMLElement* pActiveElement=NULL;
      if(SUCCEEDED(pDoc->get_activeElement(&pActiveElement)))
      {
       IHTMLFrameBase2* pFrame=NULL;
       if(SUCCEEDED(pActiveElement->QueryInterface(IID_IHTMLFrameBase2,(void**)&pFrame)))
       {
        if(pFrame)
        {
         IHTMLWindow2 *pWin;
         if(SUCCEEDED(pFrame->get_contentWindow(&pWin)))
         {
          if(pWin)
          {
           IHTMLDocument2 *pDoc2=NULL;
           if(SUCCEEDED(pWin->get_document(&pDoc2)))
           {
            if(pDoc2)
            {
             SetFocusToFirst(pDoc2);
             pDoc2->Release();
            }
           }
           pWin->Release();
          }
         }
         pFrame->Release();
        }
       }
       //这里已获得activeElement http://www.wzszf.com/
       long lActSrcIndex;
       pActiveElement->get_sourceIndex(&lActSrcIndex);
       for(long i = 0;i< nNumElements;i++)  
       {
        VARIANT varName;
        varName.vt=VT_UINT;
        varName.lVal   =   i;
        VARIANT varIndex;
        LPDISPATCH lpElementDisp=NULL;
        pColl->item(varName,varIndex,&lpElementDisp);
        {
         if(bFassCurFocus)//过了焦点,出现可焦则焦
         {
          IHTMLElement2* pElement2=NULL;   
          if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLElement2,(void**)&pElement2)))
          {
           IHTMLInputElement2*pInput=NULL;
           IHTMLAnchorElement2* pAnchor=NULL;
           IHTMLTextAreaElement* pTextArea=NULL;
           IHTMLFrameBase2* pFrame=NULL;
           if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLInputElement2,(void**)&pInput))
            ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLAnchorElement2,(void**)&pAnchor))
            ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextArea))
            ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLFrameBase2,(void**)&pFrame)))
           {
            if(pInput||pAnchor||pTextArea||pFrame)
            {

             if(SUCCEEDED(pElement2->focus()))
              bFocus=TRUE;
             if(pInput)
              pInput->Release();
             if(pAnchor)
              pAnchor->Release();
             if(pTextArea)
              pTextArea->Release();
             if(pFrame&&bFocus)
              pFrame->Release();
             if(bFocus)
             {
              pElement2->Release();
              break;
             }
            }
           }
           pElement2->Release();
          }
         }
         else
         {
          IHTMLElement* pElement=NULL;   
          if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLElement,(void**)&pElement)))
          {
           long lCurSrcIndex;
           pElement->get_sourceIndex(&lCurSrcIndex);
           if(lCurSrcIndex==lActSrcIndex)//找到当前活动元素
           {
            bFassCurFocus=TRUE;
           }
           pElement->Release();
          }
         }
        }
       }//for
       pActiveElement->Release();
      }
     }
    }
    pColl->Release();
   }
   pDoc->Release();
}
return bFocus;
}
//////////////////////////
BOOL CHtmlView::SetFocusToPrev()
{
BOOL bFocus=FALSE;
BOOL bFassCurFocus=FALSE;
LPDISPATCH lpDisp=NULL;
m_pHost->m_pWebBrowser->get_Document(&lpDisp);
IHTMLDocument2 *pDoc=NULL;
lpDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
if(pDoc)
{
   IHTMLElementCollection* pColl = NULL;
   //得到所有元素
   if(SUCCEEDED(pDoc->get_all(&pColl)))
   {
    long   nNumElements;  
    if(SUCCEEDED(pColl->get_length(&nNumElements)))
    {
     if(nNumElements)
     {
      IHTMLElement* pActiveElement=NULL;
      if(SUCCEEDED(pDoc->get_activeElement(&pActiveElement)))
      {
       //这里已获得activeElement
       long lActSrcIndex;
       pActiveElement->get_sourceIndex(&lActSrcIndex);
       for(long i=nNumElements-1;i>=0;i--)  
       {
        VARIANT varName;
        varName.vt=VT_UINT;
        varName.lVal   =   i;
        VARIANT varIndex;
        LPDISPATCH lpElementDisp=NULL;
        pColl->item(varName,varIndex,&lpElementDisp);
        {
         if(bFassCurFocus)//过了焦点,出现可焦则焦
         {
          IHTMLElement2* pElement2=NULL;   
          if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLElement2,(void**)&pElement2)))
          {
           IHTMLInputElement2*pInput=NULL;
           IHTMLAnchorElement2* pAnchor=NULL;
           IHTMLTextAreaElement* pTextArea=NULL;
           if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLInputElement2,(void**)&pInput))
            ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLAnchorElement2,(void**)&pAnchor))
            ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextArea)))
           {
            if(pInput||pAnchor||pTextArea)
            {

             if(SUCCEEDED(pElement2->focus()))
             {
              pElement2->Release();
              bFocus=TRUE;
              break;
             }
             if(pInput)
              pInput->Release();
             if(pAnchor)
              pAnchor->Release();
             if(pTextArea)
              pTextArea->Release();
            }
           }
           pElement2->Release();
          }
         }
         else
         {
          IHTMLElement* pElement=NULL;   
          if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLElement,(void**)&pElement)))
          {
           long lCurSrcIndex;
           pElement->get_sourceIndex(&lCurSrcIndex);
           if(lCurSrcIndex==lActSrcIndex)//找到当前活动元素
           {
            bFassCurFocus=TRUE;
           }
           pElement->Release();
          }
         }
        }
       }//for
       pActiveElement->Release();
      }
     }
    }
    pColl->Release();
   }
   else
    Alert("er");
   pDoc->Release();
}
lpDisp->Release();
return bFocus;
}
void CHtmlView::SetFocusToFirst(LPDISPATCH pHtmlDocument)
{
IHTMLDocument2 *pDoc=NULL;
pHtmlDocument->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
if(pDoc)
{
   IHTMLElementCollection* pColl = NULL;
   //得到所有元素
   if(SUCCEEDED(pDoc->get_all(&pColl)))
   {
    long   nNumElements;  
    if(SUCCEEDED(pColl->get_length(&nNumElements)))
    {
     if(nNumElements)
     {
      for(long i = 0;i< nNumElements;i++)  
      {
       VARIANT varName;
       varName.vt=VT_UINT;
       varName.lVal   =   i;
       VARIANT varIndex;
       LPDISPATCH lpElementDisp=NULL;
       pColl->item(varName,varIndex,&lpElementDisp);
       {

        IHTMLElement2* pElement2=NULL;   
        if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLElement2,(void**)&pElement2)))
        {
         IHTMLInputElement2*pInput=NULL;
         IHTMLAnchorElement2* pAnchor=NULL;
         IHTMLTextAreaElement* pTextArea=NULL;
         if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLInputElement2,(void**)&pInput))
          ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLAnchorElement2,(void**)&pAnchor))
          ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextArea)))
         {
          if(pInput||pAnchor||pTextArea)
          {

           if(SUCCEEDED(pElement2->focus()))
           {
            pElement2->Release();
            break;
           }
           if(pInput)
            pInput->Release();
           if(pAnchor)
            pAnchor->Release();
           if(pTextArea)
            pTextArea->Release();
          }
         }
         pElement2->Release();
        }
       }
      }
     }
    }
    pColl->Release();
   }
   pDoc->Release();
}
}
////////////////////////// http://www.wzszf.com/
void CHtmlView::SetFocusToLast()
{
   LPDISPATCH lpDisp=NULL;
m_pHost->m_pWebBrowser->get_Document(&lpDisp);
IHTMLDocument2 *pDoc=NULL;
lpDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
if(pDoc)
{
   IHTMLElementCollection* pColl = NULL;
   //得到所有元素
   if(SUCCEEDED(pDoc->get_all(&pColl)))
   {
    long   nNumElements;  
    if(SUCCEEDED(pColl->get_length(&nNumElements)))
    {
     if(nNumElements)
     {
      for(long i = nNumElements-1;i>=0;i--)  
      {
       VARIANT varName;
       varName.vt=VT_UINT;
       varName.lVal   =   i;
       VARIANT varIndex;
       LPDISPATCH lpElementDisp=NULL;
       pColl->item(varName,varIndex,&lpElementDisp);
       {

        IHTMLElement2* pElement2=NULL;   
        if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLElement2,(void**)&pElement2)))
        {
         IHTMLInputElement2*pInput=NULL;
         IHTMLAnchorElement2* pAnchor=NULL;
         IHTMLTextAreaElement* pTextArea=NULL;
         if(SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLInputElement2,(void**)&pInput))
          ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLAnchorElement2,(void**)&pAnchor))
          ||SUCCEEDED(lpElementDisp->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextArea)))
         {
          if(pInput||pAnchor||pTextArea)
          {

           if(SUCCEEDED(pElement2->focus()))
           {
            pElement2->Release();
            break;
           }
           if(pInput)
            pInput->Release();
           if(pAnchor)
            pAnchor->Release();
           if(pTextArea)
            pTextArea->Release();
          }
         }
         pElement2->Release();
        }
       }
      }
     }
    }
    pColl->Release();
   }
   pDoc->Release();
}
lpDisp->Release();
}

理论上这个方法可以解决,事实也接近解决,当然在遇到Frame时候我碰到了极大挑战。结果,我开始重新思考解决方案。

解决UE WebBrowser H.264黑屏:编译支持专利编解码器的CEF库 在Unreal Engine项目中集成网页功能时,开发者常遇到WebBrowser插件无法播放H.264视频的黑屏问题。这通常源于引擎内置的Chromium Embedded Framework(CEF)版本老旧且默认不包含专利编解码器。CEF作为将Chromium浏览器内核嵌入原生应用的核心技术,其编解码器支持直接影响网页媒体播放能力。通过从源码编译CEF并启用专有编解码器选项,可以彻底解决此兼容性问题,从而让UE应用能够无缝播放YouTube、B站等主流视频网站的内容。这一技术实践不仅提升了WebBro 阅读详情

相关推荐

基于云外归鸟源码的WebBrowser2支持库二次开发与易语言编译实践

在易语言生态中,WebBrowser2支持库凭借免依赖、加载快、接口齐全的特点,长期是网页自动化、数据采集与网页填表场景的经典选择。其底层基于IE内核的COM组件封装,通过连接点事件回调向易语言侧同步页面状态。然而,云外归鸟开源版因年代久远,在多框架DocumentComplete误触发、Cookie获取受限、执行JS返回值单一等关键环节存在明显短板。本文基于该开源工程进行深度二次开发,重构了事件监听与释放机制,新增取Cookie、执行JS取文本、自定义User-Agent等命令,并完整梳理了从源码到fne

weixin_33423874的博客 291

手把手教你使用 QingStor 对象存储

QingStor? 对象存储为用户提供可无限扩展的通用数据存储服务,具有安全可靠、简单易用、高性能、低成本等特点。 在大量公有云用户多样化的应用场景中,QingStor? 对象存储在性能(高并发)、可用性、稳定...

378

VB6操作PDF实战:打开、预览、生成与解析的完整指南

在信息化系统中,PDF作为一种跨平台文档格式,广泛应用于报表存档、单据打印与资料分发。对于仍运行着VB6技术栈的遗留系统,如何高效地实现PDF操作成为许多开发者的痛点。本文从Windows API调用原理出发,讲解ShellExecute启动外部阅读器、WebBrowser控件嵌入预览、AcroPDF组件控制翻页,以及借助命令行工具解析PDF元数据与文本内容等核心方法。同时覆盖虚拟打印机生成PDF、手写最小PDF文件等实用技巧,并针对中文路径、ActiveX兼容性、运行库注册等高频问题给出排查建议。通过合理

weixin_30086969的博客 206

使用C++实现SDK之WebBrowser容器

一.由来         我还记还得当自认为学习完了C++语法后, 兴致勃勃的打开MFC向导,开始所谓"MFC高级自动化编程"时, 我不由喊道: 这他妈的都是些什么乱七八糟的东西啊.诚然,MFC为了方便愚蠢的程序员,的确是让人瞬间高级编程, 可是愚蠢的我们还是会用CString strTest;写出(PWSTR)strTest.GetBuffer() 这种自作聪明的用法,结果就是整个程序好

norsd的专栏 3万+

C#浏览器开发实战:9款开源源码对比与内核选型指南

浏览器内核是网页渲染的引擎,决定了HTML、CSS和JavaScript的解析方式。C#作为桌面应用开发的主流语言,常通过WebBrowser、WebView2、CefSharp等控件嵌入浏览器能力,这些控件本质上是对内核的封装。理解内核差异是选型的前提:Trident兼容老旧系统,Blink代表现代HTML5标准,Gecko和WebKit各有特定场景。无论是开发内部工具、实现多标签管理,还是构建类Chrome界面,都可以从开源源码中获取可复用的代码模式。本文以9款C#浏览器源码为样本,从工程结构、事件绑定

weixin_31960565的博客 238

win32 sdk WebBrowser

一个纯Win32 SDK WebBrowser 实现的源码! 有EXE源码 DLL源码,国外的代码!相当经典!

win32 sdk下调用webbrowser控件

#include CComModule _Module;#include #include #pragma comment(lib,"atl")#pragma comment(lib,"User32.lib")LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){RECT rc;IWebBrowse

u011374519的专栏 498

如何在Jetson Nano上快速搭建Pytorch环境(含torchvision安装教程)

本文详细介绍了在Jetson Nano上快速搭建PyTorch环境的完整步骤,包括系统准备、PyTorch安装优化、torchvision编译安装及环境测试。通过本指南,开发者可以高效部署深度学习开发环境,充分利用Jetson Nano的GPU加速能力进行计算机视觉项目开发。

weixin_42628941的博客 340

使用C++实现SDK之WebBrowser容器 系列的一个补充. 关于GetHtmlDocumentX()

之前的文章 "http://blog.youkuaiyun.com/norsd/archive/2008/09/13/2921389.aspx" 实现了一个WebBrowser.   但是万物总不是完美的, 最近有网友问, GetHTMLDocumentX 系列函数的实现,是否需要Release.   当时我回答不需要. 我是这样考虑的:   WebBrowser 类只提供一个(系列)  IHtm

achellies's Blog 1313

LT9611EX芯片实战:如何用双端口MIPI转HDMI1.4打造高清播放器(附配置代码)

本文详细介绍了如何使用龙迅半导体的LT9611EX芯片实现双端口MIPI转HDMI1.4的高清播放器开发。内容涵盖芯片特性、硬件设计要点、寄存器配置技巧及完整代码实现,特别适合嵌入式视频处理应用,如机顶盒和便携式媒体播放器。

weixin_29256771的博客 322

CANOE DIVA 工程怎样在具体服务前增加前置条件

然后会在CANoe的Test Module视窗中发现一个跟系统条件相关的Test Module模块,在该模块中有生成跟系统条件相关的CAPL 脚本。这里需要根据你的实际项目进行更改,diva工程加载到canoe的工程的时候,会同步加入你创建的cdd文件,这里示例的ABS_ESP 就是你的cdd的ECU命名,后面就是具体的前置条件服务。4、配置完成后,测试用例就会如下图Trace窗口所示,在每一次10 02请求之前都会调用CAPL Function的PreconditionCheck函数中定义的脚本。

weixin_45940007的博客 1970

使用C++实现SDK之WebBrowser容器 系列的一个补充. 关于GetHtmlDocumentX()

之前的文章 "http://blog.youkuaiyun.com/norsd/archive/2008/09/13/2921389.aspx" 实现了一个WebBrowser. 但是万物总不是完美的, 最近有网友问, GetHTMLDocumentX 系列函数的实现,是否需要Release. 当时我回答不需要. 我是这样考虑的: WebBrowser 类只提供一个(系列)  IHtm

norsd的专栏 4065

MAX30102传感器实战:从寄存器配置到Arduino心率血氧监测

本文详细介绍了MAX30102传感器在Arduino平台上的实战应用,从寄存器配置到心率血氧监测的全过程。通过清晰的代码示例和实用技巧,帮助开发者快速实现脉搏血氧仪功能,包括I2C通信、FIFO数据处理及算法实现,适用于健康监测和可穿戴设备开发。

weixin_29182481的博客 511

告别WebBrowser!在WPF里用WebView2做个现代化浏览器(.NET 6 + Edge Chromium)

本文详细介绍了如何在WPF应用中从老旧的WebBrowser迁移到现代化的WebView2控件,基于.NET 6和Edge Chromium内核,提升浏览器功能的兼容性、性能和安全性。通过实战代码示例,展示了WebView2的初始化、导航控制、JavaScript互操作等核心功能,帮助开发者快速实现高效、现代的浏览器集成方案。

432

YOLOv11与3D点云检测融合技术深度解析:从2D检测到三维空间投影的完整实现

2D-3D融合目标检测技术研究 本文系统阐述了基于YOLOv11的2D-3D目标检测融合技术,重点分析了YOLOv11在融合系统中的定位优势及其架构设计。研究表明,2D图像与3D点云数据具有显著的互补特性:2D图像提供丰富语义信息,而3D点云则精确描述几何结构。 关键技术要点: YOLOv11通过GSConv平衡卷积和VoVGSCS特征融合模块,在保持实时性的同时提升了检测精度 系统采用模块化设计,包含坐标投影、点云分割、边界框拟合等核心组件 针对点云数据的非均匀分布特性,提出了多尺度特征增强和距离差异化检

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1129

Fiori Elements 表格之 Tree Tables:从数据建模到交互行为的全链路剖析

SAP Fiori elements的Tree Table组件将分层数据以表格形式展示,支持展开/折叠操作,适用于组织结构、物料清单等多级数据场景。该组件在List Report和Object Page中均可使用,支持懒加载、多选、列冻结等标准表格功能,并与OData V4服务层级注解深度集成。后端需通过RAP或CAP建模提供层级数据,前端通过清单配置切换表类型。需注意在草稿模式下仅显示活动实体,且展开状态在编辑时不保留。性能方面建议采用懒加载策略,避免全量加载树节点。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 160

浏览器自动化的一些体会8 访问angular页面的一个问题

发现浏览器自动化有一个重要方面没有提及,即所谓的无页面浏览器,不过最近没有需求,不想尝试,先记上一笔,以后有需求时,可以有个思路。 大约一两个月前(现在比较懒散,时间不知不觉过去,连今天是几号有时候都搞糊涂),碰到一个问题,本来程序中用WebBrowser控件访问一个页面,现在那个页面用Angular重写了,访问出错,出来一个空白页面。 1。解决方案一是改注册表,修改webBrowser控件所...

weixin_30500289的博客 235

2026年佰维存储数字IC笔试试卷带答案

建立时间是有效时钟沿到来前,输入数据必须稳定保持的最短时间。保持时间是有效时钟沿到来后,输入数据必须继续稳定保持的最短时间。

Open 104

【C#关于抓包网站解析】webBrowser实现自动登录以及淘宝登录部分登录找不到对应控件解决方法

最近在开发一款淘宝领券机器人,其中要应用到网络抓包程序,使用C#开发,进行模拟自动登录,但是发现一个问题淘宝自动登录老是找不到对应的控件Id,最后想可能是淘宝应用啥技术隐藏了对应Id,借此机会教大家一些技巧。 使用遍历标签来找到id if (webBrowser1.Document.GetElementsByTagName("input").Count > 0) { ...

谢先生的日记 1737

《YOLO系列模型的多模态项目》配置使用教程(必看内容)

在根目录的文件夹中用于存放的是我已经配置好的一些多模态融合模型,可结合专栏中相应的文章介绍,进一步了解测试其中内容。

Limiiiing的博客 4665

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

QQ微博登陆封装

最近想搞写一个基于QQ微博的桌面应用,按照官方的介绍,我使用C#的SDK进行开发,但是发现这个SDK关于登陆的地方很粗糙,另外发现通过OAuth的方式登陆的话,需要用户去填写获取到的verifer字符串。 研究了一下,发现C#里面可以通过一个Webbrowser来解决这个问题。基于这个机制,我写了一个登陆的辅助类。 using System; using System.Collectio...

weixin_30571465的博客 88

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

urlmon.idl

【代码】urlmon.idl。

zslefour的专栏 153

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 最近在SDK下使用WebBrowser遇到了个问题
下一篇: 得到IOleInPlaceActiveObject接口,IOleInPlaceActiveObject::TranslateAccelerator(&msg);
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值