文章介绍

目前最小的浏览器内核是龙泉寺扫地僧基于Chromium二次封装后,体积比原来缩小十几倍的Miniblink,本文章将介绍如何使用神僧封装的Miniblink开发一款非常实用并且体积非常小的浏览器,Miniblink编译输出的是C语言接口,可以在不同的语言间导入调用,甚至包括国内著名程序语言“易语言”,只需要用到不多的接口即可创建一个非常流畅的浏览器。

内核下载

官方主页:https://miniblink.net/
内核最新版本下载:https://github.com/weolar/miniblink49/releases
本文章所使用版本:下载链接
内核源码:https://github.com/weolar/miniblink49

教程说明

本文章使用VisualStudio里提供的VC++来进行演示,使用Miniblink不需要用到过多的操作,只要把下载好压缩包里的头文件wke.h复制到我们的工程目录下,在程序内部导入此头文件即可调用到Miniblink提供的API函数,因为Miniblink是以动态链接库的方式调用的,在我们运行程序之前还需要复制压缩包里的node.dll到程序项目生成目录下,wke.h头文件里会自动导入此库。

需要注意的是调用Miniblink提供的接口时,绝对不能夸线程调用的,我们在窗口消息线程调用即可,如果一定要在其他线程调用,建议使用发送窗口消息(SendMessage,PostMessage)形式来进行调用即可,这不是Miniblink内核本身的问题,算是一种线程安全的基本常识吧。

用Miniblink创建一个简易的浏览器非常简单,如果用到的功能单一,只是打开一个显示页面,用到以下几个API即可。

API 说明
wkeInitialize 导入动态链接库node.dll,初始化Miniblink的接口
wkeCreateWebWindow 创建浏览器窗口,返回可操作该页面的接口指针
wkeOnWindowDestroy 绑定浏览器窗口的销毁事件,用于处理程序的退出
wkeGetWindowHandle 通过操作指针(wkeWebView)来获取创建后的窗口句柄
wkeMoveToCenter 把浏览器窗口移动到屏幕中心的位置
wkeShowWindow 显示或隐藏创建后的浏览器窗口
wkeLoadURL 让浏览器窗口视图加载指定页面地址

这里只介绍几个常用到的API,如果想知道更多其他的东西可以到官方页面查看更多API说明信息

我们先用VisualStudio创建一个空的项目,项目名称为mb_simple_demo,位置可以选择自己常用的目录下即可。

项目创建完成后,因为我们的浏览器需要用到窗口界面,所以需要把我们的项目配置里的配置属性->链接器->系统->子系统修改成窗口属性,

做完以上步骤后我们就可以开始创建一个非常简单的浏览器了,在“源文件”筛选器下创建一个C++源码文件main.cpp

接下来源码部分非常简单,几十行代码即可完成创建了,是不是很方便呢?

main.cpp

//在下载好的Miniblink压缩包里可以找到此头文件,把其复制到我们的工程源码目录下即可
//复制完成后,再把压缩文件下的node.dll复制到项目生成目录,Miniblink开发环境便完成搭建
#include "wke.h"wkeWebView    G_WebView = NULL;      //Miniblink浏览器视图指针
HWND        G_WindHandle = NULL;   //浏览器窗口的窗口句柄//消息循环分发
void MessageLoop() {MSG v_Message = { 0 };while (GetMessage(&v_Message, NULL, 0, 0)){TranslateMessage(&v_Message);DispatchMessage(&v_Message);}
}//浏览器窗口销毁回调函数,在行36处执行绑定到浏览器窗口后有效。
void onWindowDestroy(wkeWebView webWindow, void* param) {PostQuitMessage(0);
}int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow
) {//这个API函数用于导入动态链接库node.dll,初始化Miniblink的接口wkeInitialize();//Miniblink接口初始化完成后,我们就可以直接开始创建一个简单的浏览器窗口G_WebView = wkeCreateWebWindow(wkeWindowType::WKE_WINDOW_TYPE_POPUP, NULL, 0, 0, 1024, 700);//绑定窗口销毁事件,用于退出整个程序wkeOnWindowDestroy(G_WebView, onWindowDestroy, NULL);//窗口创建完成后通过这个接口我们就可以获取到窗口句柄G_WindHandle = wkeGetWindowHandle(G_WebView);//调用此API把刚刚创建的浏览器创建移动到屏幕中间wkeMoveToCenter(G_WebView);//之后我们还需要调用此API把窗口显示下wkeShowWindow(G_WebView, TRUE);//这里让浏览器窗口打开我们指定的页面即可wkeLoadURL(G_WebView, "https://www.csdn.net");//运行Windows消息循环,处理与用户交互的消息,这里会阻塞直到浏览器窗口销毁后运行PostQuitMessage(0)执行程序最后的退出步骤MessageLoop();return 0;
}

原创不易,转载请注明出处

用 VC++ 调用最小的浏览器内核创建一个简易的浏览器相关推荐

  1. linux搭建一个的过程,Linux内核创建一个新进程的过程

    此文仅用于MOOCLinux内核分析作业 task_struct数据结构 根据wiki的定义,进程是计算机中已运行程序的实体.在面向线程设计的系统(Linux 2.6及更新的版本)中,进程本身不是基本 ...

  2. c语言求出伍位数,简介 模拟银行的钱数大写输出例如345叁肆伍方法/步骤 首先打开VC++ 文件》》》新建 创建一个C++空白文档 先声明头文件复制代码 代码...

    简介 模拟银行的钱数大写输出例如 345 叁肆伍 方法/步骤 首先打开VC++ 文件>>>新建 创建一个C++空白文档 先声明头文件 #include 声明变量 char *p[10 ...

  3. 依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...

  4. Winform初学 ---01设计一个简易的浏览器

    1.说明: 最近想利用winform设计一个简易的浏览器.winform自带一个WebBrowser组件,但是WebBrowser具有非常大的局限性,用的是IE的内核,使用该组件打开网址后非常地不美观 ...

  5. 如何使用 Java AWT 创建一个简易计算器

    本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工具包)是一个有助于构建 GUI 的 API (图形用户界面)基 ...

  6. 基于 Spring Boot 2.x 使用 Activiti 创建一个简易的请假流程

    文章目录 1 摘要 2 准备工作 3 请假流程图 3 核心代码 3.1 数据库表 3.2 流程管理工具类 3.3 流程的使用 4 推荐参考资料 5 Github 源码 ​ ​ ​ 1 摘要 工作流是需 ...

  7. python建立一个简单的server_使用Python创建一个简易的Web Server

    Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...

  8. 在浏览器中创建一个多人海盗射击游戏:

    制作多人游戏具有挑战性,原因有以下几个:托管成本昂贵,设计棘手且难以实施. 通过本教程,我希望解决最后一个障碍. 这是针对那些知道如何制作游戏并熟悉JavaScript但从未制作过在线多人游戏的开发人 ...

  9. 实验六:分析Linux内核创建一个新进程的过程

    20135108 李泽源 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h ...

  10. 6、分析Linux内核创建一个新进程的过程

    姓名:周毅原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这篇文章主要分析lin ...

最新文章

  1. 对数组中的数字 1 和 2 进行排序,使得数字 1、2 分别位于前、后部分
  2. python request.get乱码_python的request中文乱码怎么办
  3. Golang 编程思维和工程实战
  4. 光线求交加速算法:边界体积层次结构(Bounding Volume Hierarchies)3-LBVH(Linear Bounding Volume Hierarchies)
  5. HDU2566 统计硬币【暴力】
  6. 【linux网络】net_device及注册与销毁
  7. LaTeX 中文模版代码
  8. 图解3GPP规范文档组织结构与编号规则
  9. python 知乎接口_python爬虫入门(3)--利用requests构建知乎API
  10. ln命令 Linux软连接(Symbolic Link)和硬链接(Hard Link)
  11. 1.Spring Boot使用Apache Curator实现服务的注册和发现「第四章 ZooKeeper Curator应用场景实战」「架构之路ZooKeeper理论和实战」
  12. POI实现Excel文件加密
  13. IJCAI2021强化学习相关论文集合推荐
  14. 剑指Offer-22反转链表
  15. Aluminium cold plate
  16. shell入门之expr的使用
  17. 汇编-ARMv8架构指令集
  18. PAT A1010.Radix 二分法
  19. VTD 监视器航向角与 53-2017国标 航向角对齐
  20. 我给了老公3个月的花心期!爱还会再回来吗?

热门文章

  1. html制作跑马灯,html跑马灯制作
  2. WebService
  3. 计算机多媒体故障,多媒体教室设备常见故障及处理方法
  4. php实现下雪场景,ps制作唯美漂亮的下雪场景gif动态图
  5. 在点光源的基础上利用光域网来分布光的传播范围及方向_daiding
  6. QQlook--QQ空间密码 相册密码查看工具 国庆版 V2.4
  7. NUAA 南航操作系统实验
  8. 关于打开NVIDIA控制面板闪退问题
  9. 电商生鲜网站开发(接口文档)
  10. WORD里边替换所有中文